九环

导航

FriendlyCore overlayfs 挂载方式


友善 friendlycore 挂载 overlayfs 过程:

以下是友善 s5p4418 相关开发板的分析;

 

uboot 引导系统启动的时候加载 ramdisk.img 。 ramdisk.img 是 initrd(虚拟文件系统) 。

  注意: ramdisk.img 是 cpio 文件的 gzip 压缩文件。 要解压需要添加 .gz 后缀,否则解压软件不认。

 

内核启动最后运行 initrd 文件系统下的 /init 脚本。

  init 脚本调用 mountroot 方法。    (mountroot 在 /script/local 文件内。)

    mountroot 调用 local_mount_overlay 方法。

      local_mount_overlay 内执行  mount -t overlay.....   挂载 overlayfs。

      此时,emmc 的分区正式被挂载。 ramdisk 被覆盖。 /script 目录将不可见。 也就找不到挂载 overlayfs 相关的代码了。

      系统启动后是找不到挂载代码的。

 

overlayfs 介绍

 

FriendlyCore  Emmc 被分为三个分区。 可以通过 sudo fdisk -l 进行查看。

  mmcblk0p1  /boot 分区

  mmcblk0p2  overlay low 分区 只读

  mmcblk0p3  overlay 工作分区,可读可写。

uboot 启动内核时传入了 overlay 的工作分区路径。

如果想查看 overlay 原始使用的分区可以手动挂载 相应分区(挂载为只读)。

 

根据另外一个朋友折腾了解到:

RK3288  RK3399 开发板 uboot  的  bootargs 为空。

  RK 家的做法参考安卓 boot.img 的处理方式。

  将 kernel 的 zImage ,ramdisk, dtb (second) 打包成一个 img 文件。

./mkbootimg --kernel out/kernel --ramdisk out/ramdisk --second out/second --output out/boot.img

  overlayFS 的分区路径是从emmc头部读取到的分区表。

 

一些指令操作:


起点在 /boot 目录 的 ramdisk.img
// 挂载真正的boot到目录下
mount /dev/mmcblk0p1 /boot

// 可以看到文件 /boot/ramdisk.img
// copy出来单独分析:
cp ramdisk.img ~
cd ~

file ramdisk.img
// 文件格式为 gzip

// 添加.gz后缀。并解压
mv ramdisk.img ramdisk.img.gz
gunzip ramdisk.img.gz
// 解压得到 ramdisk.img
file ramdisk.img
// 可以看到文件的真正格式是 cpio

// 解压
cpio -i -F ramdisk.img

// 得到ramdisk的完整内容。

分析得到:

根目录下 init 引用 /script/local   并调用 /script/local 文件内 mountroot 方法。
    mountroot() 调用  local_mount_overlay()   mount -t overlay.....


posted on 2019-10-18 17:07  九环  阅读(1307)  评论(2编辑  收藏  举报