本文主要是介绍initrd和initramfs 解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这个两个都是在内核启动之后的boot加载的临时文件系统,一般制作的内核很多的驱动并没有编译进去,如:硬盘相关驱动等,
由于rootfs存储在硬盘中,没有这些驱动,则无法加载真正的rootfs(rootfs有驱动程序)。真正的rootfs自然包含所有的驱动。
所以为了解决先有鸡,还是先有蛋的问题。引入initrd或是initramfs机制。
一如何制作initrd,
ubuntu/debian: mkinitramfs moduleslib(make modules_install 之后的生成的目录,一般问版本号) -o myinitrd.img
fedora/radhet: mkinitrd moduleslib(make modules_install 之后的生成的目录,一般问版本号) -o myinitrd.img
例:
my@ubuntu3:~$ ls /lib/modules
3.13.0-24-generic
my@ubuntu3:~$ mkinitramfs 3.13.0-24-generic -o myinitrd.img
my@ubuntu3: ls
myinitrd.img ....
二如何查看当前系统的initrd的内容
在当前的系统中有:/boot/initrd.img-***generic
在可以通过 file /boot/initrd.img-***generic
mkdir -p ~/test
cp /boot/initrd.img-***generic ~/test/initrd.gz (把文件后缀给为.gz。因为initrd本质是一个gzip压缩包)
cd ~/test
gzip -d initrd.gz (解压)
cpio -i < initrd (还原)
ls
bin conf etc init lib sbin scripts usr
其中init是一个脚本,在加载initrd之后,找到这个init的脚本,首先然后执行它。
你也可以修改initrd里面的文件然后再,制作一个initrd。方法如下:通过下面命令
find . | cpio --quiet -H newc -o | gzip -9 -n > /boot/imagefile.img
参考文献:
http://linux.koolsolutions.com/2009/11/12/initramfs-ramfs-tmpfs-compressed-image/
这篇关于initrd和initramfs 解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!