Image uImage與zImage的區別

2021-10-02 07:32:51 字數 2571 閱讀 9676

(1)、核心編譯(make)之後會生成兩個檔案,乙個image,乙個zimage,其中image為核心映像檔案,而zimage為核心的一種映像壓縮檔案,image大約為4m,而zimage不到2m。

那麼uimage又是什麼的?它是uboot專用的映像檔案,它是在zimage之前加上乙個長度為64位元組的「頭」,說明這個核心的版本、載入位置、生成時間、大小等資訊;其0x40之後與zimage沒區別。

64位元組的頭結構如下:

typedef struct image_header image_header_t;

所以,uimage和zimage都是壓縮後的核心映像。而uimage是用mkimage工具根據zimage製作而來的。mkimage工具介紹如下:

u-boot裡面的mkimage工具來生成uimage(u-boot原始碼包/tools/mkimage.c )

這裡解釋一下引數的意義:

-a ==> set architecture to 'arch'

-o ==> set operating system to 'os'

-t ==> set image type to 'type' 「kernel或是ramdisk」

-c ==> set compression type 'comp'

-a ==> set load address to 'addr' (hex)

-e ==> set entry point to 'ep' (hex)(核心啟動時在此位置查詢完整的核心印象)

-n ==> set image name to 'name'

-d==> use image data from 'datafile'

-x ==> set xip (execute in place,即不進行檔案的拷貝,在當前位置執行)

對於arm linux核心映象用法:

-a arm -------- 架構是arm

-o linux -------- 作業系統是linux

-t kernel -------- 型別是kernel

-c none/bzip/gzip -------- 壓縮型別

-a 20008000 ---- image的載入位址(hex),通常為0xx00008000

-e 200080xx---- 核心的入口位址(hex),xx為0x40或者0x00

-n linux-*** --- image的名字,任意

-d name*** ---- 無頭資訊的image檔名,你的源核心檔案

uimage*** ---- 加了頭資訊之後的image檔名,任意取

原來在這個-c這個引數這裡不太理解,因為我覺得既然mkimage是用zimage去製作uimage,而本身zimage就是經過壓縮了的,為什麼這個地方還要有乙個壓縮了,後來想了下,覺得可能是這個工具也可以根據最原始的image去製作uimage,所以就有了這個引數,不深究。即使將zimage經過壓縮後生成uimage的話,我覺得壓縮比也很小。

關於-a和-e這兩個引數,具體如下:

-a和-e後面跟的分別是image的載入位址和核心的入口位址,兩者可以一樣,也可以不一樣,依情況而定。

當-a後面指定的位址和bootm ***x後面的位址一樣時,-e後面的位址必須要比-a後面的位址多0x40,也就是映像頭的大小64個位元組。因為當他們位址一樣時,uboot是不會搬運映像的。

當-a後面指定的位址和bootm ***x後面的位址不一樣時,uboot會將bootm ***x位址處的映像搬運到-a指定的位址處,此時,-e和-a必須要一樣,因為映像頭並沒有搬運過去,載入位址就是核心的入口位址。需要注意的是,因為uboot要重新搬運核心映像,所以要注意bootm ***x的位址和-a之間的位址不要導致複製時的覆蓋。

因為zimage是經過壓縮而得到的,所以其自身就有解壓縮**。

(2)、核心編譯(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的生成也需要設定。

Image uImage與zImage的區別

1 核心編譯 make 之後會生成兩個檔案,乙個image,乙個zimage,其中image為核心映像檔案,而zimage為核心的一種映像壓縮檔案,image大約為4m,而zimage不到2m。那麼uimage又是什麼的?它是uboot專用的映像檔案,它是在zimage之前加上乙個長度為64位元組的...

Image uImage與zImage的區別

1 核心編譯 make 之後會生成兩個檔案,乙個image,乙個zimage,其中image為核心映像檔案,而zimage為核心的一種映像壓縮檔案,image大約為4m,而zimage不到2m。那麼uimage又是什麼的?它是uboot專用的映像檔案,它是在zimage之前加上乙個長度為64位元組的...

Zim 桌面維基編輯器 20210314

它是維基文件的圖形編輯器,以圖形的方式直接編寫維基文件。簡單地看,它就是款筆記軟體,但是功能及其強大。官方站點 zim a desktop wiki 使用技巧 jaap karssenberg zim wiki 12 17 2018 今天到 github 上看了一下,它的 master 分支已經是 ...