在網路中,不少伺服器採用的是linux系統。為了進一步提高伺服器的效能,可能需要根據特定的硬體及需求重新編譯linux核心。編譯linux 核心,需要根據規定的步驟進行,編譯核心過程中涉及到幾個重要的檔案。比如對於redhat linux,在/boot目錄下有一些與linux核心有關的檔案,進入/boot執行。
編譯過redhat linux核心的人對其中的system.map、vmlinuz、initrd-2.4.7-10.img印象可能比較深刻,因為編譯核心過程中涉及到這些檔案的建立等操作。那麼這幾個檔案是怎麼產生的?又有什麼作用呢?本文對此做些介紹。
一、vmlinuz
vmlinuz是可引導的、壓縮的核心。「vm」代表「virtual memory」。linux 支援虛擬記憶體,不像老的作業系統比如dos有640kb記憶體的限制。linux能夠使用硬碟空間作為虛擬記憶體,因此得名「vm」。vmlinuz是可執行 的linux核心,它位於/boot/vmlinuz,它一般是乙個軟鏈結,比如圖中是vmlinuz-2.4.7-10的軟鏈結。
vmlinuz的建立有兩種方式。一是編譯核心時通過「make zimage」建立,手動拷貝到/boot目錄下面。zimage適用於小核心的情況,它的存在是為了向後的相容性。
二是核心編譯時通過命令make bzimage建立,然後手動拷貝至/boot目錄下。bzimage是壓縮的核心映像,需要注意,bzimage不是用bzip2壓縮 的,bzimage中的bz容易引起誤解,bz表示「big zimage」。 bzimage中的b是「big」意思。 zimage(vmlinuz)和bzimage(vmlinuz)都是用gzip壓縮的。它們不僅是乙個壓縮檔案,而且在這兩個檔案的開頭部分內嵌有 gzip解壓縮**。所以你不能用gunzip 或 gzip –dc解包vmlinuz。
核心檔案中包含乙個微型的gzip用於解壓縮核心並引導它。兩者的不同之處在於,老的zimage解壓縮核心到低端記憶體(第乙個 640k),bzimage解壓縮核心到高階記憶體(1m以上)。如果核心比較小,那麼可以採用zimage或bzimage之一,兩種方式引導的系統執行 時是相同的。大的核心採用bzimage,不能採用zimage。vmlinux是未壓縮的核心,vmlinuz是vmlinux的壓縮檔案。
二、initrd-x.x.x.img
initrd是「initial ramdisk」的簡寫。initrd一般被用來臨時的引導硬體到實際核心vmlinuz能夠接管並繼續引導的狀態。圖中的initrd-2.4.7-10.img主要是用於載入ext3等檔案系統及scsi裝置的驅動。
比如,使用的是scsi硬碟,而核心vmlinuz中並沒有這個scsi硬體的驅動,那麼在裝入scsi模組之前,核心不能載入根檔案系統,但 scsi模組儲存在根檔案系統的/lib/modules下。為了解決這個問題,可以引導乙個能夠讀實際核心的initrd核心並用initrd修正 scsi引導問題。initrd-2.4.7-10.img是用gzip壓縮的檔案,initrd實現載入一些模組和安裝檔案系統等功能。
initrd映象檔案是使用mkinitrd建立的。mkinitrd實用程式能夠建立initrd映象檔案。這個命令是redhat專有的(這也是為什麼,在linux核心包裡/documentation/changes裡面沒有提到要將mkinitrd公升級)。其它linux發行版或許有相應的命令。這是個很方便的實用程式。具體情況請看幫助:man mkinitrd下面的命令建立initrd映象檔案。
三、uimage檔案
vmlinux是核心檔案,zimage是一般情況下預設的壓縮核心映像檔案,壓縮vmlinux,加上一段解壓啟動**得到。而uimage 則是使用工具mkimage對普通的壓縮核心映像檔案(zimage)加工而得。它是uboot專用的映像檔案,它是在zimage之前加上乙個長度為 64位元組的「頭」,說明這個核心的版本、載入位置、生成時間、大小等資訊;其0x40之後與zimage沒區別。
其實就是乙個自動跟手動的區別,有了uimage頭部的描述,u-boot就知道對應image的資訊,如果沒有頭部則需要自己手動去搞那些引數。
如何生成 uimage檔案?首先在uboot的/tools目錄下尋找mkimage檔案,把其copy到系統/usr/local/bin目錄下,這樣就完成制 作工具。然後在核心目錄下執行make uimage,如果成功,便可以在arch/arm/boot/目錄下發現uimage檔案,其大小比 zimage多64個位元組。
此外,平時除錯用uimage,不用去管調整了哪些東西;zimage則是一切ok後直接燒0x0。開機就執行。
uImage和zImage的區別
zimage是arm linux常用的一種壓縮映像檔案,uimage是u boot專用的映像檔案,它是在zimage之前加上乙個長度為0x40的 頭 說明這個映像檔案的型別 載入位置 生成時間 大小等資訊。換句話說,如果直接從uimage的0x40位置開始執行,zimage和uimage沒有任何區別...
zImage和UImage的區別
1 核心編譯 make 之後會生成兩個檔案,乙個image,乙個zimage,其中image為核心映像檔案,而zimage為核心的一種映像壓縮檔案,image大約為4m,而zimage不到2m。那麼uimage又是什麼的?它是uboot專用的映像檔案,它是在zimage之前加上乙個長度為64位元組的...
zImage和uImage的區別
一 vmlinuz vmlinuz是可引導的 壓縮的核心。vm 代表 virtual memory linux 支援虛擬記憶體,不像老的作業系統比如dos有640kb記憶體的限制。linux能夠使用硬碟空間作為虛擬記憶體,因此得名 vm vmlinuz的建立有兩種方式。一是編譯核心時通過 make ...