这里先总的说明一下 Linux 操作系统启动部分的主要执行流程。当 PC 的电源打开后,80x86 结构的CPU 将自动进入实模式,并从地址 0xFFFF0 开始自动执行程序代码,这个地址通常是 ROM-BIOS 中的地址。PC 机的 BIOS 将执行某些系统的检测,并在物理地址 0 处开始初始化中断向量。此后,它将可启动设备的第一个扇区(磁盘引导扇区,512 字节)读入内存地址 0x7C00 处,并跳转到这个地方。启动设备通常是软驱或是硬盘。
Linux 的最最前面部分是用 8086 汇编语言编写的(boot/bootsect.s),它将由 BIOS 读入到内存 0x7C00处,当它被执行时就会把自己移到绝对地址 0x90000 处,并将启动设备(boot/setup.s)的下 2kB 字节的代码读入内存 0x90200 处,而内核的其它部分(system 模块)则被读入到从地址 0x10000 开始处,因为当时system 模块的长度不会超过 0x80000(即 512KB),所以它不会覆盖在 0x90000 处开始的 bootsect 和 setup模块。
本文详细介绍了Linux操作系统的启动过程,包括从电源开启后的实模式执行流程、BIOS初始化及磁盘引导扇区读取,再到启动代码的内存迁移、保护模式的启动以及最终调用main()程序等内容。
267

被折叠的 条评论
为什么被折叠?



