initrd 简述

作者:李智敏,华清远见嵌入式学院上海分中心讲师。

initrd是在Linux系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd 文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然后再将这个 initrd RAM 磁盘卸载,并释放内存。

initrd 与内核绑定在一起,并作为内核引导过程的一部分进行加载。内核然后会将这个 initrd 文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。initrd 中包含了实现这个目标所需要的目录和可执行程序的最小集合,如在initrd解压后的 ./bin 目录中有一组很少但却非常必要的应用程序,包括 nash(即 not a shell,是一个脚本解释器)、insmod(用来加载内核模块)和 lvm(逻辑卷管理工具)。

在桌面或服务器 Linux 系统中,initrd 是一个临时的文件系统,而在嵌入式系统中,initrd则有可能是永久的根文件系统。对于传统的 Linux 系统来说,initrd 映像是在 Linux 构建过程中创建的。有很多工具,例如 mkinitrd,都可以用来使用必要的库和模块自动构建 initrd,从而用作与真实的根文件系统之间的桥梁。

而在很多基于 Linux 的嵌入式系统上,可以按照下面的步骤来构建initrd。

dd if=/dev/zero of=/tmp/initrd.img bs=$BLKSIZE count=$RDSIZE

mke2fs -F -m 0 -b $BLKSIZE /tmp/initrd.img $RDSIZE

mount /tmp/initrd.img /mnt/initrd -t ext2 -o loop=/dev/loop0

mkdir /mnt/initrd/bin
        mkdir /mnt/initrd/sys
        mkdir /mnt/initrd/dev
        mkdir /mnt/initrd/proc

pushd /mnt/initrd/bin
        cp /usr/local/src/busybox-1.1.1/busybox .
        ln -s busybox ash
        ln -s busybox mount
        ln -s busybox echo
        ln -s busybox ls
        ln -s busybox cat
        ln -s busybox ps
        ln -s busybox dmesg
        ln -s busybox sysctl
        popd

cp -a /dev/console /mnt/initrd/dev
        cp -a /dev/ramdisk /mnt/initrd/dev
        cp -a /dev/ram0 /mnt/initrd/dev
        cp -a /dev/null /mnt/initrd/dev
        cp -a /dev/tty1 /mnt/initrd/dev

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值