zImage和UImage的區別

2021-09-02 15:54:54 字數 2790 閱讀 3027

(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的生成也需要設定。

u-boot具體解釋:www.2cto.com

universal boot loader。普遍的引導程式

是非常常用的乙個引導程式,可作為主流系統的引導程式,如openbsd, netbsd, freebsd,4.4bsd, linux, svr4, esix, solaris等等,

當然同時也支援多種常見的cpu處理器,如mips、 x86、arm、nios、xscale等

uImage和zImage的區別

zimage是arm linux常用的一種壓縮映像檔案,uimage是u boot專用的映像檔案,它是在zimage之前加上乙個長度為0x40的 頭 說明這個映像檔案的型別 載入位置 生成時間 大小等資訊。換句話說,如果直接從uimage的0x40位置開始執行,zimage和uimage沒有任何區別...

zImage和uImage的區別

一 vmlinuz vmlinuz是可引導的 壓縮的核心。vm 代表 virtual memory linux 支援虛擬記憶體,不像老的作業系統比如dos有640kb記憶體的限制。linux能夠使用硬碟空間作為虛擬記憶體,因此得名 vm vmlinuz的建立有兩種方式。一是編譯核心時通過 make ...

zImage和uImage的區別聯絡

注 本文是學習朱老師課程整理的筆記,基於linux2.6.35.7和九鼎x210bv3s開發板進行移植。linux核心經過編譯後會生成乙個elf格式的可執行程式,叫vmlinux或vmlinuz,這個就是原始的未經任何處理加工的原版核心elf檔案 嵌入式系統部署時刻錄的一般不是這個vmlinuz v...