Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18924362
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: BSD

2008-03-20 17:21:11

1前言

i386amd64处理器上电或者复位后进行一系列的初始化,然后执行ROM中固化的程序,即我们通常所说的BIOS程序;的情况下,BIOS程序尝试将引导硬盘的0柱面0磁道1扇区称为内容读入0x07C00处,如果检查到特定的标志就跳转到0x07C00处继续执行。

引导扇区中保存的数据则称为MBRMasterBootRecord包含了系统启动所需的代码和重要的数据;MBR会加载PBRPartitionBootRecord其中也包含了引导程序和信息;i386amd64平台上,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发展的更好。

内容很长,详见附件openbsd引导过程.zip(231 KB)
阅读(816) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~