友善 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 相關的代碼了。
系統啟動后是找不到掛載代碼的。
FriendlyCore Emmc 被分為三個分區。 可以通過 sudo fdisk -l 進行查看。
mmcblk0p1 /boot 分區
mmcblk0p2 overlay low 分區 只讀
mmcblk0p3 overlay 工作分區,可讀可寫。
uboot 啟動內核時傳入了 overlay 的工作分區路徑。
如果想查看 overlay 原始使用的分區可以手動掛載 相應分區(掛載為只讀)。
根據另外一個朋友折騰了解到:
RAK3399 開發板 uboot 的 bootargs 為空。
overlayFS 的分區路徑傳入是由 dtb 文件給的。
一些指令操作:
起點在 /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.....