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を使用して、ラベルからデバイス名を解決し、置き換えられたデバイス名でカーネルブートを再起動します。
あなたはそれについてどう思いますか ?実装するのに「最も簡単」なのはどれですか?
たぶん私は何か重要なことを忘れているか、誰かがすでに同じことをすることに成功しました。
とにかく、私はそれを達成するためにいくつかの助けを持ってうれしいです
問題は、LABELとUUIDの処理がLinuxカーネルによって行われるのではなく、initramfsを介して行われることです。これも提供する必要があります。 PARTUUIDを使用する必要があることを回避したい場合は、partコマンドを介して、U-Bootが判断して渡すことができます。