2009年9月5日土曜日

FDイメージにGRUBを入れる

フロッピーディスクのイメージを作ってGRUBで起動し Multiboot Specificationとやらのパワーでプログラムを実行するためのメモ.

GNUのマニュアルや多数のブログ記事を参考にした.皆様に感謝.

$ dd if=/dev/zero of=./test bs=512 count=2880
2880+0 records in
2880+0 records out
1474560 bytes (1.5 MB) copied, 0.109047 s, 13.5 MB/s

ddコマンドで512バイトx2880(セクタ数18xヘッド数2xシリンダ数80)= 1.44MBのファイルを生成する.bs=1k count=1440の方が解りやすいかも.

$ mkfs.vfat test
mkfs.vfat 2.11 (12 Mar 2005)

適当なファイルシステムでフォーマット.mkfs.vfatはオプションを付けないとFAT16になるそうだ.

$ sudo mount test tmp -o loop
カレントディレクトリにtmpというディレクトリがあることを前提とする. mountは-oに続けてオプションを指定できる.

loopオプションはループデバイス(ループバックデバイス)の機能を用いて通常のファイルをブロック型デバイスとして扱うためのオプション. -o loop=/dev/loop0等と指定するが,省略されると使われてないループデバイスを探して利用してくれるそうだ.

$ cd tmp
$ sudo mkdir boot
$ cd boot
$ sudo mkdir grub
$ sudo cp /boot/grub/stage1 /boot/grub/stage2 /boot/grub/menu.lst ./
$ menu.lstを適当に編集

マウントしたイメージに/boot/grub/というディレクトリを作り,そこに grubのstage1(1次ローダ),stage2(2次ローダ),menu.lst(grub 起動時の設定?)をコピーする.このままだとmenu.lstが現在のブート時の設定になってるので適当にいじる.いじらなくてもコマンド入力すれば動かせはする.

$ grub
/* grubのコマンド */
> device (fd0) test /* デバイスの指定 */
> root (fd0)
> setup (fd0) /* stage1を書きこむ */
> quit

grubがインストールされる.たったこれだけでいいそうな.

あとはMultiboot Specificationに対応したバイナリをディスクイメージの中に入れて(/hoge.bin等)ブートし,grubのコマンドとしてkernel /hoge.bin と打てば実行される.

今日の結論:grubすげぇ.

0 件のコメント:

コメントを投稿