新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

initramfs のまとめ

initrd は古い。initramfs を使うべき。
使うには
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="/mnt/small_ramdisk"
とする。

microblaze では
CONFIG_INITRAMFS_NO_CHECK=y
としたほうがいいかも。

early_printk_console is enabled at 0x50002000
Ramdisk addr 0x00004b7b, Compiled-in FDT at 0x101128b0

となって立ち上がらなかった。(遅いだけ?)


次のは使っちゃダメ。 (使えるけど古い、、、)

               linux,initrd-start = <0x18000000>;
                linux,initrd-end = <0x180459d6>;

Linux の make 時には CONFIG_INITRAMFS_SOURCE で指定された個所をソースとして cpio + gz をつくる。結果は usr/initramfs_data.cpio.gz となる。これが .init.ramfs セクションに自動的に配置される。

initramfs がありそれが cpio だとカーネルはデバッグモード?にはいり /init を実行する。initramfs に /init がないとパニックになるので注意。

/init はなんかをマウントして initramfs のファイルを消して chroot して /sbin/init を実行すべき(klib にそのものがある。busybox もサポートしているらしい)

initramfs が cpio でなく、かつ RAM ディスクが設定されていると initrd_start をみて RAM ディスクにしようとする。ただし、initrd_start は推奨されていない。initrd_start なければなにもしない、、、。あれば initrd_start から/initrd.imageをつくる。のちにこれが RAM ディスクになる。