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执行完成后开始挂载真正的文件系统,这样系统就成功的启动了。 linux

   怎样解开initrd.img,通常经常使用如下方法: 程序员

   1 采用zcat centos

  2 采用gunzip 函数


  以上方法便可解开initrd.img文件 工具

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

  

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

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

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

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

  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”意思

相关文章
相关标签/搜索