搭建linux-0.11调试环境
平台:ubuntu 16.04 desktop
本例在VirtualBox虚拟机上使用ubuntu 16.04 desktop。
1. 安装调试环境
$ sudo apt update $ sudo apt install build-essential gdb qemu unzip git wget # 以下可选 $ sudo apt install bc flex bison gawk texinfo libelf-dev libncurses5-dev
查看gcc和gdb版本:
$ gcc -v gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) $ gdb -v GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
2. 安装工具
本例使用vs code,由于ubuntu 16.04上的libnss3版本较旧,无法成功安装新版vs code,这里选择一个旧版本安装:
我下载的是v1.63版本的,测试可以正常使用,你可以尝试其它版本,下载地址:
[https://code.visualstudio.com/updates/v1_63],进入后选择Downloads: Linux deb进行下载.
安装:
$ sudo dpkg -i code_xxxx.deb
启动之后,安装一下插件:
1). C/C++插件,开发者是:MS官方;
2). GDB插件,开发者是:DamianKoper;
3. 下载源码
有一个网址,可以下载到:[http://www.oldlinux.org/]
但本例使用别人修改过的一个版本:[https://github.com/yuan-xy/Linux-0.11],使用的是qemu进行仿真调试。
$ git clone https://github.com/yuan-xy/Linux-0.11.git
下载完成后,在Linux-0.11是根目录进行编译和vs code调试做配置:
$ cd Linux-0.11/
$ make $ mkdir .vscode $ cd .vscode/ $ touch launch.json $ touch task.json
launch.json填入以下内容:
{ "version": "0.2.0", "configurations": [ { "name": "debug", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/tools/system", "miDebuggerServerAddress": "127.0.0.1:1234", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "preLaunchTask": "run" } ] }
task.json填入以下内容:
{ "version": "2.0.0", "tasks": [ { "label": "run", "type": "shell", "command": "make && make debug", "isBackground": true } ] }
4. Debug
以Linux-0.11/init/main.c为例:
在vs code中找到main.c中的main函数,在其内容的第一行(ROOT_DEV = ORIG_ROOT_DEV;)设置一个断点,可以用鼠标或者快捷键"F9",然后点击debug按钮或者快捷键"Ctrl + Shift + D",进入debug模式,正常的话,就可以调试了。
快捷键"F10": step over;
快捷键"F11": step in.