2017-07-25 67 views
0

我試圖瞭解zImage和uImage之間的區別。爲什麼使用uImage而不是zImage

在我的理解uImage通過運行在Imagemkimage了,結果它增加了一個U-Boot的包裝(我不知道它究竟包含)包含header加負載地址和切入點和也許我不知道的「額外信息」。

在另一方面zImage是壓縮Image,它不包含加載地址和入口點(我的想法,糾正我,如果我'錯了),而且U-Boot的使用它可以bootz加載。

  • 在這種情況下,爲什麼使用uImage,而不是一個zImage

  • 我很好奇學習zImage和uImage的格式是否可以請您提供一些參考?

回答

1

在我的理解是把uImage通過對圖像運行mkimage生成了

你的理解是隻是部分正確。
A uImage可以包含任何類型的文件,並且不限於Linux 圖片文件。實際上它不可能是(未壓縮的)文件(因爲這不是傳統的使選項)。

在另一方面的zImage是壓縮圖像,它不包含加載地址和入口點(我的想法,糾正我,如果我'[原文]錯)

你是不正確的,它包含了內核的加載地址和入口點。爲了將內核映像解壓到適當的RAM地址,需要加載地址。內核的入口點在解壓後需要執行。
當構建用於ARM圖像和的zImage中,生成文件使用

ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) 

應翻譯的物理內存+爲0x8000開始。

zImage本身(即自解壓程序)是PIC,與位置無關的代碼。 zImage可以加載到RAM中的任何地方,並在其第一個地址執行,即它的入口點是它的加載地址。

在這種情況下,爲什麼使用uImage而不是zImage?

對於老版本的U-Boot,沒有別的選擇,因爲bootz命令可能沒有可用於Linux內核。
時下它可能是一種主觀選擇。

請注意,Linux內核社區對於在內核中支持U-Boot存在一些不滿。如果某些人有他們的方式,我會覺得你不能從主線源創建一個uImage

我想知道什麼是zImage和uImage的格式,請問您能推薦一些參考嗎?

zImage的佈局本質上是由其鏈接器規範給出的。
有關ARM,請參閱arch/arm/boot/compressed/vmlinux.lds.S
請注意,_magic_start包含無意義的加載地址。這也在文森特·桑德斯Booting ARM Linux

The zImage has a magic number and some useful information near its beginning. 

Table 2. Useful fields in zImage head code 
Offset into zImage Value  Description 
    0x24  0x016F2818  Magic number used to identify this is an ARM Linux zImage 
    0x28  start address The address the zImage starts at 
    0x2C  end address  The address the zImage ends at 

The start and end offsets can be used to determine the length of the compressed image (size = end - start). 
... 
The start address is usually 0 as the zImage code is position independent. 

說明第5部分提到然而,該ARM啓動的要求已經由羅素國王Documentation/arm/Booting

一個的uImage的佈局取代簡直是U-Boot的頭加圖像文件,無論可能。

(希望沒有我寫什麼矛盾湯姆·里尼寫了。)

+0

謝謝1「A的uImage可以包含任何類型的文件,並不僅限於Linux映像文件」,你能告訴例子uImage可以包含哪個文件? 2-「你是不正確的,zImage確實包含內核的加載地址和入口點」,我說的是引導設備加載地址而不是內核加載地址,無論如何,我想我已經明白了; zImage是PIC,所以無論它在哪裏加載 – Mouin

+0

(1)頭文件有一個字節,用於編碼圖像的類型。請參閱http://elixir.free-electrons.com/u-boot/latest/source/include/image.h#L197以獲取超過三十種可能的值。 (2)zImage在偏移量0x28處包含其加載地址(但似乎沒有人使用它)。 – sawdust

+0

好的,清楚,謝謝 – Mouin

0

這不太對。雖然用於製作通常稱爲uImage的「傳統」u-boot標頭可以是任何東西,包括arch/arm/boot/Image下的Image,但它通常是zImage文件。這是因爲歷史上不支持在U-Boot中直接引導zImage,並且由於zImage不提供數據校驗和,因此uImage具有可用內容的crc32。

zImage文件是一個獨立的可執行文件。傳統的「uImage」格式在U-Boot中沒有正式記錄,但可以通過閱讀代碼來理解。在大多數情況下,不是使用「uImage」,而是今天要使用FIT映像,它在U-Boot源文件的doc/uImage.FIT目錄中有許多文檔。

相關問題