虚拟机
选用bochs是因为其提供了方便的类似gdb的调试功能。
bochs的debug功能介绍:http://bochs.sourceforge.net/doc/docbook/user/internal-debugger.html
安装
如果是自己编译,记得配置开启调试功能:
./configure --enable-debugger --enable-disasm
MAC OSX可以使用brew 来安装bochs
brew install bochs
默认好像是开启debug功能的,或者可以配置,我有点记不清了,可自行Google
配置
配置的目的是让bochs知道以哪个设备(或虚拟文件)作为启动设备
如果需要的话,还需要对bochs所模拟的CPU和内存等进行配置
制作启动盘(文件)
osdev.org推荐使用cdrom作为启动光盘,但是笔者在实践的时候采用的是创建1.44‘软盘镜像的方式来进行试验,如果创建一个floppy image可参考下述步骤:
创建软盘镜像
可使用bximage工具-
(视具体情况而定)为镜像创建合适的文件系统
- 如果自己从无到有实现一个bootloader,完全可以不使用任何文件系统,或者使用任何文件系统
- 如果使用grub等现有bootloader,则需要考虑的是开发环境所支持的文件系统(主要是方便开发),以及最重要的bootloader所支持的文件系统
-
实现bootloader
参考《bootloader》一文的介绍
编译环境
为什么要使用交叉编译环境?
具体可参考:http://wiki.osdev.org/GCC_Cross-Compiler
简而言之,编译的目的是为了生成目标平台的可执行代码。然而我们操作系统自带的编译器一般是生成此平台下的可执行代码,这种代码不一定能在我们虚拟机所模拟的平台上运行,如我的MacBook Pro为例,我的GCC的目标平台为:
Target: x86_64-apple-darwin15.4.0
而我的玩具操作系统需要运行的平台是:
cpu: model=p3_katmai
所以,编译的GCC版本选择为:
--target=i686-elf