vmlinux,vmlinuz,bzimage,zimage,initrd.img的区别与联系

时间:2021-04-08 16:37:03

1.vmlinux

    vmlinux是未压缩的内核,vmlinux 是ELF文件,即编译出来的最原始的文件。用于kernel-debug,产生system.map符号表,不能用于直接加载,不可以作为启动内核。只是启动过程中的中间媒体。vmlinux.binThe same as vmlinux, but in a binary file format.

如何得到Vmlinux文件:

1)自己编译内核,生成Vmlinux文件

2)一些发行版的linux供应商会提供这个文件,不过这个文件往往不在CD中,而是有专门的网站提供:

比如:centos的vmlinux在这里:

http://debuginfo.centos.org/6/x86_64/

kernel-debug-debuginfo-2.6.32-358.el6.x86_64.rpm 

redhat的vmlinux文件在这里:

http://www.rpmfind.net/linux/rpm2html/search.php?query=kernel-debug(x86-64)

ftp://ftp.redhat.com/pub/redhat/linux/enterprise/

2.vmlinuz


      vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接。但是,它已经丢失了调试信息等,不可用于调试,这就是为什么perf和systemtap等内核级别的调试软件安装的时候,需要重新编译内核的原因。同理,解压缩vmlinuz是不能得到Vmlinux的。相对于vmlinux,它增加了解压缩和boot的部分


3.zimage


     zImage是vmlinuz经过gzip压缩后的文件,适用于小内核(512KB以内),加载到内存的开始640KB处。


4.bzimage(not bzizp but big)


      bzImage是vmlinuz经过gzip压缩后的文件,适用于大内核。为什么会发明bzimage这种内核镜像呢?随着linux内核的成熟,linux内核大小逐渐增大,超过了一些体系结构的限制,导致存储压缩内核的空间受到限制。bzimage这种格式就是为了克服这种限制,它通过把kernel分解到不相邻的内存区域来达到这一个目的。

bzimage包含以下目标文件 bootsect.o + setup.o + misc.o + piggy.o.

bootsect:这个程序是linuxkernel的第一个程序,包括了linux自己的bootstrap程序,主要进行开机后加载真正内核镜像之前的各种准备工作.注意它是用来load bzimage,不是bzimage的一部分(这句话存在质疑)。

setup:进行实模式设置

misc:

piggy.o 包含被压缩的vmlinux 

bzimage的解剖图:

vmlinux,vmlinuz,bzimage,zimage,initrd.img的区别与联系