构建linux系统的initramfs / ramdisk

原创 2015年07月09日 20:45:44

概述


最近工作中需要用到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

相关文章推荐

《Linux启动过程分析》之区别Initramfs与initrd

一、简介 1.initrd   在早期的linux系统中,一般只有硬盘或者软盘被用来作为linux根文件系统的存储设备,因此也就很容易把这些设备的驱动程序集成到内核中。但是现在的嵌入式系统中可能将根文...

initramfs概述

initramfs概述 initramfs与initrd类似,也是初始化好了且存在于ram中的,可以压缩也可以不压缩。但是目前initramfs只支持cpio包格式,它会被populate_root...

从ramdisk根文件系统启动Linux成功,及使用initramfs启动linux

下面两篇文章是ARM9论坛上的讲解ramdisk文件系统的很不错的文章 今天做了个试验,让Linux2.6.29.4从ramdisk根文件系统启动成功,总结一下。 其中涉及的内容较多,很多东西...

BusyBox制作Initramfs嵌入式Linux根文件系统

嵌入式Linux系统由linux内核与根文件系统两部分构成,两者缺一不可(无根文件系统的内核无法启动) 使用busybox构建嵌入式根文件系统目录结构,配置内核,并且使用Initramfs制作成根...

Linux启动分析之Initramfs

在前面已经分析了rootfs的挂载,解决了VFS架构下原始挂载点的问题,也提到了Initramfs文件包的填充,这里记下如何实现Initramfs填充 一、Initramfs概述 1.initrd...
  • BOJUE01
  • BOJUE01
  • 2016年12月21日 15:11
  • 1836

initrd和initramfs的区别

initrd和initramfs的区别 Linux内核在初始化之后会执行init进程,而init进程会挂载我们的根文件系统,但由于init程序也是在根文件系统上的,所以这就有了悖论。Linu...
  • htttw
  • htttw
  • 2012年01月29日 13:52
  • 10657

Initramfs的制作和移植

Initramfs的制作和移植 1. initramfs    initramfs在编译内核的同时被编译并与内核生成一个映像文件,可以压缩也可以不压缩,但是目前只支持cpio包格式。它是根文件系统制...
  • LYX_WIN
  • LYX_WIN
  • 2016年07月23日 16:29
  • 1094

initramfs文件系统的介绍与制作

一、什么是initramfs文件系统     initramfs最初的想法是Linus提出的,把cache当作文件系统装载。他在一个叫ramfs的cache实现上加了一层很薄的封装,其它内核开发人员编...

initramfs构建

一、initramfs是什么   在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查roo...

制作initrd(3):/etc/initramfs-tools/modules配置文件分析

这是前面:一文增补,简单解释在制作initrd过程中一些原理。     中提到如果想向initrd.img中添加新的模块,可在/etc/initramfs-tools/modules文件中添加相应模...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:构建linux系统的initramfs / ramdisk
举报原因:
原因补充:

(最多只允许输入30个字)