[[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 に置き替えて使うようにしています。
#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS