GRUB 入りフロッピーイメージを作る

GRUB で起動する OS を書きたいとき用のメモ。とりあえず、Ubuntu で。GRUB2 ではないのでその辺注意。

準備

いろいろ必要なものを入れる。

% sudo aptitude install e2tools grub e2fsprogs

e2tools は mtools*1ext2 版みたいなの。なくても何とかなるけどたぶん、自動化はしにくくなる。
あと、fuseext2 とか入れておくといちいち root にならなくてもイメージをマウントできて良いかもしれない。

ファイルシステムを作る

とりえずイメージを作る。

% dd if=/dev/zero of=fd.img bs=512 count=2880
% mkfs.ext2 -F fd.img

イメージ上にファイルシステムができたら、e2tools を使って、stage1 stage2 をコピー。

% e2mkdir fd.img:/boot
% e2cp /boot/grub/stage{1,2} fd.img:/boot

GRUBをインストール

device map を指定して、grub shell を起動し、grub の stage1 と stage2 を書きこむ。

% cat > device.map <<EOD
(fd0) fd.img
EOD
% grub --batch --device-map=device.map <<EOD
install (fd0)/boot/stage1 (fd0) (fd0)/boot/stage2 (fd0)/boot/menu.cfg
EOD

これでたぶん完成。あとは OS のイメージをコピーするとかmenu.cfg をいじって qemu で確認とか。

*1:っていまどき知らない人が多そうだけど