まず、目的
この記事では、主にlinux3.10ファイルシステムの初期化プロセスの第2段階であるinitrdのロードについて説明します。
initrdは、ブートロードによってメモリにロードされる一時ファイルシステムであり、基本的な実行可能プログラムとドライバが含まれています。Linux初期化の初期段階では、基本的な操作環境を提供します。ディスクファイルシステムが正常にロードされると、システムはディスクファイルシステムに切り替わり、initrdをアンインストールします。
組み込みデバイスの場合、最終的なファイルシステムはinitrdです。
2、cpioファイル形式
initrdで一般的に使用されるファイル形式はcpioです。cpio形式はファイルシステムの構造と内容を記録します。
cpio形式の具体的な定義を図1に示します。
cpio形式のファイルはセクションで構成され、最後のセクションは特別で、ファイル名は「TRAILER !!!」です。
各セグメントは、ファイルヘッダー、ファイル名、ファイル本文で構成されます。ファイル名とファイル本文の長さは、ファイルヘッダーのname_lenとbody_lenで指定され、ファイル名とファイル本文は次のようになります。指定されたバイトに従って整列されるため、テールにはパディングが含まれます。
ファイルヘッダーは合計110バイトで、最初の6バイトは070701に固定され、残りのバイトの意味は次のとおりです。iノード番号、ファイルモード、ユーザーID、グループID、リンク数、タイムスタンプ、ファイル本体の長さ、メインデバイス番号、マイナーデバイス番号、デバイス番号、ファイル名の長さ、予約済みフィールド。
その他の詳細については、ここでは説明しないinit /initramfs.cファイルを参照してください。
図1
3つのinitrdファイルの例
cpio形式のinitrdファイルをより直感的に理解するために、以下の例を見てみましょう。
ubuntu環境では、圧縮されたcpio形式のファイルinitrdがブートディレクトリに保存されます。
ブートディレクトリ内のinitrdファイルを任意のディレクトリにコピーし、名前をinitrd.gzに変更して、gunzipで解凍します。
このようにして、cpio形式のinitrdファイルを取得します。viを使用して、図2に示すようにファイルのコンテンツを表示します(ファイルが大きすぎるため、コンテンツの一部のみが表示されます)。
簡単な分析では、ファイルにscript / nfs-topディレクトリ、script / nfs-top / ORDERファイル、script / nfs-top / udevファイル、runディレクトリ、およびcpioの終わりを示すTRAILER !!!ファイルが含まれていることが示されています。
図2
第四に、initrdファイルを解凍します
initrdがgunzipによって解凍された後、cpioツールを使用してファイルをcpio形式で解凍できます。コマンドは次のとおりです。
- ルート:cpio-idmv <initrd
解凍が成功したら、図3に示すように、lsコマンドを使用してinitrdファイルの内容を表示します。
binおよびsbinディレクトリには基本的な実行可能プログラムが含まれ、confおよびetcディレクトリは構成ファイル、libディレクトリは実行可能プログラムによって使用される動的ライブラリ、scriptsディレクトリはスクリプトプログラム、initプログラムです。initrdはinitプログラムを提供する必要があります。Linuxはinitrdをロードした後にinitプログラムにジャンプし、initプログラムはその後の初期化作業を担当します。
画像3
五数要約
この記事では、cpio形式のinitrdファイルと、解凍後の各ディレクトリの意味について詳しく説明します。initrdファイルシステムはinitプログラムを提供します。このプログラムは、Linux初期化段階の後の段階でinitプログラムにジャンプします。このプログラムは、ドライバーのロード、ディスクファイルシステムのマウント、およびその他の初期化タスクを担当します。