私はLinux、特に組み込みLinuxに初めて触れました。
私は、ルートファイルシステムタイプが圧縮された読み取り専用ファイルシステムタイプのSquashFSである組み込みデバイスで開発されたプロジェクトを進めています。
カーネルが起動するとき、特に通常のEXT4タイプではなくSquashFSタイプの場合、ルートファイルシステムを見つけてマウントする方法をどのように知ることができますか?よろしくお願いします。
答え1
これを行う方法は2つあります。
ルートデバイス名を引数()としてカーネルに渡すと、
root
カーネルはストレージデバイスを見つけて起動するためのファイルシステムを識別してマウントするために必要なすべてのモジュールを組み込む必要がありますinit
。カーネルにどのファイルシステムを使用するように指示できますが、rootfstype
それが必須かどうかはわかりません。今日のほとんどのシステムで使用されているの
initramfs
は、カーネルに貼り付けるか、ブートローダによって参照される小さなファイルシステムイメージで、プロセスルートに制御を渡す前に準備(必要な場合)してユーザーモードでマウントするために使用されます。ファイルシステムinit
。操作が実行された後の実際のルートファイルシステムswitch_root
。
答え2
概念があるマジックナンバーこれを参考にしてください。
次に定義されるマジックナンバーのリスト魔法.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
ここ0x53efext4 ファイルシステムのマジックナンバーです。
(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...~..'.....|