前言
本人是在读大学生,本学期由于课程需要就进行了实现操作系统的实验,主要参考《Orange's:一个操作系统的实现》(在此后将简称为《Orange's》)这本书的内容。在实现的过程中,遇到了不少困难,因此希望将自己的学习过程记录下来,一方面是做个备忘,另一方面,如果能帮到遇到相同困难的朋友那真是太好不过了。
一
以下,正文开始。由于身边没有软盘以及有软驱的电脑,第一章内容就先跳过。
首先是工作环境的搭建,在此先说明一下,我的整个实验过程都是在Ubuntu 13.04 64位系统下进行的。整个过程很简单,只用了3个命令。
sudo apt-get install nasm #安装NASM sudo apt-get install bochs #安装虚拟机bochs sudo apt-get install bochs-sdl #安装bochs所需的GUI库bochs-sdl
这里和《Orange's》中有些不同,因为首先我没有用到bochs的调试功能,所以只安装了普通的版本,如果需要调试可以按照书上的方法。sdl库的安装只是遵从前辈的建议,我自己并没有深究,在网上简单搜索了一下,似乎是因为默认情况下采用的图形库需要连接服务器而这一步会出问题。
接下来就可以在虚拟机上进行第一章内容的实践来测试一下。
第一步是用NASM汇编boot.asm产生“操作系统”的二进制代码,具体汇编代码参考《Orange's》的内容。
nasm boot.asm -o boot.bin #-o参数指定了生成文件的名字
第二步是使用bximage命令生成虚拟软盘a.img(其实可以取自己喜欢的名字,只要注意在之后涉及该盘的步骤中更改相应的文件名就可以。)
bximage #之后按提示操作,输入fd、1.44、a.img,更详细可参见《Orange's》
第三步,用dd命令将操作系统写入软盘。
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
如果想知道dd命令的参数的含义以及更多信息,可以参考这篇文章。
第四步,新建文本文件,输入以下内容(#号后是注释),保存为bochsrc(其实这里也可以取自己喜欢的名字,只要记得手动指定配置文件就可以了)
display_library: sdl #启用bochs图形界面库sdl megs: 32 #虚拟机内存设定为32M floppya: 1_44=a.img, status=inserted #为虚拟机设定一个外设:软驱A盘,装载虚拟盘a.img(a.img不在当前目录的话,可以通过路径指定) boot: floppy #虚拟机从软盘启动
关于bochs配置文件的更多信息,可以自行寻找相关文档参考。
其实以后的大多数时候都可以直接用这个配置文件。
这里说明一下,我的配置和《Orange's》随书光盘给的配置文件不一样,删掉了五行(romimage、vgaromimage、mouse、keyboard、log开头的五行),事实上,我用随书光盘中的配置文件会出问题。在光盘中给出的一些配置文件中,会是这样的情况:
romimage: /usr/share/bochs/BIOS-bochs-latest vgaromimage: /usr/share/vgabios/vgabios.bin
这个会导致出错,可以试着改成:
romimage: file=/usr/share/bochs/BIOS-bochs-latest vgaromimage: file=/usr/share/vgabios/vgabios.bin
或者像我一样直接删掉,至少目前我用没有这两行的配置文件没有出过问题。
至于另外三行,可以看出是设置鼠标和键盘以及设定日志文件的,删掉无碍。使用光盘中的配置文件在我的机子上报错,似乎是键盘映射的配置文件有问题,没有深究。
第五步,bochs命令启动bochs虚拟机
bochs -f bochsrc
-f参数指定了配置文件,事实上,如果不指定的话,bochs会在当前目录下寻找默认名称的文件作为配置文件,默认名称包括bochsrc(其他我不记得了,可以查阅相关文档),所以如果配置文件命名为bochsrc(或其他默认名称),那么在该目录下只要在终端输入bochs就可以启动了。