【精品文档】第 1 页
X86体系结构内核启动分析
一、硬件检测
当机器加电后它首先执行BIOS(基本输入输出系统)中的代码,BIOS首先执行加电自检程序(POST),当自检通过程便完成了硬件的启动。当自检完成后 BIOS按照系统COMS中设置的启动顺序搜寻有效的启动驱动器(这里我们以硬盘为例),并读入系统引导扇区,并将系统控制权交给引导程序。
二、加载和执行引导程序
系统引导程序主要是把系统内核装载到内存linux 内核启动,启动盘必须在第一个逻辑磁道上包含引导记录。这512个字节的扇区又被称作是引导扇区,在系统完成加电自检后linux命令行和shell脚本编程宝典, BIOS从启动盘中将引导扇区读入到内存中。一旦引导记录加载完毕,BIOS就交出系统的执行控制权,跳转到引导程序的头部执行。
有关linux pc的引导程序lilo和grublinux 内核启动,lilo和grub可以引导多个系统,嵌入式系统上,最常见的bootloader是UBOOTredhat linux,如果机器上要装多系统的话一般都会用到它们,这一引导程序也储存在引导扇区中或者存放在主引导记录中(MBR),lilo和grub都许允用户自己配置,它们在系统安装时建立了关于系统内核占用磁盘数据块的位置对照表。
比如,grub程序就非常强大。Gurb运行后,将初始化设置内核运行所需的环境。然后加载内核镜像。
grub磁盘引导全过程:
stage1: grub读取磁盘第一个512字节(硬盘的0道0面1扇区,被称为MBR(主引导记录),也称为bootsect)。MBR由一部分bootloader的引导代码、分区表和魔数三部分组成。
stage1_5: 识别各种不同的文件系统格式。这使得grub识别到文件系统。
stage2: 加载系统引导菜单(/boot/grub/ 根据grub版本不同文件位置会有所不同),加载内核vmlinuz和RAM磁盘initrd。
有时候基本引导装载程序(stage1)不能识别stage2所在的文件系统分区,
假设有如下grub配置代码
root (hd0,0)//grub分区
kernel /vmlinuz‐‐ ro root=/dev/ram0//linux分区
initrd /initramfs‐‐