分类: BSD
2008-03-20 17:21:11
1前言
i386和amd64处理器上电或者复位后进行一系列的初始化,然后执行ROM中固化的程序,即我们通常所说的BIOS程序;的情况下,BIOS程序尝试将引导硬盘的0柱面0磁道1扇区—称为内容读入0x
引导扇区中保存的数据则称为MBR(MasterBootRecord)—包含了系统启动所需的代码和重要的数据;MBR会加载PBR(PartitionBootRecord)—其中也包含了引导程序和信息;的i386和amd64平台上,PBR并不直接引导而是加载/boot程序;最终,/boot程序完成引导内核的功能,引导过程至此结束。
上述描述中忽略了很多细节问题,但对于理解OpenBSD的引导过程已经足够,感兴趣的读者可以查阅处理器、硬盘结构和硬盘分区相关的资料以获得更详细的信息。
阅读实际的代码之前,最好浏览一遍biosboot(8)、boot(8)、booti386(8)和bootamd64(8)以及工具installboot(8)的手册,了解引导流程以及各个引导程序的功能。
OpenBSD的汇编代码采用的是AT&T风格,跟常见的IBMPC汇编不同,所以最好先行阅读一些相关的文档。
2 MBR引导
3初级引导
4次级引导
4次级引导
5小结
操作系统引导部分并不是操作系统的范围,因此,常常被人忽略。
笔者本意是分析一下OpenBSD-amd64的启动过程,点到即可。虽然OpenBSD的代码注释做的非常好,但是想理解代码的细节还是需要做很多的相关工作,这样一来分析NetBSD的事情就搁置下来了。
当笔者分析到PBR的时候,分析NetBSD引导的时候一些疑问也突然解开;而分析到/boot引导的时候,很多代码跟内核的代码已经完全一致了,例如ELF文件的加载以及内存管理等,本想继续深入却又想起NetBSD的教训,索性将大致的流程走完,等有机会分析内核的时候再仔细考虑。
在分析OpenBSD引导的过程还算顺利,因为分析NetBSD引导期间做了很多的准备,但是,反过来分析OpenBSD又解开了NetBSD的一些疑问,我想多数情况下,事情都是这样的。
写这篇文章,算是抛砖吧,我也希望能看到有更多好文章,也希望能与感兴趣的朋友互相交流。
希望BSD发展的更好。