Linux系統啟動等知識解析時間:2012-07-09 來源:位元網 作者:
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搭配使用。