侧边栏切换

理解vmlinuz和initrd

最后编辑于: 2013-07-11 14:42  |  分类: linux  |  标签:   |  浏览数: 908  |  评论数: 0


Original address:http://www.chenjunlu.com/2010/11/understanding-of-vmlinuz-initrd-and-system-map/

1. vmlinuz

vmlinuz是可引导的、压缩的内核。

vm”代表“Virtual Memory”。Linux支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。

Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。

vmlinuz是可执行的Linux内核,它一般位于/boot/vmlinuz,它一般是一个软链接

vmlinuz的建立有两种方式:

  1. 编译内核时通过make zImage创建,然后通过如下命令产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。
# cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz
  1. 内核编译时通过命令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的压缩文件

2. initrd-x.x.x.img

initrdinitial ramdisk的简写。

initrd一般被用来临时的引导硬件 到 实际内核vmlinuz能够接管 并 继续引导的状态

一般initrd主要是用于加载ext3等文件系统及SCSI设备的驱动

比如,使用的是SCSI硬盘,而内核vmlinuz中并没有这个SCSI硬件的驱动,那么在装入SCSI模块之前,内核不能加载根文件系统,但 SCSI模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正 SCSI引导问题。

initrd映象文件是使用mkinitrd创建的。mkinitrd 实用程序能够创建 initrd 映象文件。

这个命令是RedHat专有的。其它Linux发行版或许有相应的命令。这是个很方便的实用程序。具体帮助请使用man mkinitrd命令来查看。


上一篇: 一个不错的shell脚本教程

下一篇: 什么是操作系统自举