2024年1月30日发(作者:)
linux内核initrd文件自定义方法
重新编译内核后,可能加入了自定义的模块,就有可能需要修改init文件,而init文件就在initrd中,这里记录下操作步骤,以防遗忘。
1. cp /boot/ /tmp/mylinux/
这里之所以进行改名,是因为是经过gzip压缩过的,所以需要对其解压,但是gzip对解压的文件的文件后缀名又有要求,所以就先进行改名。
2. gunzip
3. cpio -id <
经过以上三步,就在当前目录下解压了initrd文件,从而得到了init文件。
根据自己的需求修改init文件后,通过下面命令重新生成initrd文件。
4. find . | cpio -H newc -o | gzip -9 > /boot/
注意一下内容摘自网上资料,留作参考:
en_init_cpio
获取 gen_init_cpio,工具 ,gen_init_cpio是编译内核时得到的,
在内核源代码的 usr 目录下,我们可以通过 以下步骤获取它,进入内核源代码 执行 :
# make menuconfig
# make usr/
这样即编译好gen_init_cpio,
gen_initramfs_ 在内核源代码的 script 目录下,
将这两个 文件 copy 到 /tmp 目录下,/tmp/initrd 为 解压好的
initrd 目录,执行以下命令 制作initrd :
#制作initrd :
# gen_initramfs_ initrd/ > filelist
# gen_init_cpio filelist >
# gzip
# mv initrd-'uname –r’.img
只有用这个方式压缩的initrd ,在Linux系统重启的时候才能 一正确的文件格式 boot 起来,也可以用
这种方式修改安装光盘的initrd文件 然后 进行系统安装。
3. 如何在 initrd 中添加新的驱动,以 为例
3.1 gen_init_cpio
# cp initrd-‘uname –r‘.img /tmp/initrd;cd /tmp/initrd
#cpio –ivdum < initrd-‘uname –r’.img;
# mv initrd-‘uname –r’.img ../
#cd /tmp/initrd
#vim init加上一行 insmod /lib/
#cp lib/
#cd /tmp
# gen_initramfs_ initrd/ > filelist
# gen_init_cpio filelist >
# gzip
# mv initrd-‘uname –r’.img
至此,新的initrd文件initrd-‘uname –r’.img中就包含了ahci的驱动程序了 ,这种方式是最简单有效的。
3.2 mkinitrd
(1)
(2)
Add
copy
“alias
scsi_hostadapter
to
ahci” at
/etc/
“/lib/module/$(kernel-version)”/kernel/drivers/scsi”
(3) mkinitrd ‘uname -r’
至此,新的initrd文件initrd-‘uname –r’.img中就包含了ahci的驱动程序了 .
#释放cpio格式的initrd:
mv
gunzip
cpio -i --make-directories <
#释放centos6.2系统的
1."gunzip ",得到一个未压缩的-2.6.27-7-generic
2. ”cpio -iv < -2.6.27-7-generic",提取成功
#制作cpio格式的initrd(新2012年使用过的)
#cd /root/busybox-1.15.3/rootfs9260
#find . | cpio -H newc -o > ../initrd_
#制作cpio格式的initrd(2009年制作的LFS的方式):
dd if=/dev/zero of=/tmp/rootfs bs=1k count=35000
losetup /dev/loop0 /tmp/rootfs
2 –F –i 2000 /tmp/rootfs
mkdir /tmp/loop
mount –o loop /tmp/rootfs /tmp/loop
#然后将刚才建立的基本系统拷贝到/tmp/loop
cp /lfs/* /tmp/loop –arfp
find . | cpio –o –H newc | gzip –c > /tmp/


发布评论