http://www.360doc.com/content/10/1228/08/496343_81916311.shtmlhtml
從下面的內核編譯過程,能夠看出vmlinux, arch/arm/boot/compressed/vmlinux, arch/arm/boot/Image, arch/arm/boot/zImage 之間的區別
LD vmlinux
SYSMAP System.map
SYSMAP .tmp_System.map
OBJCOPY arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
AS arch/arm/boot/compressed/head.o
GZIP arch/arm/boot/compressed/piggy.gz
AS arch/arm/boot/compressed/piggy.o
CC arch/arm/boot/compressed/misc.o
AS arch/arm/boot/compressed/head-xscale.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImagelinux
vmlinux 是一個elf格式的文件
Image 是通過objcopy 處理了的只包含內核代碼,數據的一個文件, 已經不是elf格式的了。此時尚未通過壓縮
arch/arm/boot/compressed/vmlinux 是通過壓縮的Image和加入瞭解壓頭的elf格式的文件
arch/arm/boot/zImage 是通過objcopy處理了的能夠直接下到對應的地址執行的內核鏡像服務器
objcopy:網絡
GNU 實用工具程序objcopy的做用是拷貝一個目標文件的內容到另外一個目標文件中。Objcopy使用GNUBFD庫去讀或寫目標文件。Objcopy能夠 使用不一樣於源目標文件的格式來寫目的目標文件(也便是說能夠將一種格式的目標文件轉換成另外一種格式的目標文件)。經過以上命令行選項能夠控制 Objcopy的具體操做。ide
Objcopy在進行目標文件的轉換時,將生成一個臨時 文件,轉換完成後就將這個臨時文件刪掉。Objcopy使用BFD作轉換工做。若是沒有明確地格式要求,則Objcopy將訪問全部在BFD庫中已經描述 了的而且它能夠識別的格式,請參見《GNUpro Decelopment Tools》中「using ld」一章中「BFD庫」部分和「BFD庫中規範的目標文件格式」部分。工具
經過使用srec做爲輸出目標(使用命令行選項-o srec),Objcopy能夠產生S記錄格式文件。post
通 過使用binary做爲輸出目標(使用命令行選項-obinary),Objcopy能夠產生原始的二進制文件。使用Objcopy產生一個原始的二進制 文件,實質上是進行了一回輸入目標文件內容的內存轉儲。全部的符號和重定位信息都將被丟棄。內存轉儲起始於輸入目標文件中那些將要拷貝到輸出目標文件去的 部分的最小虛地址處。性能
使用Objcopy生成S記錄格式文件或者原始的二進制文件的過程當中,-S選項和-R選項可能會比較有用。-S選項是用來刪掉包含調試信息的部分,-R選項是用來刪掉包含了二進制文件不須要的內容的那些部分。ui
vmlinux,vmlinuz,uImage,zImage,bzImage之間的異同 spa
此外,平時調試用uImage,不用去管調整了哪些東西;zImage則是一切OK後直接燒0X0。開機就運行。
在make install後, 會有三個文件被放到/boot下:
1. vmlinuz-2.6.x.y.z
2. System.map
3. config
4. 爲何個人gentoo沒有initrd.img的??
在/usr/src/linux下還有一個vmlinux的方件.
那麼/boot下的vmlinux是哪一個呢? 以下:
jessinio@niolaptop /usr/src/linux $ diff /usr/src/linux/arch/x86/boot/bzImage /usr/src/linux/vmlinux
Files /usr/src/linux/arch/x86/boot/bzImage and /usr/src/linux/vmlinux differ
jessinio@niolaptop /usr/src/linux $ diff /usr/src/linux/arch/x86/boot/bzImage /boot/vmlinuz
能夠看出/boot下的vmlinux是/usr/src/linux/arch/x86/boot/bzImage
隨便提一下make內核時的過程:
就常使用的make也過程:
cd /usr/src/linux
make menuconfig
make
make modules_install
make install
注意到上面的一個make是不參數的, 這種狀況實際以下:
Execute "make" or "make all" to build all targets marked with [*]
帶"*"號等於以下:
make vlinux modules bzImage
SRC_TREE :=./
HEADER_PATH :=arch/arm/boot/compressed
BOOT_PATH :=arch/arm/boot/
KERNEL_PATH :=arch/arm/kernel
-----------------------------------------------------------------------------------------------------------------------
1 SRC_TREE 目錄下的vmlinux通過objcoy後生成二進制文件Image,Image在通過gzip壓縮後生成piggy.o
piggy.o是真正的內核鏡像文件
2 HEADER_PATH/head.o ,head-xscal.o ,misc.o 的做用就是把piggy.o解壓到指定的位置,而後執行piggy.o解壓後的代碼
HEADER_PATH/zImage
^
|[objcopy]
|
HEADER_PATH/vmlinux
^
|[ld]
|
+-<--HEADER_PATH/head.o
|
+-<--HEADER_PATH/head-xscal.o
|
+-<--HEADER_PATH/misc.o
|
+-<--HEADER_PATH/piggy.o <-- HEADER_PATH/piggy.gz <--[gzip]-- BOOT_PATH/Image <--[objcopy]--SRC_TREE/vmlinux
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
SRC_TREE目錄下的vmlinux是由一下三部分組成的:
$(vmlinux-init)
$(vmlinux-main)
kallsyms.o
vmlinux ^ | +-<--$(vmlinux-init) | ^ | | | +--<--KERNEL_PATH/head.S | | | +--<--KERNEL_PATH/init_task.o | | | +--<--SRC_TREE/init/build-in.o | +--< $(vmlinux-main) | ^ | |$(cory-y) | +--<--SRC_TREE/driver/built-in.o | | | +--<--SRC_TREE/mm/built-in.o | | | +--<--SRC_TREE/usr/built-in.o | | | +--<--SRC_TREE/kernel/built-in.o | | | +--<--SRC_TREE/mm/built-in.o | | | +--<--SRC_TREE/fs/built-in.o | | | +--<--SRC_TREE/ipc/built-in.o | | | +--<--SRC_TREE/securiy/built-in.o | | | +--<--SRC_TREE/crypto/built-in.o | | | +--<--SRC_TREE/block/built-in.o | | | +--<--arch/arm/kernel/built-in.o | | | +--<--arch/arm/mm/built-in.o | | | +--<--arch/arm/common/built-in.o | | | +--<--arch/arm/mach-pxa/built-in.o | | | +--<--arch/arm/nwfpe/buit-in.o | | | |$(lib-y) | +--<--SRC_TREE/lib/built-in.o | | | +--<--arch/arm/lib/built-in.o | | | |$(drivers-y) | +--<--SRC_TREE/drivers/buit-in.o | | | +--<--SRC_TREE/sound/buit-in.o | | | |$(net-y) | +--<--SRC_TREE/net/buit-in.o | +--< kallsyms.o