initramfsを試す
今までinitrdしか使ったことがなかったので、initramfsがどんなものか試してみる。
最小カーネルを作る
ramfs自体がファイルシステムなので、ext2さえも組み込まないカーネルでも動くはず
% cd linux-2.6.23.1 % mkdir build % export KBUILD_OUTPUT=`pwd`/build % make allnoconfig % make menuconfig General setup ---> Initial RAM filesystem and RAM disk (initramfs/initrd) support Executable file formats ---> Kernel support for ELF binaries この2つのみを追加 % make bzImage % wc -c build/arch/i386/boot/bzImage 559032
最小initramfsを作る
カーネルは/initを実行しようとするので、この中でprocをマウントしてshを起動する
/dev/ram0はあえて作ってない
% cd initramfs % mkdir bin proc % cp /bin/busybox bin/busybox % cat > init #!/bin/busybox sh mount -t proc proc /proc exec busybox sh ^D % chmod +x init % find . | cpio -o -H newc | gzip > ../initramfs.gz
起動してみる
% qemu -kernel bzImage -initrd initramfs.gz -curses -hda dummy
面白い。dfやmountを実行してもルートディレクトリの表示が出てこない。
自動的に /root と /dev/console が作成されていた。
$ df Filesystem 1k-blocks Used Available Use% Mounted on $ mount proc on /proc type proc (rw) $ find / | grep -v ^/proc/ / /init /proc /bin /bin/busybox /root /dev /dev/console