透過標籤將根檔案系統傳遞給linux內核

透過標籤將根檔案系統傳遞給linux內核

如何從 u-boot 引導 linux rootfs,並按標籤傳遞 rootfs 分割區?

我使用 u-boot 作為引導程序,該卡是 RedPitaya。 linux是基於該卡可用的穩定ubuntu鏡像的定制Linux。

U-boot 與 linux 核心和裝置樹一起閃存在 sd 卡的第一個分割區。我正在嘗試在外部 USB HDD 上啟動根文件系統

我準確地說,如果我使用“經典”/dev/sdxn 命名約定,我可以啟動 HDD。


我已經嘗試使用以下參數,但它們都失敗了:

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 從其標籤中解析裝置名稱,並使用替換的裝置名稱重新啟動核心啟動。

你怎麼看待這件事 ?哪一個是實施起來「最簡單」的?

也許我忘記了一些重要的事情或有人已經成功地做了同樣的事情。

不管怎樣,我很高興能得到一些幫助來實現它

答案1

問題是 LABEL 和 UUID 處理不是由 Linux 核心完成的,而是透過 initramfs 完成的,您也需要提供它。如果你想繞過它,你需要使用 PARTUUID,這是透過部分命令,U-Boot 可以為你確定並傳遞。

相關內容