我應該修改哪個文件以在啟動時安裝用戶覆蓋

我應該修改哪個文件以在啟動時安裝用戶覆蓋

我正在開發一個帶有 Arm Cortex A9 的嵌入式設備。核心版本為4.16.0,由buildroot 2018.05產生。儲存記憶體是一個有多個分區的mmc。 U-boot讀取一個分割區中的uImage並啟動核心。檔案系統包含在核心映像中,並在啟動時載入到 initramfs 中(配置:BR2_TARGET_ROOTFS_INITRAMFS)。

我想使用overlayfs來使用資料夾(在mmc中)作為“用戶”文件系統,安裝到/.

我已經嘗試成功地覆蓋/etc一個/data/etc通過將這些行添加到以下名稱的目錄/etc/fstab

/dev/mmcblk0p1 /data auto defaults 1 2
overlay /etc overlay x-systemd.requires=/data,lowerdir=/etc,upperdir=/data/etc,workdir=/data/work/etc 0 0

這是可行的,但覆蓋層是在 systemd 啟動其服務後安裝的。因此,例如網路配置是 uImage 中的配置,而不是我的user檔案系統中的配置。我想在啟動 systemd 之前安裝覆蓋層,就在/安裝之後。

我了解到,在啟動時,系統會在 ram 中建立第一個記憶體空間,然後在其中提取 cpio 映像。然後/安裝在那裡,系統啟動第一個程式:systemd:/sbin/initPID為1。

我已經閱讀了很多文章和問答網站,但我仍然不明白我必須在哪裡進行更改才能在啟動時執行覆蓋。包含該操作的文件是什麼mount /

答案1

此引導時操作位於 initramfs 中。您需要在您的 中新增一個腳本initramfs/scripts,可能是init-bottom為了根據需要(重新)掛載檔案系統,然後產生一個新的 initramfs 套件。

init該腳本在核心進程結束時在檔案系統之前執行init。令人困惑的原因是因為設定代碼並不直接位於檔案系統上,而是位於 initramfs 檔案中。

答案2

您需要找出疊加層的實際位置,並將其輸入到文件中

/etc/fstab

就像您在正在運行的系統中輸入它一樣。

需要注意的是:您需要將該檔案新增至 buildroot 覆蓋檔案系統中,以便在建置 rootfs 時,buildroot 包含修改後的檔案系統表。

舉個例子,假設您想要覆蓋/dev/mmc0p0超過/家,您將執行以下步驟,並使用 MYCOMP 和 MYBOARD 作為您的公司和董事會名稱:

- create a filesystem structure in a seperate directory, as 
  specified in the buildroot manual chapter 9.1 "Recommended 
  directory structure", presumably under /tmp/br_ext
- in this directory you add board/MYCOMP/MYBOARD/rottfs_overlay/etc/fstab 
  and fill it with this information:

板/MYCOMP/MYBOARD/rottfs_overlay/etc/fstab:

  /dev/mmc0p0 /home ext4 defaults 0 1

然後,您可以使用以下命令在 buildroot 樹中建立檔案系統:

make BR2_EXTERNAL=/tmp/br_ext menuconfig
make

重新啟動新檔案系統後,覆蓋層應該就位。

相關內容