initrd.img、System.map学习札记

       initrd是“initial RAM disk”的简写,是一个启动时加载进内存的小型系统,initrd在内核2.5之前和2.5之后有些不一样,2.5之后的采用cpio格式,一般称为cpio-initrd,本文以2.5以后的版本为例,initrd并不是必须的,如果不想要initrd,就在编译内核时必须把所有模块都静态编译进内核中,这样内核会变得很大,更会引入一些不必要的模块,启动加载会很慢,如果不想内核变得十分臃肿,就要减少打入的模块,这就需要initrd发威了,initrd把内核的启动分成两个阶段,boot loader把内核和initrd加载到内存中,内核在加载真正的文件系统前会先访问内存中的initrd,然后把initrd中的内容释放到rootfs中,initrd解压后里面的目录就像一个小型系统,然后会执行initrd中的init脚本,init脚本主要是加载一些驱动模块,initrd执行完成后开始挂载真正的文件系统,这样系统就成功的启动了。

   怎样解开initrd.img,一般常用以下方法:

   1 采用zcat

initrd.img、System.map学习札记_第1张图片

  2 采用gunzip

initrd.img、System.map学习札记_第2张图片

  以上方法即可解开initrd.img文件

 解开后怎样打包initrd.img文件呢 ,采用以下办法:

  initrd.img、System.map学习札记_第3张图片

  这样把解开的initrd.img又打包回去了。

  生成一个当前系统的initrd.img文件,在centos下有个工具叫mkinitrd,在debian下此工具改名为mkinitramfs

  不同的内核默认的initrd.img里面的内容以及次级目录结构都有变化,但主要的一级目录没什么变化。

  System.map就像一个索引文件,他是内核内部文件的索引,可以让外部程序知道内核内部文件的位置。System.map索引的是内核中的变量和函数名称,这样可以方便程序员在写程序时可以直接参照这一份Symbol的索引文件,找到所需要的kernel信息,目前较常使用到的内核索引文件有两个,即/proc/kallsyms和system.map,System.map是静态的,在内核编译好安装后就一直没有变化了,每次重新编译内核安装后此文件都会改变,而/proc/kallsyms是动态变化的,随着模块的变化里面的内容是会实时变动的

  vmlinuz是可引导的、压缩的内核。“vm”代表 “Virtual Memory”。Linux 支持虚拟内存。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接,内核编译时通过命令make bzImage创建,然后通过:cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz产生。bzImage是压缩的内核映像,需要注意,bzImage是用gzip压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思

你可能感兴趣的:(initrd.img、System.map学习札记)