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搭配使用。