Linuxにinitramfsを最終ルートファイルシステムとして処理させる方法はありますか?

Linuxにinitramfsを最終ルートファイルシステムとして処理させる方法はありますか?

ドライバをロードするために使用される一時initramfsではなく、実際の最終ファイルシステムであるinitramfsを使用してシステムを起動したいと思います。残念ながら、Linuxでは、initramfsを使用するときに、少なくとも次の違いを含む他の(私の場合は望ましくない)動作を適用します。

  • devtmpfsは、少なくとも最初は自動的にインストールされていないが、後である時点で自動的にインストールされるように見えます。
  • カーネルは/sbin/initinit=/init

私はinitramfsに追加のゴミを置くことでこれらの問題を解決することができることを知っていますが、むしろ通常のルートfsのように動作したいと思います。これを達成する方法はありますか?

この問題を解決するためにinitramfsでユーザースペーススクリプトを使用する必要がある場合は、少なくともdevtmpfsの自動マウントを引き起こす要因が何であるかを知りたいです。

ベストアンサー1

CONFIG_BLOCK定義されていない場合は、次のようにカーネルがinitramfsで実行に失敗した後に実行されるのにinit/do_mounts.c含まれているため可能です。mount_root/init

#ifdef CONFIG_BLOCK
    {
        int err = create_dev("/dev/root", ROOT_DEV);

        if (err < 0)
            pr_emerg("Failed to create /dev/root: %d\n", err);
        mount_block_root("/dev/root", root_mountflags);
    }
#endif

源泉:https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c?id=c69e3c3a0c014e86750e78b7e2ae823f7a9b2cb2#n535

この場合、mount_root成功するために何もする必要はなく、カーネルは引き続き initramfs を適切なルートファイルシステムとして扱います。

残念ながら、クローズはCONFIG_BLOCKほとんどの用途には実用的ではありません。これがうまくいくべきだと信じるのは、私が使用している特定のボードのパッチで条件が次に置き換えられることです。

#if defined(CONFIG_BLOCK) && !defined(CONFIG_INITRAMFS_SOURCE)

root=initramfs何もしないで戻りを引き起こすサポートを追加する方が良いでしょうmount_root。これは簡単な1行パッチでなければなりません。しかし、上流で許可されるかどうかはわかりません。

おすすめ記事