解压并更新 ramdisk.img 或 initrd.img

ramdisk.img 或者 initrd.img 是类似的,都是一个小型的文件系统。在系统启动过程中起到引导的作用,内核通过它来启动真正的根文件系统。

有时候需要修改并更新这个文件,下面以ramdisk.img 为例进行说明。

解压 ramdisk.img

ramdisk.img 其实是一个gz格式的压缩包,可以通过 gzip -d 或者 gunzip 解压,不过需要注意的是 gzip, gunzip 会检查文件名后缀,所以需要先将后缀更新为 .gz. 下面将其解压至新建的 root 目录。

$ cp ramdisk.img ramdisk.gz
$ gzip -d ramdisk.gz
$ mkdir root
$ mv ramdisk root

$ cd root
$ cpio -i -F ramdisk
$ rm ramdisk
$ ls -F
bin/  conf/  etc/  init*  lib/  run/  sbin/  scripts/  usr/  var/

之后只需要在 root 目录更新即可,增添、删除、修改均可。

更新 ramdisk.img

修改完成后需要重新生成 ramdisk.img ,步骤如下。

find . |cpio -o -H newc -O ../ramdisk
cd ..
gzip -v9 ramdisk
mv ramdisk.gz ramdisk.img

这样就完成了。

说明

嵌入式系统下的 ramdisk 有其特定的文件格式,比如 arm 平台,还分 armhfaarch64 两个版本,需要添加相同架构的文件才能正确执行。