1、各種文件的意義
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能夠接管並繼續引導的狀態。
2、zImage和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。開機就運行。
3、uboot啟動zImage(go)和uImage(bootm)分析
1.bootm加載linux鏡像是加載uIamge,uIamge是由mkimage制作而來,和zIamge的差異是uIamge是zIamge壓縮過的,bootm需要先對uIamge解壓,解壓地址為內核入口地址。當解壓完成時uImage和zImage幾乎是相同的,具體差異可以論述。uboot目前只能支持uImage啟動,不支持zImage啟動 2.bootm解壓過程
---------------------------------------------------------------------------
## Booting image at 08808000 ...
Image Name: Linux-2.6.14.7
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 989172 Bytes = 966 kB
Load Address: 08008000
Entry Point: 08008000
Verifying Checksum ... OK
OK uboot bootm命令對uIamge的解壓操作
---------------------------------------------------------------------------
Starting kernel ...