diary/Kojima

・P-Plamo の内部構造(その1)

P-Plamo の DVD イメージを ls してみると以下のようになります.

# ls /cdrom
ChangeLog  initramfs/  isolinux/

このうち,ブートに必要なファイルは isolinux ディレクトリにまとめています.

# ls -l /cdrom/isolinux/
合計 1170640
-r--r--r-- 1 root root       2048  2月 28日  13:02 boot.cat
-r--r--r-- 1 root root    2106368  2月 28日  13:02 initrd.gz
-r--r--r-- 1 root root      14336  2月 28日  10:50 isolinux.bin
-r--r--r-- 1 root root        301  2月 24日  13:10 isolinux.cfg
-r--r--r-- 1 root root     122361  2月 24日  11:20 plamo41.lss
-r-xr-xr-x 1 root root 1191424000  2月 27日  12:55 rootimg.squash*
-r--r--r-- 1 root root        311  2月 24日  11:13 sample.msg
-r--r--r-- 1 root root        321  2月 28日  01:27 syslinux.cfg
-r--r--r-- 2 root root    2531888  2月 24日  11:13 vmlinuz
-r--r--r-- 2 root root    2531888  2月 24日  11:13 vmlinuz-2.6.27.4-squashfs

各ファイルの役割は以下の通りです.

boot.cat : isolinux のブートカタログ(作業用)ファイル
initrd.gz : 起動用 initramfs
isolinux.bin : CD/DVD 用のブートローダ本体
isolinux.cfg : isolinux 用設定ファイル
plamo41.lss : ブート時に表示される splash イメージ
rootimg.squash : squash-fs 化したファイルシステム
sample.msg : 起動時に表示されるメッセージファイル
syslinux.cfg : USB ブート用の設定ファイル
vmlinuz, vmlinuz-2.6.27.4-squashfs : Linux カーネルイメージ(ハードリンク)

DVD から起動すると,まず BIOS が DVD 上の isolinux.bin を読み, isolinux.bin は isolinux.cfg の設定に従ってカーネルと initrd.gz をメモリに読み込んで,以下の処理をカーネルに委ねます.

isolinux.bin から以後の処理を託されたカーネルは,initrd.gz に指定した ファイルを initramfs として rootfs に展開して,そこをルートファイルシステム として自身を起動します.

起動されたカーネルは自らに組み込まれたドライバで認識できる周辺機器を認識, 初期化した上で,rootfs 上にある(= initrd.gz の) /init を実行します.

P-Plamo では,initrd.gz に組み込んだ /init はシェルスクリプトで, このスクリプトを用いて squashfs や aufs 用のモジュールドライバなど, DVD とその上にある squashfs をマウントするために必要なモジュールドライバを 組み込み,まず DVD を /cdrom にマウントし,その上(/cdrom/rootimg.squash)にある squashfs 化されたファイルシステムを /loop にマウントします.

その後,/loop 上の RO な squashfs 上に,/var や /etc 等, 書き込みが必要なディレクトリについて /tmp/ow/ 上に作ったディレクトリを union mount して RW 化した上で,squashfs 上のファイルシステムを新たな ルートファイルシステムにするために switch_root コマンドを実行します.

その後の処理は通常の Plamo Linux と同じで,/sbin/init が /etc/inittab を見て,run level に応じた rc ファイルを実行して,,となります.ただし, /etc/rc.d/rc.S については RO な squashfs 上のファイルシステムは fsck できないので,そのあたりの処理は省略するような rc.S ファイルを用意して, 元の /etc/rc.d/rc.S に置き替えて使うようにしています。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:41