全部博文(2065)
分类: LINUX
2010-10-01 10:45:00
linux里面vmlinux
时间:2010-10-1
1、 相关资料介绍
ELF文件是X86_linux系统下的一种常用目标文件(Object file)主要有三种类型:
1.1 适于连接的可重定位文件(relocatable file),可与其它目标文件一起创建可执行文件和共享目标文件。
1.2 适于执行的可执行文件(executable file),用于提供程序的进程映像,加载的内存执行。
1.3 共享目标文件(shared object file),连接器可将它与其它可重定位文件和共享目标文件连接成其它的目标文件,动态连接器又可将它与可执行文件和其它共享目标文件结合起来创建一个进程映像。
Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。
initrd-x.x.x.img
initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读 实际内核的initrd内核并用initrd修正scsi引导问题。initrd-2.4.7-10.img是用gzip压缩的文件,下面来看一看这个文件的内容。initrd实现加载一些模块和安装文件系统等。
2、 介绍下vmlinux
vmlinux 是一个elf格式的文件
Image 是经过objcopy 处理了的只包含内核代码,数据的一个文件, 已经不是elf格式的了。此时还没有经过压缩
arch/arm/boot/compressed/vmlinux 是经过压缩的Image和加入了解压头的elf格式的文件
arch/arm/boot/zImage 是经过objcopy处理了的可以直接下到对应的地址执行的内核镜像
维基定义:在linux系统中,vmlinux(vmlinuz)是一个包含linux kernel的静态连结的可执行文件,文件型态可能是linux接受的可执行文件格式之一(、或),vmlinux若要用于除错时则必须要在开机前增加symbol table。
压缩
一般来说,当创建一个可启动的核心时,此核心会先经过 zlib 算法压缩,而在核心内会包含一个相当小的解压缩程序 stub,当 stub 解压缩核心程序的时候会对 console 视窗印出"点"来表示解压缩进度。解压缩所花费的时间在开机时间中所占程度来说其实是相当小的,而在早期的 bzImage 的发展中对于核心的大小会有所限制(特别是 i386 架构),在此情况下压缩则是必须的。开机镜像文件的名称并不重要,通常习惯上称为 vmlinuz 或 zImage。(对内核进行一次压缩要不然内核会过于庞大)
3、 IT人对此的理解
vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行 的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接。
vmlinuz的建立有两种方式。
一是编译内核时通过“make zImage”创建,然后通过:
“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。
二是内核编译时通过命令make bzImage创建,然后通过:
“cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思。
zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。
PS:内核很大所以需要经过一次压缩处理,而且这个文件里面就包含了解压缩程序的所以能够自动去解压缩处理了。
vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。