嘘です続きはあります。

それ以外にGRUBを使う利点として、TFTPブートができるので、デバッグ時間の短縮ができるん。

GRUBは以下のようにビルドするとTFTPが使えるようにぬる。RTL8139以外を使ってる人は適宜変更して。

 $ ./configure --enable-diskless --enable-rtl8139 --enable-pci-direct 

ディストリに付いてくるGRUBはdisklessが無効になってるので使えへんね。

できたGRUBUSBメモリに入れてごー。menu.lstは↓のようにしておけばよろし。kernelの部分は自分のプログラムの名前におきかえて、serialのコメントを外すと、grubの画面がシリアルで見れるように!

default 0
timeout 1
#serial --speed=115200
#terminal serial

title=QO3
bootp
root (nd)
kernel /QO3
boot

気を付ける点としては、

  • D945GCLFはHDD無しだとBIOS画面に行けなくなることがある→ジャンパをずらすとBIOS画面に行くよ
  • D945GCLFのBIOSパーティションのブートフラグを見るのでブートフラグを立てとかなあかんよ

でござるよ。


で、次、BOOTPとTFTPはdnsmasqを使うことにするの。だってGentooがdnsmasqを使っていたんだもん
普通にビルドして、/etc/dnsmasq.confに、

dhcp-range=192.168.10.128,192.168.10.192
enable-tftp
tftp-root=/tftp

とかでよろし。

  • /tftpにファイル置く
  • シリアル設定する

で準備よかですね。シリアルの確認はGRUBのシリアルを有効にして見るとよいと思うわ。

GRUB Multiboot Specification

GRUBから起動してもらうには、実行ファイルをMultiboot Specificationに従って作ればよかよ。


ELFだと話が簡単になるのでえるふるのがよいとおも。
えるふる、というのは、実行ファイルをELFにするの略なー。ちなみにえるふらなかった奴の代表としてOSXが挙げられ、話を面倒にしてるので、やめてほしいと思った。


えるふった場合はファイルのどっかに↓を置くよろし。ELF以外の場合はGRUBに付いてるmultiboot.infoをよくよんで使用上の用法、用量を守ってお使いください。

	align 4

	dd 0x1badb002 ; magic
	dd 0	      ; flags
	dd -0x1badb002 ; checksum

たったこれで、

  • ファイルサイズは512byteまで
  • A20が無効になっている
  • バグだらけのBIOSと仲良くする

といった人生を無駄にする問題から開放されまする。

まとめ

動くコードとMakefileを置いておきます。

	SECTION	.text
	global	_start

	cpu	486
_start:
	jmp	start2

	align 4
	dd 0x1badb002 ; magic
	dd 0	      ; flags
	dd -0x1badb002 ; checksum

start2:
	jmp	start2
kernel:boot.o
	gcc -m32 -nostdlib -Wl,-Ttext,100000 -o pcmonitor $^

boot.o: boot.s

%.o: %.s
	nasm -felf32 -o $@ $<

手順としては、

  1. 実機をようい
  2. LANをつなぐ
  3. シリアルをつなぐ
  4. GRUBをつくる
  5. GRUBUSBメモリに入れる
  6. dnsmasqをつくる
  7. dnsmasqを設定して起動(最初は -d 付きで起動するとエラーが見れてよいとおも)
  8. Multiboot Specificationに対応した実行ファイルを作る
  9. 実行ファイルをTFTPに見えるとこに置く
  10. きどうしてごー

と、いう感じで思ったより長くなってしまった…(手順も文章も)


それでも、詳細をかなり省略して書いてるので(GRUBのインストール方法とか…)これを読んでも実際できるようになるとは思えないなー。まあ、誰かが試すとも思ってないんですがー。
もし試した人がいて、よくわからない、ということがあれば、コメントにひとこと「よくわからん」と書いていただければもうちょっと説明しまする多分。


あと、今回も描いたはいいけど、使う場面が無かった図があるのでとりあえず貼っておきます。

いや、使い道のある画像には見えないが…Multibootの説明をするついでに入れようかと思ったら、Multiboot書くまでに力尽きたので…