bocsh安装指南, 必看, 这个软件有坑
一、配置思路¶
首先我们要明白一件事:bochs的调试方式有好几种。你可以使用bochs自带的调试功能进行调试,也可以使用gdb进行调试。但二者是相互矛盾的,你不能在1个配置好的bochs模拟器上使用两种调试方法。举个例子,在我的之前的那期文章中,我使用的的是bochs自带的调试功能,因此我无法在这台配置好的bochs模拟器上使用gdb进行远程调试。解决方法也很简单:配置两台不同的bochs就好了。(反正也占不了多大空间)
二、配置过程¶
1. 下载安装包并解压¶
首先下载安装包,然后解压并修改bug。(至于如何下载bochs并修改bug可以去看我的第一期文章)
2. 复制出第二份解压后的文件¶
新建一个文件夹,把修改完后的bochs-2.6.11整个文件夹放进去。把bochs-2.6.11文件夹复制两份并对其中一份进行重命名(和另一个名字不同就行)。两个文件夹分别用来配置使用自带调试功能的bochs和使用gdb远程调试的bochs。我的两个文件夹的名字分别是bochs-2.6.11(配置自带调试功能)和bochsgdb-2.6.11(配置gdb远程调试功能)。
3. 配置自带调试功能的bochs¶
首先我们来配置自带调试功能的bochs模拟器,在bochs-2.6.11文件夹下执行以下配置命令
./configure --with-x11 --with-wx --enable-debugger --enable-disasm --enable-all-optimizations --enable-readline --enable-long-phy-address --enable-ltdl-install --enable-idle-hack --enable-plugins --enable-a20-pin --enable-x86-64 --enable-smp --enable-cpu-level=6 --enable-large-ramfile --enable-repeat-speedups --enable-fast-function-calls --enable-handlers-chaining --enable-trace-linking --enable-configurable-msrs --enable-show-ips --enable-debugger-gui --enable-iodebug --enable-logging --enable-assert-checks --enable-fpu --enable-vmx=2 --enable-svm --enable-3dnow --enable-alignment-check --enable-monitor-mwait --enable-avx --enable-evex --enable-x86-debugger --enable-pci --enable-usb --enable-voodoo
以上部分和第一期文章完全相同。不同之处在这次多了一个配置参数:
解释一下,prefix参数可以决定我们将bochs安装在哪里。(ubuntu系统下默认安装在/usr/local/bin目录下,好像是这个,我有点记不清了。)这次我们要装两个bochs,所以需要自定义一下目录。我选择另开一个文件夹装这两个bochs。需要注意的是,prefix接收的是绝对路径(在ubuntu下从/home开始)。
然后分别执行以下两条命令:
如果没有报错就是安装成功了,至于怎么修改.bochsrc和创建bochsrc的问题,请参考上一期文章。
4. 配置使用gdb调试功能的bochs¶
然后我们来配置使用gdb远程调试的bochs。在bochsgdb-2.6.11文件夹下执行以下命令
./configure --with-x11 --with-wx --enable-disasm --enable-all-optimizations --enable-readline --enable-long-phy-address --enable-ltdl-install --enable-idle-hack --enable-plugins --enable-a20-pin --enable-x86-64 --enable-cpu-level=6 --enable-large-ramfile --enable-repeat-speedups --enable-fast-function-calls --enable-handlers-chaining --enable-trace-linking --enable-configurable-msrs --enable-show-ips --enable-debugger-gui --enable-iodebug --enable-logging --enable-assert-checks --enable-fpu --enable-vmx=2 --enable-svm --enable-3dnow --enable-alignment-check --enable-monitor-mwait --enable-avx --enable-evex --enable-x86-debugger --enable-pci --enable-usb --enable-voodoo -enable-gdb-stub
这次的命令和上文的区别在于少了以下参数:
和
此外还多了一个参数:
当然了,路径还是要我们自定义的:
解释一下,
首先第一个参数的含义就是使用自带调试功能,第三个参数的含义是使用gdb远程调试功能,二者相互矛盾,所以删去第一个参数。
其次bochs-gdb的调试功能目前只支持单核,而--enable-smp和CPU多核心有关,因此我们需要把这个参数也删了。
prefix参数上文讲过,这里不再详述。
然后分别执行以下两条命令:
如果没有报错就是安装成功了。
然后我们还要做一件事:对这个新的bochs重命名,让它和之前的bochs区分。
我们只需要进入安装bochs-gdb的目录,然后执行以下命令
至于怎么修改.bochsrc和创建bochsrcgdb(这个配置文件必须和另一个bochs的区分开)的问题,除了参考上一期文章外,我们还有个地方需要修改。这点我们后面会详述,不过首先我们需要做一件事:把bochs和bochs-gdb所在的路径添加到环境变量中。
5. 配置环境变量¶
Ubuntu 20.04 系统默认的shell是bash。如果你没有改过的话你需要在主目录下执行以下命令:
如果你使用的是zsh的话把.bashrc换成.zshrc就行。
然后找个空行把以下代码加进去:
这样以来环境变量也配置好了。
6. 修改bochs和bochs-gdb配置文件¶
bochs的文件配置方法请参考上一期文章,这里我们重点讲bochs-gdb的配置方法。
首先,bochs-gdb的配置是建立在bochs配置的基础上(bochs要配置的那些bochs-gdb一个也少不了,除了gui_debug)。而bochs-gdb多出的地方就是以下所展示的内容。
首先在bochsgdb-2.6.11文件夹下执行以下命令:
如果你把之前的那些东西配置好了的话,那么它是能正常运行的,这里我们选择选项3
然后选择选项16
然后选择选项2
再选择选项1
这里我们把no改成yes, 它会自动帮你把远程连接的端口设置为1234,然后一直按回车键返回最开始的菜单,选择选项4保存配置文件, 然后它会让你重命名文件,把配置文件命名为bochsrcgdb(或者什么其它名字)就行。执行的时候使用以下命令
把-f 后面的文件名改成你自己的bochs-gdb配置文件的名称就行了。
三、配置vscode¶
我的最终目标是在vscode中像调试普通程序一样调试系统内核。因此我们还得再做一些额外工作。
首先在vscode中打开你写操作系统的文件夹,然后配置.vscode文件夹。该文件夹里面要有两个文件:task.json和lauch.json。这里我把我的配置文件放上来以供各位参考:
//task.json
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc-9 生成活动文件",
"command": "/usr/bin/gcc-9",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.out"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
//launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "bochs-gdb: build and debug OS kernel",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/kernel.bin",//这个是我放编译好的内核文件的地方,你们看着修改
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerServerAddress": "localhost:1234",//远程调试的端口
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"miDebuggerPath": "/usr/bin/gdb"
},
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.out",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: gcc-9 生成活动文件",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
然后们就可以愉快的使用vscode调试系统内核了
有一些问题目前我用的编译命令¶
./configure --prefix=/usr --without-wx --with-x11 --with-x --with-term --disable-docbook --enable-cpu-level=6 --enable-fpu --enable-3dnow --enable-disasm --enable-long-phy-address --enable-disasm --enable-pcidev --enable-usb --enable-all-optimizations --enable-gdb-stub --with-nogui --prefix=/home/coder/bochs-2.7/opt
clion的远程gdb调试配置¶
使用clion进行远程开发
如果调试不了, 查看clion的gdb控制台, 如果是提示找不到
tmp/filepath
目录之类的, 那么需要我们添加一个, 上面设置之后clion会给我们添加一个部署的配置, 里面添加映射
注意, clion是不能对asm文件打断点的, 我们可以由外部函数,跳转进去