initramfsの作り方概略
- 新しいディレクトリを作る
- /devを作る
- /dev/consoleなどは必須
- 何が必須で必須でないのかを判定するのは面倒なので、必要っぽいデバイスノードは全部作っておく
- 作りすぎで困ることはあまりない
- /binを作る
- /lib/modulesを作る
- /initファイルを書く
- 実行権限を付けておく
- cd /path/to/the/directory && find | cpio --quiet -c -o | gzip -9 -c > initrd.img
/initファイルの内容は腕の見せ所。
#!/bin/sh # 何はなくとも/procをマウント mkdir -p /proc mount -t proc proc /proc # /sysをマウント mkdir -p /sys mount -t sysfs sysfs /sys # 1行でできるハードウェア自動検出 for mod in /sys/bus/pci/devices/*/modalias; do modprobe `cat $mod`; done # 種々のカーネルモジュールはキメ打ちでロード modprobe sd_mod # ストレージをマウントしたいとき modprobe sr_mod # CD/DVDをマウントしたいとき modprobe usb-storage # USBストレージをマウントしたいとき modprobe ext3 # ファイルシステムのモジュールなど # ブロックデバイスのデバイスノードの自動生成 for dev in /sys/block/*/dev /sys/block/*/*/dev;do line=`cat $dev` major=`echo $line | cut -d ":" -f 1` minor=`echo $line | cut -d ":" -f 2` name=`dirname $dev`; name=`basename $name` mknod /dev/$name b $major $minor done # いろいろやる # switch_rootする