Chinaunix首页 | 论坛 | 博客
  • 博客访问: 424466
  • 博文数量: 205
  • 博客积分: 5630
  • 博客等级: 大校
  • 技术积分: 1945
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-06 20:28
文章分类

全部博文(205)

文章存档

2016年(1)

2015年(6)

2014年(9)

2013年(10)

2012年(53)

2011年(25)

2010年(87)

2009年(14)

分类:

2010-01-25 14:16:35

 http://www.ibm.com/developerworks/cn/linux/l-k26initrd/index.html

 

LINUX内核自从2.6版以后,就大力推荐CPIO-INITRD.

 

现在各大LINUX发行版的INITRD都是CPIO格式的.

这次主要说下如何制作CPIO-INITRD.
首先假设咱们已经用BUSYBOX或KLIBC或别的什么做好了根文件系统,位于~/rootfs下.
按照IBM DEVELOPERWORKS里的文章说,可以用以下命令制作CPIO-INITRD:
cd ~/rootfs
find . | cpio -c -o > ../initrd.img
gzip ../initrd.img
其实这是不对的.
我用这几条命令制作CPIO-INITRD,结果都是KERNEL PANIC.
参照我用的ARCHLINUX发行版的mkinitcpio命令的脚本代码,应该是用gen_init_cpio命令来制作CPIO-INITRD.
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/ > filelist
gen_init_cpio filelist > rootfs.cpio
gzip rootfs.cpio
最后得到的这个rootfs.cpio.gz,就是咱们要的CPIO-INITRD了.
在BOOTLOADER里修改一下参数:
append initrd=rootfs.cpio.gz ramdisk_size=8192 vga=792
结果怎么样?
(全文完)
参考链接:
Linux2.6 内核的 Initrd 机制解析
阅读(1359) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~