diary/Kojima/2009-03-03
の編集
http://plamo.linet.gr.jp/?diary/Kojima/2009-03-03
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
-- 雛形とするページ --
diary/Template
[[diary/Kojima]] ・P-Plamo の内部構造(その2) P-Plamo で使用している initrd.gz は isolinux/initrd.gz ですが, 参考のために,このファイルの中身は DVD イメージの initramfs/ 以下に残しています. isolinux/initrd.gz は,initramfs/ ディレクトリで find . | cpio -ov -Hnewc | gzip > isolinux/initrd.gz して作成しています. カーネル 2.4 時代の initrd.gz は,あらかじめ ext2 等の形式で作成した ファイルシステムを ramdisk 上に展開する形式でしたが,2.6 カーネルでは あるディレクトリ以下を cpio + gzip で圧縮した initramfs 形式に変更されました. initramfs 形式だと,サイズ固定のファイルシステムをあらかじめ用意しておく 必要がなくなった分,作成の手間は減りました.なお,従来の initrd.gz 形式もそのまま利用できますし,ファイルシステムイメージを指定するカーネル オプションは initrd=... のままで、形式の違いはカーネルが自動的に見分けてくれます。 initramfs ディレクトリには init スクリプトと以下のようなディレクトリがあります. % ls -F initramfs/ bin/ dev/ init* loop/ new_root/ put_old/ cdrom/ etc/ lib/ lost+found/ proc/ sys/ この init スクリプトが DVD メディアを探してマウントしたり, そこにある squash-fs イメージをマウントしたりして環境を整える仕事をする, P-Plamo の最も重要なファイルです.このファイルの処理については後述します。 bin ディレクトリには init スクリプトが使用するコマンドを収めています. % ls -F bin/ busybox* cut@ insmod@ lsmod@ pivot_root@ switch_root@ cat@ df@ ln@ mkdir@ rm@ umount@ chroot@ dmesg@ losetup@ modprobe@ sh@ cp@ grep@ ls@ mount@ sleep@ 上記のように initramfs では,static link した busybox のみが実体で, 残りのコマンドは busybox へのシンボリックリンクになっています.実は, busybox には上記以外のコマンド(applet)も組み込んでいますが, リンクは必要なものしか作っていないので,init の機能を拡張したい場合, 必要なコマンドが busybox に入っていないかを調べてみてください. dev ディレクトリにはブロックデバイスを中心に,各種デバイスファイルを 収めています. % ls -F dev console hda7 hdb9 mtdblock0 ptyp8 sda sdc1 sde1 tty0 ttyp1 fb0 hda8 hdc mtdblock1 ptyp9 sda1 sdc2 sde2 tty1 ttyp2 fb1 hda9 hdd mtdblock2 ram sda2 sdc3 sde3 tty2 ttyp3 ... hda6 hdb8 mtd3 ptyp7 scd7 sdc sde tty ttyp0 initramfs の段階では udev が動いていないので,DVD や USB メモリをマウントする際に必要になりそうなデバイスファイルをあらかじめ用意しています. これらのデバイスファイルが有効なのは initramfs の中だけで、squash-fs 上の rc.S が動き出せば、必要に応じたデバイスファイルが新たに作成されます。 lib ディレクトリの下には modules ディレクトリがあり, そこに initramfs の動作に必要なモジュールドライバを集めています. % ls -F lib/modules/ aufs.ko ide-cd_mod.ko nls_ascii.ko nls_euc-jp.ko sqlzma.ko unlzma.ko cdrom.ko loop.ko nls_cp437.ko nls_iso8859-1.ko squashfs.ko vfat.ko fat.ko msdos.ko nls_cp932.ko sg.ko sr_mod.ko ここに収めたモジュールドライバは DVD/USB メモリをマウントしたり, squash-fs を loopback でマウントするために必要なもののみです. これら以外のモジュールドライバは squshfs 内の /lib/modules ディレクトリ から読み込まれます. etc ディレクトリには,P-Plamo 用に修正が必要な設定ファイル等を 収めています. % ls -F etc Xsession* csh.login inittab rc.M.modified* xinitrc_kde* Xsetup* cups/ passwd rc.S.modified* caps2ctr_config fstab rc.4.modified* shadow これらのファイルは squash-fs 上で置きかえてもいいのですが, squash-fs は作成にかなり時間がかかる(数時間のオーダー)ので, 試行錯誤的な修正には向かないため,修正が必要なファイルは とりあえずここから union mount したディレクトリにコピーして 試してみるようにしています.そのため,このディレクトリのファイルは 適宜変更されたり,追加,削除されたりするのでご注意ください. 残りのディレクトリは DVD/USB メモリをマウントしたり,proc-fs や sys-fs をマウントするための場所として用意しており,中身はありません. これらのデバイスファイルや各種コマンドが有効なのは initramfs の処理中のみで、 squash-fs 上の実際のルートファイルシステムに切り替わると initramfs 上のデータは全て削除され、利用できなくなります。 #comment
タイムスタンプを変更しない
[[diary/Kojima]] ・P-Plamo の内部構造(その2) P-Plamo で使用している initrd.gz は isolinux/initrd.gz ですが, 参考のために,このファイルの中身は DVD イメージの initramfs/ 以下に残しています. isolinux/initrd.gz は,initramfs/ ディレクトリで find . | cpio -ov -Hnewc | gzip > isolinux/initrd.gz して作成しています. カーネル 2.4 時代の initrd.gz は,あらかじめ ext2 等の形式で作成した ファイルシステムを ramdisk 上に展開する形式でしたが,2.6 カーネルでは あるディレクトリ以下を cpio + gzip で圧縮した initramfs 形式に変更されました. initramfs 形式だと,サイズ固定のファイルシステムをあらかじめ用意しておく 必要がなくなった分,作成の手間は減りました.なお,従来の initrd.gz 形式もそのまま利用できますし,ファイルシステムイメージを指定するカーネル オプションは initrd=... のままで、形式の違いはカーネルが自動的に見分けてくれます。 initramfs ディレクトリには init スクリプトと以下のようなディレクトリがあります. % ls -F initramfs/ bin/ dev/ init* loop/ new_root/ put_old/ cdrom/ etc/ lib/ lost+found/ proc/ sys/ この init スクリプトが DVD メディアを探してマウントしたり, そこにある squash-fs イメージをマウントしたりして環境を整える仕事をする, P-Plamo の最も重要なファイルです.このファイルの処理については後述します。 bin ディレクトリには init スクリプトが使用するコマンドを収めています. % ls -F bin/ busybox* cut@ insmod@ lsmod@ pivot_root@ switch_root@ cat@ df@ ln@ mkdir@ rm@ umount@ chroot@ dmesg@ losetup@ modprobe@ sh@ cp@ grep@ ls@ mount@ sleep@ 上記のように initramfs では,static link した busybox のみが実体で, 残りのコマンドは busybox へのシンボリックリンクになっています.実は, busybox には上記以外のコマンド(applet)も組み込んでいますが, リンクは必要なものしか作っていないので,init の機能を拡張したい場合, 必要なコマンドが busybox に入っていないかを調べてみてください. dev ディレクトリにはブロックデバイスを中心に,各種デバイスファイルを 収めています. % ls -F dev console hda7 hdb9 mtdblock0 ptyp8 sda sdc1 sde1 tty0 ttyp1 fb0 hda8 hdc mtdblock1 ptyp9 sda1 sdc2 sde2 tty1 ttyp2 fb1 hda9 hdd mtdblock2 ram sda2 sdc3 sde3 tty2 ttyp3 ... hda6 hdb8 mtd3 ptyp7 scd7 sdc sde tty ttyp0 initramfs の段階では udev が動いていないので,DVD や USB メモリをマウントする際に必要になりそうなデバイスファイルをあらかじめ用意しています. これらのデバイスファイルが有効なのは initramfs の中だけで、squash-fs 上の rc.S が動き出せば、必要に応じたデバイスファイルが新たに作成されます。 lib ディレクトリの下には modules ディレクトリがあり, そこに initramfs の動作に必要なモジュールドライバを集めています. % ls -F lib/modules/ aufs.ko ide-cd_mod.ko nls_ascii.ko nls_euc-jp.ko sqlzma.ko unlzma.ko cdrom.ko loop.ko nls_cp437.ko nls_iso8859-1.ko squashfs.ko vfat.ko fat.ko msdos.ko nls_cp932.ko sg.ko sr_mod.ko ここに収めたモジュールドライバは DVD/USB メモリをマウントしたり, squash-fs を loopback でマウントするために必要なもののみです. これら以外のモジュールドライバは squshfs 内の /lib/modules ディレクトリ から読み込まれます. etc ディレクトリには,P-Plamo 用に修正が必要な設定ファイル等を 収めています. % ls -F etc Xsession* csh.login inittab rc.M.modified* xinitrc_kde* Xsetup* cups/ passwd rc.S.modified* caps2ctr_config fstab rc.4.modified* shadow これらのファイルは squash-fs 上で置きかえてもいいのですが, squash-fs は作成にかなり時間がかかる(数時間のオーダー)ので, 試行錯誤的な修正には向かないため,修正が必要なファイルは とりあえずここから union mount したディレクトリにコピーして 試してみるようにしています.そのため,このディレクトリのファイルは 適宜変更されたり,追加,削除されたりするのでご注意ください. 残りのディレクトリは DVD/USB メモリをマウントしたり,proc-fs や sys-fs をマウントするための場所として用意しており,中身はありません. これらのデバイスファイルや各種コマンドが有効なのは initramfs の処理中のみで、 squash-fs 上の実際のルートファイルシステムに切り替わると initramfs 上のデータは全て削除され、利用できなくなります。 #comment
テキスト整形のルールを表示する