linux核心映象格式

2022-04-01 16:17:53 字數 2856 閱讀 1962

一、linux核心映象格式  

linux核心有多種格式的映象,包括vmlinux、image、zimage、bzimage、uimage、xipimage、bootpimage等.

(1)kernel映象格式:vmlinux

vmlinuz是可引導的、可壓縮的核心映象,vm代表virtual memory.linux支援虛擬記憶體,因此得名vm.它是由使用者對核心原始碼編譯得到,實質是elf格式的檔案.也就是說,vmlinux是編譯出來的最原始的核心檔案,未壓縮.這種格式的映象檔案多存放在pc機上.

【 attention】elf格式檔案

elf,executable and linkable

format,可執行可鏈結格式,是unix實驗室作為應用程式二進位制介面而發布的,擴充套件名為elf.可以簡單的認為,在elf格式的檔案中,除二進位制代

碼外,還包括該可執行檔案的某些資訊,比如符號表等.

(2)kernel映象格式:image

image是經過objcopy處理的只包含二進位制資料的核心**,它已經不是elf格式了,但這種格式的核心映象還沒有經過壓縮.

【 attention】objcopy

gnu使用工具程式objcopy作用是拷貝乙個目標檔案的內容到另乙個目標檔案中,也就是說,可以將一種格式的目標檔案轉換成另一種格式的目標檔案.

通過使用binary作為輸出目標(-o

binary),可產生乙個原始的二進位制檔案,實質上是將所有的符號和重定位資訊都將被拋棄,只剩下二進位制資料.

(3)kernel映象格式:zimage

zimage是arm linux常用的一種壓縮映象檔案,它是由vmlinux加上解壓**經gzip壓縮而成,命令格式是#make zimage.這種格式的linux映象檔案多存放在nand上.

(4)kernel映象格式:bzimage

bz表示big zimage,其格式與zimage類似,但採用了不同的壓縮演算法,注意,bzimage的壓縮率更高.

(5)kernel映象格式:uimage

uimage是uboot專用的映象檔案,它是在zimage之前加上乙個長度為0x40的頭資訊(tag),在頭資訊內說明了該映象檔案的型別、載入

位置、生成時間、大小等資訊.換句話說,若直接從uimage的0x40位置開始執行,則zimage和uimage沒有任何區別.命令格式是#make

uimage.這種格式的linux映象檔案多存放在nand上.

(6)kernel映象格式:xipimage

這種格式的linux映象檔案多存放在norflash上,且執行時不需要拷貝到記憶體sdram中,可以直接在norflash中執行.

二、linux核心映象的產生過程

在嵌入式linux中,核心的啟動過程分為兩個階段.其中,第一階段啟動**放在arch/arm/kernel/head.s檔案中,該檔案與體系

結果相關,與使用者的開發板無關,主要是初始化arm核心等.第二階段啟動**是init目錄下的main.c.現以執行命令#make

zimage為例來說明,arm-linux核心映象的產生過程.

(2)映象檔案vmlinux由於很大,肯定不能直接燒入nand中,因此需要進行二進位製化,即經過objcopy處理,使之只包含二進位制資料的核心代

碼,去除不需要的檔案資訊等,這樣就製作成了image映象檔案.該映象檔案也是未壓縮,只是經過了二進位製化而變小.試驗時該檔案約5m.

(3)

一般來說,記憶體sdram中的核心映象是經過壓縮的,只是在執行時再將其解壓.所以,編譯時會先使用gzip將映象檔案image進行壓縮(壓縮比約為

2:1),再將壓縮後的映象檔案和原始碼中的兩個檔案arch/arm/boot/compressed/head.s、arch/arm/boot

/compressed/misc.c一起鏈結生成壓縮後的映象檔案compress/vmlinux.試驗時該檔案約為2.5m.注意,這兩個原始碼檔案

是解壓程式,用於將記憶體sdram中的壓縮映象zimage進行解壓.

(4)壓縮後的映象檔案compress/vmlinux經過二進位製化,最終生成映象檔案zimage,試驗時該檔案約為2.5m.當然,在記憶體

sdram中執行壓縮映象檔案zimage時,會首先呼叫兩個解壓程式arch/arm

/boot/compressed/head.s、arch/arm/boot/compressed/misc.c將自身解壓,然後再執行kernel

的第一階段啟動**arch/arm/kernel/head.s.簡而言之,在記憶體中執行核心時,kernel先自身解壓,再執行第一階段啟動**.試

驗時執行在記憶體中的映象檔案約為5m,與image映象檔案大小相同.

【 attention】

(1) **:

(2)生成的映象檔案vmlinux放在原始碼的頂層目錄下.

(3)生成的映象檔案image、zimage均在arch/arm/boot目錄下.

(4)啟動開發板時,在超級終端內會有許多的提示資訊,其中:

booting linux ...  /*表示正在將核心從nand拷貝到記憶體中*/

unpressed...      /*表示正在解壓核心*/

(5)只有當使用者輸入boot命令或在boot_delay延時時間後,vivi才將nandflash中的核心kernel拷貝到記憶體sdram中.也就是說,當vivi進入命令列模式時,在sdram中並沒有核心kernel.

(6)在kernel原始碼目錄下執行命令:

<1> #tree       /*列印出kernel原始碼的目錄結構*/

<2> #tree -l 1   /*列印出kernel原始碼的第一級目錄結構*/

<3> #tree > /home/lishuai/linux.txt   /*將kernel原始碼的目錄結構重定向到某個檔案中,使用者可以隨時檢視其目錄結構,非常方便*/

linux核心映象格式

一 linux核心映象格式 linux核心有多種格式的映象,包括vmlinux image zimage bzimage uimage xipimage bootpimage等.1 kernel映象格式 vmlinux vmlinuz是可引導的 可壓縮的核心映象,vm代表virtual memory...

Linux核心映象

核心映象有許多種,但是基本都是基於vmlinux壓縮加頭得到,目的是為了讓核心映象盡可能的小,在嵌入式中儲存介質的空間比較小,也比較緊張,這些壓縮映象是為了去適應嵌入式而產生的 核心編譯 make 之後 會生成兩個檔案,乙個image,乙個zimage 其中image為核心映像檔案,而zimage為...

linux核心模組call trace格式解析

今天測試編寫的核心模組進行檔案讀寫,結果失敗。通過dmesg檢視核心輸出,結果如下 37725.645804 i am here and the user buf size is 1024 37725.645812 the last data record position 4096 current...