转载:http://blog.sina.com.cn/s/blog_80fd855d0100yt9z.html
一、initramfs 介绍
他在一个叫ramfs的cache实现上加了一层很薄的封装,其他内核开发人员编写了一个改进版tmpfs,这个文件系统上的数据可以写出到交换分区,而且可以设定一个tmpfs装载点的最大尺寸以免耗尽内存。initramfs就是tmpfs的一个应用。
优点:
生成initramfs镜像命令
若镜像根目录为/initrd,执行下面命令在当前用户主文件夹中生成myinitramfs.gz镜像。cd /initrd
find .|cpio -o -H newc|gzip>~/myinitramfs.gz
生成的镜像文件是gzip压缩过的。
二、制作用于initramfs的文件系统
1.制作根文件目录
root@li-ace:/home/li/busybox-1.17.2# cd /home/li
root@li-ace:/home/li# mkdir initramfs
root@li-ace:/home/li# cd initramfs/
用shell脚本创建根文件系统的目录结构,并在想要建立根文件系统的地方运行此脚本。我是用root用户登陆的,直接创建了设备节点。
#!/bin/sh
#Copy bin sbin usr etc from /nfs/rootfs
#Copy libs from /nfs/rootfs/lib to lib/
#Don't use mknod, unless you run this Script as
2.添加init程序
在initramfs根目录下新建init文档,加入一下内容:
#!bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mdev -s
sleep 1
choose=0
ipaddr=192.168.1.230
serverip=192.168.1.101
echo "##############################################################"
echo "run initramfs
echo "mount rootfs on nfs
echo "\"0\" is default"
echo "##############################################################"
echo
read choose
case "$choose" in
"1")
*)
esac
exec switch_root /mnt /sbin/init
保存,并把权限设置为可执行的。
把制作好的initramfs文件系统复制到 /nfs 下
root@li-ace:/usr/src/linux-3.2.10# mv /home/li/initramfs /nfs
把nfs文件系统rootfs拷贝到 /nfs下
3.将initramfs编译进uImage,让它由内核启动后挂载。
PS:参考config_mini6410_n43 配置文件
root@li-ace:/usr/src/linux-3.2.10# make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-
root@li-ace:/usr/src/linux-3.2.10# make uImage ARCH=arm CROSS_COMPILE=arm-linux-
root@li-ace:/usr/src/linux-3.2.10# mv arch/arm/boot/uImage /tftp/initramfs.bin
三、下载启动initramfs内核
1.配置好环境变量
Uboot> setenv myboard AT91RM9200DK
Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
myboard=AT91RM9200DK
Environment size: 102/8188 bytes
2.下载启动
MINI6410 # tftp c0008000 initramfs.bin
MINI6410 # tftp c0008000 initramfs.bin
dm9000 i/o: 0x18000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:90:90:90:90:90
operating at 100M full duplex mode
TFTP from server 192.168.1.101; our IP address is 192.168.1.230
Filename 'initramfs.bin'.
Load address: 0xc0008000
MINI6410 # bootm c0008000
IP-Config: Complete:
dm9000 dm9000: eth0: link up, 100Mbps, full-duplex, lpa 0x4DE1
,
Freeing init memory: 4064K
##############################################################
run initramfs
mount rootfs on nfs
"0" is default
##############################################################
0
[InitRamFs@/]#ls
bin
dev
[InitRamFs@/]#
PS:.config的配置一定要准确,多钻研下怎么配置
一些问题参考:http://blog.chinaunix.net/uid-20543672-id-129729.html
http://www.360doc.com/content/10/1203/21/1378815_74790077.shtml