标签:linux initramfs ramdisk rootfs
最近工作中需要用到initramfs。initramfs是一中ram fs,使用它可以使linux系统分阶段启动。使用initramfs主要有两种方式:一种是将最小文件系统直接编译进内核镜像中;另一种方式是制作ramdisk,然后将ramdisk加载到内存中,并指定给内核。无论是哪种方式,都需要内核中驱动的支持,所以要使用initramfs需要在编译内核时打开对initramfs的支持。
配置菜单如下:
initramfs的大小是有限制的,在配置ram block驱动是需要制定所需要的大小,配置如下:
图中使用的是16MB,可以根据需要配置大小。
最简单的方法就是将最小根文件系统编译进内核镜像中。那样只需要在编译之前配置内核时制定最小根文件系统的位置就行了,配置initramfs source file就可以了,配置方法如下:
可以根据自己的实际情况修改Initramfs source file的路径,只需要选中Initramfs source file(s)
项回车,然后输入根文件系统路径就好:
配置完成后编译,编译出来内核的image文件会比较大,因为这里面包含了最小文件系统。
启动带有initramfs的内核镜像就和启动普通的内核时一样的,不过文件系统在内存中。
使用ramdisk作为Initramfs比较灵活一些,不需要每次都去编译内核,使用一些命令就可以制作ramdisk。ramdisk也是需要内核的支持,前面已经说过了。为了减小ramdisk占用的内存空间,有时候需要对ramdisk进行压缩,内核使用压缩的ramdisk时就需要对其进行解压缩,我们可以配置内核,使内核支持一些压缩格式:
图中可以看到,我们配置内核支持的时gzip压缩的ramdisk,除此之外内核还支持bzip2,LZMA,XZ和LZO等压缩格式的ramdisk。
下面介绍制作ramdisk的步骤:
#dd if=/dev/zero of=ramdisk bs=1M count=16
#mke2fs -F -m0 ramdisk
#mount -t ext2 -o loop ramdisk /mnt
#cp ~/minirootfs/* /mnt -rf
#umount /mnt
#gzip -9 ramdisk
第6步完成后将产生一个ramdisk.gz文件,这个就是制作好的压缩的ramdisk文件。
上面步骤进行到第5步,ramdisk应该已经可以使用了,对其进行压缩就是为了减小其占用的空间。
使用ramdisk作为initramfs,需要对内核的bootargs进行修改,需要添加一些args选项。
initrd=[address | path]
在ARM平台中常用initrd=0xXXXXX的方式,其中initrd参数指定的地址就是ramdisk加载到内存的地址。
noinitrd
该选项让内核不要将initrd转换至ram disk中,系统启动后可以通过/dev/initrd访问initrd中的数据。这种方式initrd中可以是任何数据,并非一定要是一个文件系统镜像。
root=/dev/ram0
initrd被挂载为root。从initrd中启动。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:linux initramfs ramdisk rootfs
原文地址:http://blog.csdn.net/liangzhenliang/article/details/46821497