友善 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 原始使用的磁區可以手動掛載 相應磁區(掛載為只讀),
根據另外一個朋友折騰了解到:
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.....
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/30544.html
標籤:嵌入式
