initramfsの簡単な設定ファイルについて

initramfsの簡単な設定ファイルについて

誰かが以下で何が起こっているのか説明できますか?

# This is a very simple, default initramfs

    dir /dev 0755 0 0
    nod /dev/console 0600 0 0 c 5 1
    nod /dev/tty 0666 0 0 c 5 0
    nod /dev/null 0600 0 0 c 1 3
    nod /dev/mem 0600 0 0 c 1 1
    nod /dev/kmem 0600 0 0 c 1 2
    nod /dev/zero 0600 0 0 c 1 5
    nod /dev/random 0600 0 0 c 1 8
    nod /dev/urandom 0600 0 0 c 1 9

    dir /dev/pts 0755 0 0
    nod /dev/ptmx 0666 0 0 c 5 2

    nod /dev/ttyS0 0666 0 0 c 4 64
    nod /dev/ttyS1 0666 0 0 c 4 65
    nod /dev/ttyS2 0666 0 0 c 4 66

    dir /bin 755 0 0
    dir /proc 755 0 0

    file /bin/hello ${INSTALL_ROOT}/projects/${SAMPLE}/hello/hello 755 0 0
    slink /bin/init hello 777 0 0

ここで私たちが実際に達成しようとしているものは何ですか?

これは次のようになります。これ

通常、私たちはinit(コードの最後の行)で(hello)を実行しようとしていることは明らかです。

答え1

このファイルは、カーネルソースツリーの gen_init_cpio プログラムの入力ファイルです。

次に適切なcpioアーカイブを作成します。ファイルシステムの初期化ファイル/ディレクトリ/デバイス(=ノード)/...入力ファイルに一覧表示されます。

構文は次のとおりです。

file <name> <location> <mode> <uid> <gid> [<hard links>]
dir <name> <mode> <uid> <gid>\n
nod <name> <mode> <uid> <gid> <dev_type> <maj> <min>
slink <name> <target> <mode> <uid> <gid>

など。

init起動時に実際に実行されるプログラムは、initramfsのプログラムによって異なります。ここのプログラムinitシンボリックリンク到着するhello

答え2

@jofelはこの質問に驚くほど正確に答えました。しかし、実装する必要があるのはカーネル空間からユーザー空間への移行です。カーネルがロードされたら、すべてのシステムが実行できることを確認し、起動しない場合はinit.起動するシステムを見つけますinit。つまり、システムと対話できなくなります。

数年前、カーネル開発者は、1001年とさまざまなルートデバイス構成をサポートするのに疲れたと判断しました。可能なルートファイルシステムとルートデバイスタイプの組み合わせの数が多すぎるため、コンピュータの起動処理が複雑すぎます。だから彼らは努力をあきらめた。

Initramfs2.6以降、すべてのLinuxカーネルに組み込まれました。すべての場合において、その時点からユーザー空間はそこから始まります。カーネルはコンピュータシステムの制御を引き継いだ後、init静かに座って花火を見て、イベント全体を無視します。

あなたの質問のファイルに記載されているディレクトリツリーは、カーネル自体のLinuxルートディレクトリにコンパイルされます。カーネルが他のすべてを見つけるために努力する唯一のルートデバイスです。init.

関連情報