最后编辑于: 2013-07-11 14:42 | 分类: linux | 标签: | 浏览数: 908 | 评论数: 0
Original address:http://www.chenjunlu.com/2010/11/understanding-of-vmlinuz-initrd-and-system-map/
vmlinuz是可引导的、压缩的内核。
“vm”代表“Virtual Memory”。Linux支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。
Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。
vmlinuz是可执行的Linux内核,它一般位于/boot/vmlinuz
,它一般是一个软链接。
vmlinuz的建立有两种方式:
make zImage
创建,然后通过如下命令产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。# cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz
make bzImage
创建,然后通过如下命令产生。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip
压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip或gzip -dc解包vmlinuz。# cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz
内核文件中包含一个微型的gzip用于解压缩内核并引导它。
两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。
如果内核比较小,那么可以采用 zImage或bzImage 之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用 zImage。
vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。
initrd是initial ramdisk
的简写。
initrd一般被用来临时的引导硬件 到 实际内核vmlinuz能够接管 并 继续引导的状态。
一般initrd主要是用于加载ext3等文件系统及SCSI设备的驱动。
比如,使用的是SCSI硬盘,而内核vmlinuz中并没有这个SCSI硬件的驱动,那么在装入SCSI模块之前,内核不能加载根文件系统,但 SCSI模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正 SCSI引导问题。
initrd映象文件是使用mkinitrd
创建的。mkinitrd 实用程序能够创建 initrd 映象文件。
这个命令是RedHat专有的。其它Linux发行版或许有相应的命令。这是个很方便的实用程序。具体帮助请使用man mkinitrd
命令来查看。