理解linux內(nèi)核的vmlinuz和initrd概念

Original address:http://www.chenjunlu.com/2010/11/understanding-of-vmlinuz-initrd-and-system-map/
1. vmlinuz
vmlinuz是可引導(dǎo)的、壓縮的內(nèi)核。
“vm”代表“Virtual Memory”。Linux支持虛擬內(nèi)存,不像老的操作系統(tǒng)比如DOS有640KB內(nèi)存的限制。
Linux能夠使用硬盤空間作為虛擬內(nèi)存,因此得名“vm”。
vmlinuz是可執(zhí)行的Linux內(nèi)核,它一般位于/boot/vmlinuz,它一般是一個(gè)軟鏈接。
vmlinuz的建立有兩種方式:
1. 編譯內(nèi)核時(shí)通過(guò)make zImage創(chuàng)建,然后通過(guò)如下命令產(chǎn)生。zImage適用于小內(nèi)核的情況,它的存在是為了向后的兼容性。
# cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz
2. 內(nèi)核編譯時(shí)通過(guò)命令make bzImage創(chuàng)建,然后通過(guò)如下命令產(chǎn)生。bzImage是壓縮的內(nèi)核映像,需要注意,bzImage不是用bzip2壓縮的,bzImage中的bz容易引起誤解,bz表示“big zImage”。 bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip壓縮的。它們不僅是一個(gè)壓縮文件,而且在這兩個(gè)文件的開(kāi)頭部分內(nèi)嵌有g(shù)zip解壓縮代碼。所以你不能用gunzip或gzip -dc解包vmlinuz。
# cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz
內(nèi)核文件中包含一個(gè)微型的gzip用于解壓縮內(nèi)核并引導(dǎo)它。
兩者的不同之處在于,老的zImage解壓縮內(nèi)核到低端內(nèi)存(第一個(gè)640K),bzImage解壓縮內(nèi)核到高端內(nèi)存(1M以上)。
如果內(nèi)核比較小,那么可以采用 zImage或bzImage 之一,兩種方式引導(dǎo)的系統(tǒng)運(yùn)行時(shí)是相同的。大的內(nèi)核采用bzImage,不能采用 zImage。
vmlinux是未壓縮的內(nèi)核,vmlinuz是vmlinux的壓縮文件。
2. initrd-x.x.x.img
initrd是initial ramdisk的簡(jiǎn)寫。
initrd一般被用來(lái)臨時(shí)的引導(dǎo)硬件 到 實(shí)際內(nèi)核vmlinuz能夠接管 并 繼續(xù)引導(dǎo)的狀態(tài)。
一般initrd主要是用于加載ext3等文件系統(tǒng)及SCSI設(shè)備的驅(qū)動(dòng)。
比如,使用的是SCSI硬盤,而內(nèi)核vmlinuz中并沒(méi)有這個(gè)SCSI硬件的驅(qū)動(dòng),那么在裝入SCSI模塊之前,內(nèi)核不能加載根文件系統(tǒng),但 SCSI模塊存儲(chǔ)在根文件系統(tǒng)的/lib/modules下。為了解決這個(gè)問(wèn)題,可以引導(dǎo)一個(gè)能夠讀實(shí)際內(nèi)核的initrd內(nèi)核并用initrd修正 SCSI引導(dǎo)問(wèn)題。
initrd映象文件是使用mkinitrd創(chuàng)建的。mkinitrd 實(shí)用程序能夠創(chuàng)建 initrd 映象文件。
這個(gè)命令是RedHat專有的。其它Linux發(fā)行版或許有相應(yīng)的命令。這是個(gè)很方便的實(shí)用程序。具體幫助請(qǐng)使用man mkinitrd命令來(lái)查看。