initramfs文件系统——基于RAM的文件系统
initramfs在编译内核的同时被编译并与内核生成一个映像文件,可以压缩也可以不压缩,但是目前只支持cpio包格式。它是根文件系统制作和制作的一种非常简单的方法,由于initramfs使用cpio包格式,所以很容易将一个单一的文件、目录、node编译链接到系统中去,这样很简单的系统中使用起来很方便,不需要另外挂接文件系统。但是也有缺点,因为是基于RAM的文件系统,掉电后文件丢失.
制作如下:
由于制作initramfs文件系统启动时会在根文件系统中执行第一个init程序,它对uboot传过来的参数init=/linuxrc不予理睬,所以需要在上面制作的根文件系统里的根目录加入init程序,否则无法启动。init指向busybox,在这里可以看出busybox的强大.
[luminqi@localhost rootfs]$ ln -s bin/busybox init
##创建busybox的软链接,相当于快捷方式
[luminqi@localhost linux-3.0]$ vt100
##完整命令为export TERM=vt100,可以自己在环境变量中设置别名,这里表示环境变量TERM设置为终端机,防止出现乱码!
[luminqi@localhost linux-3.0]$ make menuconfig
General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
(/opt/rootfs) Initramfs source file(s)
生成文件linuxrom-s3c2440.bin,用sz命令将它放到Windows下的tftp文件夹下,
改名为uImage_initramfs.bin
移植过程:
启动开发板,u-boot下的操作如下
[fl2440@lingyun]# set bkri 'tftp 30008000 uImage_initramfs.bin;nand erase 100000 f00000;nand write 30008000 100000 800000'
[fl2440@lingyun]# set bootcmd_initramfs 'nand read 30008000 100000 800000;bootm 30008000'
[fl2440@lingyun]# set bootargs_initramfs 'console=ttyS0,115200 mem=64M init=/linuxrc rw loglevel=7'
[fl2440@lingyun]# set bootargs 'console=ttyS0,115200 mem=64M init=/linuxrc rw loglevel=7'
[fl2440@lingyun]# set bootcmd 'run bootcmd_initramfs'
[fl2440@lingyun]# save
[fl2440@lingyun]# run bkri
[fl2440@lingyun]# boot
说明
1 run bkri即执行tftp 30008000 uImage_initramfs.bin;nand erase 100000 f00000;nand write 30008000 100000 800000这三个命令
2 boot(对应bootcmd)即执行run bootcmd_initramfs,而bootcmd_initramfs对应nand read 30008000 100000 800000;bootm 30008000
3 bootargs_initramfs可设置也可不设置,主要为了方便记下参数
4 最关键的是bootargs,bootcmd,还有记得要save(即保存到nandflash中).如果不保存,重启后设置就没了,又要重新设置.
启动过程省略,用户登录root,无密码
>: mount
rootfs on / type rootfs (rw)
proc on /proc type proc (rw,relatime)
tmpfs on /tmp type tmpfs (rw,relatime)
tmpfs on /dev type tmpfs (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
文件系统已经挂载在根(/)下
移植完成!