最近在搞U盘多系统,从网上下了些发行版的inux ISO文件
发现这里面很多东西可以现,本着折腾的心态开始不停地百度
下面先来关于vmlinux和vmlinuz的一些介绍:
vmlinuz是可引导的、压缩的内核,“vm”代表 “Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接。
vmlinuz的建立有两种方式:
bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思。
两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K), bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。
initrd是“initial ramdisk”的简写(初始RAM磁盘系统,临时的根分区)。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。
比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导 问题。
initrd.gz后缀.gz表明它是一个gunzip文件,即表示它是一个压缩文件。在刚启动的时候,真正的文件系统(根分区)还不可用之前,在RAM中模拟一个根分区。这个根文件系统中包含了实现启动所必要程序。如将内核模块加载到内核中的工具“insmod”。
它的生存周期很短,当根分区被加载时它就彻底没用了。
如果没有所谓的磁盘上的根分区,可以把需要用到的程序和必要的程序压缩在initrd文件,直接通过加载initrd.gz文件,就可以实现一个在RAM中运行的系统了。
又如,光盘上运行的Linux操作系统,也是通过把操作系统打包到Initrd.gz中,然后直接放到内存,模拟的根分区运行。这样,即使你没有安装linux,照样可以通过光驱来体验一把,而不会对现有磁盘系统造成任何改变。
为什么要initrd.img?
系统内核vmlinuz被加载到内存后开始提供底层支持,在内核的支持下各种模块,服务等被加载运行。这样当然是大家最容易接受的方式,曾经的linux就是这样的运行的。
假设你的硬盘是scsi 接口而你的内核又不支持这种接口时,你的内核就没有办法访问硬盘,当然也没法加载硬盘上的文件系统,怎么办?把内核加入scsi驱动源码然后重新编译出一个新的内核文件替换原来vmlinuz。
需要改变标准内核默认提供支持的例子还有很多,如果每次都需要编译内核就太麻烦了。所以后来的linux就提供了一个灵活的方法来解决这些问题---initrd.img。
initrd.img文件就是个ram disk的映像文件。ramdisk是用一部分内存模拟成磁盘,让操作系统访问。ram disk是标准内核文件认识的设备(/dev/ram0)文件系统也是标准内核认识的文件系统。内核加载这个ram disk作为根文件系统并开始执行其中的"某个文件"(2.6内核是 init文件)来加载各种模块,服务等。经过一些配置和运行后,就可以去物理磁盘加载真正的root分区了,然后又是一些配置等,最后启动成功。也就是你只需要定制适合自己的 initrd.img 文件就可以了。这要比重编内核简单多了,省时省事低风险。