Linux inird及制作
墨初 知识笔记 28阅读
LINUX内核简介从2.6版开始,强烈推荐CPIO-INITRD。目前,所有主流LINUX发行版的INITRD都是CPIO格式的。如何制作CPIO-INITRD?首先,假设我们用BUSYBOX或者KLIBC或者别的什么做了根文件系统,它位于~/rootfs。根据IBM DEVELOPERWORKS中的文章,可以使用以下命令来制作CPIO-INITRD:cd ~/rootsfind。cpio-c-o./initrd.imgzip./initrd.img其实这是不对的。我使用这些命令来创建cpio-initrd。结果都是内核慌。参考我用的ARCHLINUX发行版的mkinitcpio命令的脚本代码,我应该是用gen_init_cpio命令做CPIO-INITRD。
n: 0; padding: 0">gen_init_cpio命令源码通常与LINUX内核源码一块儿打包,位于内核源码目录的usr/下面.编译其源码得到gen_init_cpio可执行文件,这还不够.
gen_init_cpio的参数是一个文本文件,这个文件的内容类似于这种格式:
dir /sbin 755 0 0
slink /sbin/makedevs ../bin/busybox 777 0 0
slink /sbin/modprobe ../bin/busybox 777 0 0
slink /sbin/switch_root ../bin/busybox 777 0 0
slink /sbin/sysctl ../bin/busybox 777 0 0
slink /sbin/lsmod ../bin/busybox 777 0 0
slink /sbin/getty ../bin/busybox 777 0 0
slink /sbin/ifconfig ../bin/busybox 777 0 0
......
很明显,这是个文件列表.
手工制作这个文件列表是不现实的,usr/目录下还有个gen_initramfs_list.sh,这个脚本就是用来自动生成文件列表的.
好了,下面咱们就可以得出生成CPIO-INITRD的完整步骤了:
cd ~
gen_initramfs_list.sh rootfs/ >
gen_init_cpio > rootfs.cpio
gzip rootfs.cpio
最后得到的这个rootfs.cpio.gz,就是咱们要的CPIO-INITRD了.
在BOOTLOADER里修改一下参数:
append initrd=rootfs.cpio.gz ramdisk_size=8192 vga=792
结果怎么样?
(全文完)
======================================

2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式。
1、解压initrd***.img:
#cp /boot/initrd-***.img initrd.img.gz
#gunzip initrd.img.gz
#mkdir initrd
#mv initrd.img initrd
#cd initrd
#cpio -ivmd < initrd.img
#cp /boot/initrd-***.img initrd.img.gz
#gunzip initrd.img.gz
#mkdir initrd
#mv initrd.img initrd
#cd initrd
#cpio -ivmd < initrd.img
2、修改initrd
对解压后的initrd文件系统进行相关修改。
对解压后的initrd文件系统进行相关修改。
3、生成新的initrd
#find . | cpio -o -H newc | gzip > /mnt/sda1/boot/initrd.img-2.6.18-4-686
#find . | cpio -o -H newc | gzip > /mnt/sda1/boot/initrd.img-2.6.18-4-686
(注:-H newc 是必须的,否则内核会认为是ramdisk,而不是initramfs)

Linux 初始 RAM 磁盘(initrd)概述
Linux2.6 内核的 Initrd 机制解析
标签: