make Image uImage與zImage的區別
核心編譯(make)之後會產生兩個檔案,一個Image,一個zImage,其中Image為核心映像檔案,而zImage為核心的一種映像壓縮檔,Image大約為4M,而zImage不到2M。
那麼uImage又是什麼的?它是uboot專用的映像檔案,它是在zImage之前加上一個長度為64位元組的“頭”,說明這個核心的版本、載入位置、產生時間、大小等資訊;其0x40之後與zImage沒區別。
如 何產生uImage檔案?首先在uboot的/tools目錄下尋找mkimage檔案,把其copy到系統/usr/local/bin目錄下,這樣就 完成製作工具。然後在核心目錄下運行make uImage,如果成功,便可以在arch/arm/boot/目錄下發現uImage檔案,其大小比 zImage多64個位元組。
其實就是一個自動跟手動的區別,有了uImage頭部的描述,u-boot就知道對應Image的資訊,如果沒有頭部則需要自己手動去搞那些參數。
U-boot的U是“通用”的意思。
zImage 是ARM Linux常用的一種壓縮映像檔案,uImage是U-boot專用的映像檔案,它是在zImage之前加上一個長度為0x40的“頭”,說明 這個映像檔案的類型、載入位置、產生時間、大小等資訊。換句話說,如果直接從uImage的0x40位置開始執行,zImage和uImage沒有任何區 別。另外,Linux2.4核心不支援uImage,Linux2.6核心加入了很多對嵌入式系統的支援,但是uImage的產生也需要設定。
轉http://el84.blog.163.com/blog/static/483438052008311861648/
vmlinux 編譯出來的最原始的核心檔案,未壓縮。
zImage 是vmlinux經過gzip壓縮後的檔案。
bzImage bz表示“big zImage”,不是用bzip2壓縮的。兩者的不同之處在於,zImage解壓縮核心到低端記憶體(第一個640K),bzImage解壓縮核心到高端記憶體(1M以上)。如果核心比較小,那麼採用zImage或bzImage都行,如果比較大應該用bzImage。
uImage U-boot專用的映像檔案,它是在zImage之前加上一個長度為0x40的tag。
vmlinuz 是bzImage/zImage檔案的拷貝或指向bzImage/zImage的連結。
initrd 是“initial ramdisk”的簡寫。一般被用來臨時的引導硬體到實際核心vmlinuz能夠接管並繼續引導的狀態。
romfs.img是檔案系統,可以和核心編譯到一起,形成一個獨立的完整的img檔案,核心運行後會自動找到img檔案中romfsi.mg的位置。romfs.img也可以和核心分開,這樣在載入核心後,核心會到指定的地址去尋找掛接romfs.img,如果此時沒有找到romfs.img就會報錯,因此必須在運行核心時,先將romfs.img放到指定的地址上。