ブートローダの一発勝負はリスクが高すぎる。 もう一台テスト用のPCがあったとしても、転送→再起動の手間も 馬鹿にならない。そこで、エミュレータを使ってブートローダのテストを すると良いと考えた。(Vine-4.2用)
ここではqemuを使うことにする。
apt-get install qemu
取りあえず32MBあれば足りるはず.
dd if=/dev/zero of=ディスクイメージファイル名 bs=1M count=32
losetup /dev/loop0 ディスクイメージファイル名
fdisk -u /dev/loop0
fdiskは、「p」して「n」して「p」して 「1」してEnterしてEnterして「p」して「w」すれば良い。
後半の途中で以下のような表示がでるはず。
コマンド (m でヘルプ): p Disk /dev/loop0: 33 MB, 33554432 bytes 255 heads, 63 sectors/track, 4 cylinders, total 65536 sectors Units = セクタ数 of 1 * 512 = 512 bytes デバイス Boot Start End Blocks Id System /dev/loop0p1 63 65535 32736+ 83 Linux Partition 1 does not end on cylinder boundary.
このスタートの63を記憶しておく。 (普通63以外にはならないけど)
losetup -d /dev/loop0
先ほどのスタートの数値に512を掛けた値を計算し(512*63=32256)、 その値をオフセットにして、loopデバイスをセットする。
losetup -o 32256 /dev/loop0 ディスクイメージファイル名
ファイルシステムの作成
mke2fs /dev/loop0
losetup -d /dev/loop0
取りあえず、イメージファイル内にパッケージを導入し、 さらに、イメージファイル内の適当な位置にstageファイルをコピーする。
mount -o loop,offset=32256 ディスクイメージファイル名 /mnt/floppy/ rpm -ivh --nodeps --root /mnt/floppy grub-0.97-0vl6tpu0.i386.rpm cd /mnt/floppy mkdir -p boot/grub cp usr/lib/grub/i386-pc/*stage* boot/grub cd / umount /mnt/floppy
grubのイメージファイル内のMBR等への書き込みを行う。
grub device (hd0) ディスクイメージファイル名 root (hd0,0) setup (hd0) quit
qemu -std-vga ディスクイメージファイル名
そっけないgrubの画面が出たら、取りあえず成功。
マウスが捕まったら、CtrlとAltを同時に押すこと。
特に書き込みもないので、qemuは適当に止めてOK.
もう一度マウントし、gfxbootのテーマファイル(ここではbootlogoする)と menu.lstを書込む。
mount -o loop,offset=32256 ディスクイメージファイル名 /mnt/floppy/ cp bootlogo /mnt/floppy/boot/ cp /boot/grub/menu.lst /mnt/floppy/boot/grub/
menu.lstのgfxmenuの行を忘れずに。
あとはsyncしてから、もう一度qemuを立上げれば良い。
sync qemu -std-vga ディスクイメージファイル名
なにか、それっぽいブートの画面が出ればOK.
本当は、umountしてからqemuを起動すべきなのだが、 ブートローダのテストを目的としていて、 qemu側で書込むことはしないはずなので、 bootlogoやmenu.lstを書き換えても syncで大丈夫だと思う。
(2008/10/31)