当你打开电脑,它会自动检测是否一切是否正常。这个过程被称为“启动自检”然后位于ROM中的BIOS引导装入程序会找到引导扇区。一个引导扇区是盘中的第一个段,它带有一个能载入操作系统的程序。引导扇区有神奇的地方被标记为0xAA55
= 43603,就在第0x1FE = 510字节。这是一个段的最后两个字节,硬件就是靠它们来区别这个段是否为引导扇区。
引导程序有一个可用于寻找启动扇区位置的表。我的老机器会先寻找软驱,然后主硬盘。很多现代计算机可以在光盘上寻找启动扇区,如果找到了一个启动扇区,引导程序会把它读入内存然后把控制权交给启动扇区里的程序。在一个标准linux系统中,这个程序就是LILO的第一阶段启动程序,有很多方法来进行启动时的设置,更多细节请参阅LILO的用户手册。
很明显,我们关于PC硬件功能有很多好讲,但这里不适合讨论,你可以参考各种关于PC硬件的书籍。
机器在CMOS里面储存了很多自身信息。包括硬盘和内存的信息,BIOS里的程序可以让你更改这些设置。看看你机器启动时的屏幕信息就能知道如何进入BIOS程序,在我机器上,在启动操作系统前按下delete
了解PC硬件的很好的方法是在二手市场里攒台机器。在386配置下就可以跑linux,而且不会花费太多。
下载并且做一张Unios的启动盘,这只是一个可启动的“Hello World!”程序,总共一百多行汇编代码。如果用可以理解GNU汇编的软件打开会更易读。
这里有篇指导文章“自己动手”在Roll Your Own 如果你想寻求真正的挑战。
用16进制编辑器打开unios的映像盘,这个映像有512字节长,正好是一段。找到那个神奇的数字0xAA55,找张可引导的盘,做同样的工作。你可以用dd命令来把引导区拷贝成文件:dd
if=/dev/fd0 of=boot.sector
注意!正确的命令格式。
看看LILO引导程序的源代码