DOSモバでGRUB
結局のところA20問題だった。
よって、DOSモバでGRUBを動かすには以下の手順が必要になる。
ビルド
- GRUB0.97を展開して./configureする。GRUB2はVGAに依存しているためおそらく使えない。
- MakefileのSTAGE2_CFLAGSをSTAGE2_CFLAGS = -Os -fno-stack-protector -march=i386 -m32とする。そうでなければ686命令コードを出力するため、モバイルギアの486では動作しない
- stage2/asm.Sを以下のように変更する
3: /* use keyboard controller */ pushl %eax call gloop1 movb $2,%al /* 以下3行を追加 */ outb $0x92 call gloop1
インストール
- CFをFAT16でフォーマットする。低容量のCFはFAT12でフォーマットされているかもしれない。また一部のCFは完全に起動しない。もし、GRUB等が起動せず、通常のUnishellが起動するようなら、CFの交換を検討する(Sundiskは比較的よく動作する)。
- CFをマウントし、/boot/grubを準備する。適切なmenu.lstを準備する必要もある(キーボードが効かないため)。
- ホスト側でgrubを起動し、普通にセットアップ*1
- bviなりなんなりでMBRのシグニチャを修正する http://d.hatena.ne.jp/mjt/20081023/p1
- CFを挿した状態で電源を投入する。すでに電源が入っている状態であればリセットする。
A20問題
http://www.win.tue.nl/~aeb/linux/kbd/A20.html
ここで説明されているIBM_L40の対応がモバイルギアにも必要。
他に、認識されているRAM容量がおかしい等の問題がある。
*1:http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml?part=1&chap=10 gentooの文章が参考になる。しかし、通常の方法でコンパイルされたGRUBはほぼ間違いなく動作しないことに注意