对于进行操作系统开发的爱好者而言,最困难的事情之一就是不知道从何处下手开发。很多书籍对操作系统的原理进行了深入的阐述,但是似乎没有人一步一步地教爱好者如何由浅入深地了解这些概念。
前几期中,已经有文章就这一问题进行了探讨,在此我想尽量不用面向编程的叙述方式,而只是向那些想要开发操作系统的爱好者介绍一些相关的工具和技巧。有兴趣的读者可以轻松获取想知道的资源,并且开始自己的设计和编程。
你也许可能没有意识到,操作系统的开发实际上并不是从头开始的。编写一个可靠的引导装载程序(bootloader)本身就是一个非常系统的项目,因此我不建议初学者自己开发一个操作系统的引导装入程序,很多可靠的引导装载程序(例如Grub、LILO、ppcboot等)都是免费的。如果一定要坚持自己开发这一部分的内容,我建议把它推迟到项目的后期进行。在本文中,我将使用GNU Grub。
开发环境
为了使操作系统开发过程更加轻松,需要构建一个开发环境,这个环境应该满足以下几个要求:
◆ 可以很快地对自己修改后的新内核进行编译;
◆ 不用重新启动用于开发的机器;
◆ 不需要使用软盘作为操作系统的存储介质。
本文将介绍很多可以满足上面这三个需求的环境。它由一台从事开发的机器和一台测试的机器组成,两个机器都位于同一网络之上。用于开发的机器应该装配有一套用于开发的编程工具:汇编和C编译器、一个连接器和“make”工具。还有一个我认为特别有用的工具就是模拟器,它可以帮助调试内核,并且允许很快对新加入的代码行进行测试。接下来,还需要一个TFTP服务器。该工具将允许通过具有TFTP能力的引导装载程序通过网络从开发的机器上下载新开发的内核。
测试用的机器,这台机器所需要的只是一个网卡和一个支持TFTP的引导装载程序。
设置开发环境
1.开发用的机器
选择的编程工具是:
◆ gcc 2.95.4
◆ ld 2.13.90.0.10
Bochs 1.4.1是一个x86模拟器。注意要使其支持调试模式,就要对其进行一些特定的编译。命令如下:
$ ./configure --enable-x86-debugger
$ make
为了正确地使用Bochs,需要创建一个磁盘映像,它要有引导装载程序和文件系统。具体方法可参见《Linux上古典仍在流行》之Bochs。
TFTP服务器我选择的是atftpd,使用基于Linux的TFTP服务器是一件非常简单的事情。
2.测试用的机器
我选择的引导装载程序是GNU Grub 0.92,这里需要注意的是要让Grub的TFTP终端具有和网卡通信的能力。我用作测试的机器使用的是一个NE2000 ISA网卡,通过以下命令来实现这一目的:
$ ./configure --enable-ne --enable-ne-scan=0x220
$ make
请注意,如果使用的是即插即用PCI卡的话,配置起来要容易得多。现在你可以把Grub映像安装至测试用的机器MBR之上,或者是一个用于启动测试机器的软盘之上。我喜欢使用后者,因为用于测试的机器还要用于其它用途,所以不想将其安装于硬盘之上。操作如下:
$ cat ./stage1/stage1 ./stage2/stage2 > /dev/fd0
然后,把软盘插入到测试用的机器中,并且看一看网卡是否能够被识别,可以通过手工配置或者使用dhcp服务器。
grub> dhcp
Probing... [NE*000]
NE2000 base 0x220, addr 00:C0:A8:4E:5A:76