📔 第 01 章 部署工作环境 学习笔记
0. 内容说明¶
- 本内容依据《操作系统真象还原》进行学习,在学习过程中,由于新版本和旧版本bochs存在参数差异,故此会出现一些调试错误。也记录对应的解决方案。
1. 需要的编译器¶
对于现代OS来说,主要使用 C语言
和 汇编语言
两种语言。
所以主要选择对应两种语言的编译器:
- C语言:gcc编译器
- 汇编语言:nasm。
选择理由:开源。
1.1 gcc编译器¶
GNU编译器套装(GNU Compiler Collection,GCC),是GNU开发的编程语言编译器。
在Linux环境部署过程中,直接使用对应OS的指定指令去安装对应的gcc编译器即可。
1.2 nasm编译器¶
NASM是为了可移植性与模块化而设计的一个80x86的汇编器。支持不同的目标文件格式。
使用汇编语言开发OS的原因:
- 需要与硬件直接打交道。
- 处理的代码逻辑需要兼顾硬件的多样性,以及对硬件进行直接指令操作。
2. OS的宿主环境¶
OS归属于软件,但不是一般的软件。程序本身需要依赖于OS支持。
2.1 虚拟机相关的概念¶
虚拟机就是通过软件来模拟硬件。
虚拟机就是一个模拟了硬件资源的普通进程。对于虚拟机中的操作,都是需要通过虚拟机的检查,然后代为向OS提交操作请求。
使用虚拟机的原因:
-
运行方便
- 在宿主机系统上就是一个用户进程。
- 对于进程可以随意启动,虚拟机也是如此。
-
保护主体计算机
- 代码崩溃时,可以及时重启计算机。
- 避免宿主机重启太多次。
对于虚拟机来说,有很多的选择,一般有 qemu、bochs、virtualBox、xen 和 Vmware
等等。但是虚拟机的选择来说,就是能工作、调试、够用足矣。
2.2 virtualBox环境准备¶
关于VirtualBox安装部署虚拟机的步骤,请参考详细文章,不再过多赘述。
参考文章:https://www.debugpoint.com/install-ubuntu-windows-virtualbox/
工具平台 | 下载地址 |
---|---|
Oracle VirtualBox | https://www.virtualbox.org/wiki/Downloads |
Ubuntu 20.04 iso 镜像文件 | https://releases.ubuntu.com/focal/ |
ubuntu中安装gcc编译器方式:
由于我使用的是USB的方式,在virtual1Box中会出现如下报错方式:
-
不能分配USB设备到虚拟电脑
-
解决方案:到链接:https://download.virtualbox.org/virtualbox/ 中找到对应virtualBox版本的扩展插件。由于我使用的是 6.1.46版本,可以下载如下结尾的文件。
- 文件下载完成后,进行插件的配置。第三步时找到自己下载的插件进行加载即可。
- 在完成插件配置之后,进行USB接口的设置。
-
2.3 Boches相关准备¶
Bochs是一个LGPL源代码许可协议的x86、x86-64IBM、PC兼容机模拟器和调试工具。支持处理器(包括保护模式)、内存、硬盘、显示器、以太网、BIOS、IBM PC
Bochs下载地址(本人使用的版本:2.6.11):https://sourceforge.net/projects/bochs/files/bochs/2.6.11/
下载文件完成后,开始解压并进行编译过程。
对于编译参数的说明:
- --prefix=/data/bochs
:指定bochs的安装目录
- --enable-debugger
:打开bochs自己的调试器。看自己的选择,也可以使用远程gdb调试器(参数:--enable-gdb-stub
)
- --enable-disasm
:让bochs支持反汇编
- --enable-iodebug
:支持io接口调试器
- --enable-x86-debugger
:支持x86调试器
- --with-x
:使用x window
- --with-x11
:使用x11图形用户接口
由于我试着编译了两个版本:bochs自己的调试器
和 gdb调试器
。出现过如下错误:
-
gdb调试器版本出现的错误
在编译过程中会出现如下错误,是因为在configure文件执行过程中就已经找不到x11文件库。
可以使用如下命令方式(参考链接:https://ubuntuforums.org/showthread.php?t=1843305) :
在解决问题后,又会出现如下错误:
解决方案:
再次重新编译即可。
-
bochs自己的调试器 编译时出现的错误
- 由于先编译 gdb远程调试器的版本,目前未发现错误。
2.4 配置Bochs¶
进入安装目录进行配置 bochs.disk
文件。使用 .disk
区分启动文件。
由于存在版本的差异,有些参数在最新版本无法使用,可以根据后续错误解决方案进行分析解决。
2.5 运行Bochs¶
-
进入 bochs的安装目录,然后启动执行文件。默认提示选择符为2。
-
直接键入Enter,然后再输入配置文件:bochs.disk ,等待默认提示符变成[6],说明可以开始进行模拟。
2.6 运行bochs的过程中出现错误¶
在加载配置文件的过程中,出现如下错误PANIC的原因:
解决方案:通过bochs提供的工具 ./bximage
进行创建虚拟硬盘。
查看工具支持的信息如下:
创建成功后,显示如下:
在创建虚拟硬盘成功后,直接将 ata0-master 这一行的内容复制硬盘设置的那一行。注释掉原来的硬盘。
在直接使用 ./bochs/bochs -f bochsrc.disk
指令后,出现了语法上的错误:
>>PANIC<< bochsrc.disk:27: keyboard directive malformed.
查看了官网对keyboard的最新版本(https://bochs.sourceforge.io/doc/docbook/user/bochsrc.html)设置格式。直接修改为如下内容:
后续会出现 >>PANIC<< bochsrc.disk:34: Bochs is not compiled with gdbstub support
,原因:在编译时,没有对远程gdb调试器进行编译。对于该问题解决方案就是直接将 配置文件中的 gdbstub一行
注释掉即可。
在进行成功加载后显示提示符[6]时,直接enter后,也会出现如下的错误:
解决方案:修改配置文件内容,将其path指定为绝对路径即可。