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