Linux

通過標籤將根文件系統傳遞給linux核心

  • November 23, 2017

如何通過標籤傳遞 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 可以為你確定並傳遞。

引用自:https://unix.stackexchange.com/questions/406325