关闭

构建linux系统的initramfs / ramdisk

标签: linuxinitramfsramdiskrootfs
911人阅读 评论(0) 收藏 举报
分类:

概述


最近工作中需要用到initramfs。initramfs是一中ram fs,使用它可以使linux系统分阶段启动。使用initramfs主要有两种方式:一种是将最小文件系统直接编译进内核镜像中;另一种方式是制作ramdisk,然后将ramdisk加载到内存中,并指定给内核。无论是哪种方式,都需要内核中驱动的支持,所以要使用initramfs需要在编译内核时打开对initramfs的支持。

配置菜单如下:
Support Initramfs

initramfs的大小是有限制的,在配置ram block驱动是需要制定所需要的大小,配置如下:
ram size

图中使用的是16MB,可以根据需要配置大小。

一、将文件系统编译进内核中


最简单的方法就是将最小根文件系统编译进内核镜像中。那样只需要在编译之前配置内核时制定最小根文件系统的位置就行了,配置initramfs source file就可以了,配置方法如下:
initramfs source file

可以根据自己的实际情况修改Initramfs source file的路径,只需要选中Initramfs source file(s)项回车,然后输入根文件系统路径就好:

initramfs source file path

配置完成后编译,编译出来内核的image文件会比较大,因为这里面包含了最小文件系统。

启动带有initramfs的内核镜像就和启动普通的内核时一样的,不过文件系统在内存中。

二、使用ramdisk


使用ramdisk作为Initramfs比较灵活一些,不需要每次都去编译内核,使用一些命令就可以制作ramdisk。ramdisk也是需要内核的支持,前面已经说过了。为了减小ramdisk占用的内存空间,有时候需要对ramdisk进行压缩,内核使用压缩的ramdisk时就需要对其进行解压缩,我们可以配置内核,使内核支持一些压缩格式:

compress

图中可以看到,我们配置内核支持的时gzip压缩的ramdisk,除此之外内核还支持bzip2,LZMA,XZ和LZO等压缩格式的ramdisk。

下面介绍制作ramdisk的步骤:

1、创建一个16M的空文件,我们内核配置的ram block设备的大小为16MB:

#dd if=/dev/zero of=ramdisk bs=1M count=16

2、格式化这个文件

#mke2fs -F -m0 ramdisk

3、挂载这个文件(通过loop设备)

#mount -t ext2 -o loop ramdisk /mnt

4、将最小文件系统拷贝至ramdisk中

#cp ~/minirootfs/* /mnt -rf

5、umount这个ramdisk

#umount /mnt

6、压缩ramdisk

#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中启动。

ramdisk制作的详细步骤可以参考内核文档kernel/Documentation/initrd.txt

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12881次
    • 积分:326
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:1篇
    • 译文:2篇
    • 评论:8条
    最新评论