Linux系统启动等知识解析
PC从硬盘启动Linux系统包括两个阶段:
1. BIOS对硬件自检并找到MBR中的bootstrap【这个步骤有固化在主板中的BIOS程序完成】
2. 控制权交给bootstrap后,硬盘中MBR长度固定为512 byte,MBR本身分为两个部分:前446byte为bootstrap程序,其余为分区表。Bootstrap程序的目的是找到开机参数,获取磁盘中的内核Image,将其加载到内存中,并传入开机参数,最后将CPU的控制权交给内核。
常见的两种BootLoader:LILO、GRUB
启动中使用的两个文件:vmlinux和initrd
Vmlinux
Wikipedia的解释
On Linux systems, vmlinux is a statically linked executable file that contains the Linux kernel in one of the object file formats supported by Linux, which includes ELF, COFF and a.out. The vmlinux file might be required for kernel debugging, symbol table generation or other operations, but must be made bootable before being used as an operating system kernel by adding a multiboot header, bootsector and setup routines.
Vmlinux是编译生成的可执行文件,其格式是Linux所支持的,比如:ELF、COFF、a.out,通常用于内核调试、符号表生成。如果是要放到内核中作为可执行文件,需要添加boot相关部分才能作为可启动文件。
Initrd:
同其他Unix系统一样,Linux操作系统首先要将内核引导入内存。内核驻留于操作系统与应用程序的整个活动周期,其中应用程序(软件)在"用户空间"内运行,位于内核控制之下。
为了使加载内存最小化,一些核心 Linux 程式转化成模组形式,可以动态加载系统中。
initrd 系统中的档案在开机阶段可以被核心存取,里面的内容会被挂载成一个 loop 型态的档案,早期是将 initrd 放在小的软碟片内。initrd 通常被压缩成 gzip 类型,在开机的时候由 bootloader(LILO, GRUB) 来告知核心 initrd 的位置。
Vmlinux和image之间的区别
Vmlinux是一个elf格式的文件,image是vmlinux经过objcopy操作后只保留了data段和text段内容的文件,通常会将image进行压缩后存储,如zimage.Uimage是在zimage的基础上加上可uboot提供的长为0x40的头部,和uboot搭配使用。