Saturday, July 18, 2009

vmlinux与bzImage

在编译kernel时, 看了下make help, 发现点不明白的地方:

在产生kernel时, 有两种方式:

一种:
Other generic targets:
* vmlinux         - Build the bare kernel

两种:
Architecture specific targets (x86):
* bzImage      - Compressed kernel image (arch/x86/boot/bzImage)

当make vmlinux时, 会在$SRC目录下产生一个vmlinux文件
当make bzImage时, 会在$SRC/arch/x86/boot目录下产生一个bzImage文件
* 因为本人的机器是x86架构的.

两个文件的大小不同:
jessinio@niolaptop /usr/src/linux $ du -h arch/x86/boot/bzImage
3.9M    arch/x86/boot/bzImage
jessinio@niolaptop /usr/src/linux $ du -h vmlinux
11M     vmlinux

实际上, bzImage是一个被压缩过的kernel(可以运行自解), 在一些资料到提以前的kernel大小是有限制的. 所以需要压缩.
 * wikipedia的信息: http://en.wikipedia.org/wiki/Vmlinux

在make install发生的事

在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


No comments:

Post a Comment

Note: Only a member of this blog may post a comment.