Linux 启动过程
系统启动
在 PC 中,引导 Linux 是从 BIOS 中的地址 0xFFFF0 处开始的。
1.BIOS 的第一个步骤是加电自检(POST)。 POST 的工作是对硬件进行检测。
2.BIOS 的第二个步骤是进行本地设备的枚举和初始化。
3、POST 代码从内存中清除,但运行时服务(runtime service)仍然留在内存。
4、BIOS 从 CMOS 的设置中找出第 1/2/3 启动设备(可能有第 4 个),然后逐个尝试, 并
在第一个 ”active“状态的硬盘上读入其 MBR。
对于 I386 平台
i386 系统中一般都有 BIOS 做最初的引导工作,那就是将四个主分区表中的第一个可引导分区的第一个扇
区加载到实模式地址 0x7c00 上,然后将控制转交给它。
在“arch/i386/boot”目录下,bootsect.S 是生成引导扇区的汇编源码,它首先将自己拷贝到 0x90000 上,然后
将紧接其后的 setup 部分(第二扇区)拷贝到 0x90200,将真正的内核代码拷贝到 0x100000。以上这些拷
贝动作都是以 bootsect.S、setup.S 以及 vmlinux 在磁盘上连续存放为前提的,也就是说,我们的 bzImage 文
件或者 zImage 文件是按照 bootsect,setup, vmlinux 这样的顺序组织,并存放于始于引导分区的首扇区的
连续磁盘扇区之中。
bootsect.S 完成加载动作后,就直接跳转到 0x90200,这里正是 setup.S 的程序入口。 setup.S 的主要功能就
是将系统参数(包括内存、磁盘等,由 BIOS 返回)拷贝到 0x90000-0x901FF 内存中,这个地方正是
bootsect.S 存放的地方,这时它将被系统参数覆盖。以后这些参数将由保护模式下的代码来读取。
除此之外,setup.S 还将 video.S 中的代码包含进来,检测和设置显示器和显示模式。最后,setup.S 将系统
转换到保护模式,并跳转到 0x100000(对于 bzImage 格式的大内核是 0x100000,对于 zImage 格式的是
0x1000)的内核引导代码,Bootloader 过程结束。
第一阶段引导加载程序
1、MBR 实际上是由 3 个部分组成 :主引导加载程序(master bootloader code,446 字
节)、主分区表 (ppt)、 magic nubmer (0xAA55)组成。
' '主分区表有 4 个记录,对应主分区 1-主分区 4,共 64 字节。最后的 magic number 是 2
字节。
2、主引导加载程序搜索主分区表,扫描全部 4 个分区记录,确保只有 1 个是被标为”active“
的(用 fdisk 可以设置某个分区为 active 分区)。
' '然后读入该分区的引导扇区(前 512 字节)。active 分区一般是 C 盘或者 linux 的第一个
分区。
3、主引导加载程序的作用就是读入第 2 阶段的引导加载程序。
MBR 剖析
MBR 中的主引导加载程序是一个 512 字节大小的映像,其中包含程序代码和一个小分区表
(参见图 2)。前 446 个字节是主引导加载程序,其中包含可执行代码和错误消息文本。
接下来的 64 个字节是分区表,其中包含 4 个分区的记录(每个记录的大小是 16 个字节)。
MBR 以两个特殊数字的字节(0xAA55)结束。这个数字会用来进行 MBR 的有效性检查。
---在终端的命令提示符后输入: "dd if=/boot/boot.NNNN of=/dev/hda
bs=446 count=1"