私はLinux、特に組み込みLinuxにかなり慣れていません。
私は、ルートファイルシステムタイプが圧縮された読み取り専用ファイルシステムタイプであるSquashFSである、組み込みデバイス上ですでに開発されたプロジェクトに取り組んでいます。
カーネルが起動すると、特に通常のEXT4タイプではなくSquashFSタイプの場合、ルートファイルシステムを見つけてマウントする方法をどのように知ることができますか?前もって感謝します。
これを行うには2つの方法があります。
ルートデバイス名をパラメータ(root
)としてカーネルに渡すことができ、カーネルには、ストレージデバイスを見つけ、init
。カーネルにファイルシステムを指示することはできますが(rootfstype
を使用)、これが必要かどうかはわかりません。
現在、大多数のシステムはinitramfs
を使用しています。これは、カーネルに接着された(またはブートローダーによって参照される)小さなファイルシステムイメージであり、ルートファイルシステムを準備して(必要に応じて)ユーザーランドにマウントします。 switch_root
操作を実行した後、実際のルートファイルシステムのinit
プロセスに制御を渡します。
参照できる概念 魔法の数 があります。
magic.h ヘッダーファイルで定義されているマジックナンバーのリスト
たとえば、ディスクをチェックする場合:
Sudo file -Ls /dev/mapper/vg-home
/dev/mapper/vg-home: Linux rev 1.0 ext4 filesystem data, UUID=fd8eb0e8-073d-4ae3-810a-87e8af0981d7 (needs journal recovery) (extents) (64bit) (large files) (huge files)
file
コマンドは、マジックナンバーに基づいてタイプと一致します。これらの値は、hexdumpツールで確認できます。
Sudo hexdump /dev/mapper/vg-home -C | grep "53 ef"
00000430 1b da d0 5e 49 00 ff ff 53 ef 01 00 01 00 00 00
ここで0x53efはext4ファイルシステムのマジックナンバーです
squashfs
の場合(マジックナンバー0x73717368)
Sudo hexdump /dev/somedisk -C | head -n 1
0000000 73 71 73 68 00 00 14 7e 01 ea 27 0d 00 01 00 00 |sqsh...~..'.....|