帶有 initramfs 的 Raspberry Pi 2 自訂內核

帶有 initramfs 的 Raspberry Pi 2 自訂內核

我正在嘗試讓自編譯核心與 initramfs 一起運行。它適用於舊的樹莓派,但不知何故我無法讓它運行。

我正在嘗試做的事情是:加載內核,“運行”initramfs,然後執行一些檢查(系統更新等),最後安裝一個 squashfs 映像並在所述系統上調用 switch_root 。

但核心以某種方式拒絕執行 initramfs 的 init。我嘗試了cmdline.txt/中的各種設置config.txt,但似乎都不起作用,內核總是等待某些 root 可用(或失敗VFS: unable to mount root fs on unknown block)。我假設我缺少一些命令行設定(可能是正確的root=....root=/dev/ram0不起作用)或內核標誌。我目前的命令列:dwc_otg.lpm_enable=0 console=tty1 elevator=deadline rootwait,config.txt:initramfs initramfs.gz followkernel

當我添加root=/dev/mmcblk0p6 roottype=ext4整個系統啟動時(我添加到一些 test-linux 中以驗證核心本身是否有效)。

我檢查了核心是否使用 initramfs 支援進行編譯 ( BLK_DEV_INITRD=y),遺憾的是,將 initramfs 編譯到核心映像中並不是選項。核心(4.1 穩定版)是使用 buildroot 編譯的。內核二進位格式是zImage(似乎不適用於vmlinux,螢幕保持黑色)。

答案1

我從頭開始,經過幾個小時的反覆試驗,我找到了問題的根源,這基本上只是一些愚蠢的錯誤:我的構建腳本生成了帶有絕對路徑的 initramfs (即不是,例如,lib/libc.so但是相反~/Work/project/target/lib/libc.so),這顯然會導致核心找不到初始的init。

我學到的一個有趣的教訓是:嵌入式 initramfs 顯然與外部 initramfs 的行為略有不同,即當存在嵌入式 initramfs 時,init 腳本中的 echo 命令等不會被列印。在修改外部 initramfs 時,我忘記刪除嵌入的 initramfs,導致外部 init 被執行(並且只有那個),但不列印任何內容。當我刪除嵌入的 initramfs 後,它就工作了。

相關內容