通過標籤將根文件系統傳遞給linux核心
如何通過標籤傳遞 rootfs 分區從 u-boot 引導 linux rootfs?
我使用 u-boot 作為引導載入程序,該卡是 RedPitaya。linux 是基於卡可用的穩定 ubuntu 映像定制的 Linux。
U-boot 在 sd 卡的第一個分區中刷入 linux 核心和設備樹。我正在嘗試在外部 USB 硬碟上啟動根文件系統
我準確地說,如果我使用“經典”/dev/sdxn 命名約定,我可以啟動硬碟。
我已經嘗試過使用以下參數,但它們都失敗了:
console=ttyPS0,115200 root=/dev/disk/by-label/ROOTFS rw rootfstype=ext4 earlyprintk rootwait isolcpus=1
console=ttyPS0,115200 root=LABEL=ROOTFS rw rootfstype=ext4 earlyprintk rootwait isolcpus=1
根據我在研究中的理解, /dev/disk/by-label 由 udev 填充,因此在將引導參數傳遞給 linux 核心時,它在 u-boot 中不可用。
我還發現從標籤啟動的功能沒有集成到 linux 核心中,正如您在函式定義之前的文件do_mounts.c中看到的那樣。
dev_t name_to_dev_t(const char *name)
因此,從現在開始,我想找到一種方法來引導標記為
ROOTFS
外部 USB 硬碟上的分區。我在那裡看到兩種不同的解決方案:
1 - 通過添加類似的東西在 linux 核心中集成標籤引導功能
if (strncmp(name, "LABEL=", 6) == 0) { name += 6; res = devt_from_label(name); if (!res) goto fail; goto done; }
進入
do_mounts.c
並實現功能devt_from_label
。2 - 在 sd 卡的第二個分區上使用小型 rootfs 從其標籤中解析設備名稱,並使用替換的設備名稱重新啟動核心引導。
你怎麼看待這件事 ?哪一個是實施起來“最簡單”的?
也許我忘記了一些重要的事情,或者有人已經成功地做了同樣的事情。
無論如何,我很高興能得到一些幫助來實現它
問題是 LABEL 和 UUID 處理不是由 Linux 核心完成的,而是通過 initramfs 完成的,您也需要提供它。如果你想繞過你需要使用 PARTUUID,這是通過 part 命令,U-Boot 可以為你確定並傳遞。