web-dev-qa-db-ja.com

ルートファイルシステムをラベルでLinuxカーネルに渡す

u-bootからLinux rootfsを起動して、ラベルでrootfsパーティションを渡すにはどうすればよいですか?

ブートローダーとしてu-bootを使用していますが、カードはRedPitayaです。 Linuxは、カードで使用可能な安定したubuntuイメージに基づいてカスタマイズされたLinuxです。

U-bootは、Linuxカーネルとデバイスツリーを備えたSDカードの最初のパーティションでフラッシュされます。外付けUSBHDDでルートファイルシステムを起動しようとしています

「クラシック」な/ 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.cdev_t name_to_dev_t(const char *name)関数定義の直前。

そこで、これから、外付けUSBHDDでROOTFSというラベルの付いたパーティションを起動する方法を見つけたいと思います。


私はそこに2つの異なる解決策を見ます:

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カードの2番目のパーティションで小さなrootfsを使用して、ラベルからデバイス名を解決し、置き換えられたデバイス名でカーネルブートを再起動します。

あなたはそれについてどう思いますか ?実装するのに「最も簡単」なのはどれですか?

たぶん私は何か重要なことを忘れているか、誰かがすでに同じことをすることに成功しました。

とにかく、私はそれを達成するためにいくつかの助けを持ってうれしいです

2
Arkaik

問題は、LABELとUUIDの処理がLinuxカーネルによって行われるのではなく、initramfsを介して行われることです。これも提供する必要があります。 PARTUUIDを使用する必要があることを回避したい場合は、partコマンドを介して、U-Bootが判断して渡すことができます。

2
Tom Rini