DOSモバでGRUB

結局のところA20問題だった。
よって、DOSモバでGRUBを動かすには以下の手順が必要になる。

ビルド

  1. GRUB0.97を展開して./configureする。GRUB2はVGAに依存しているためおそらく使えない。
  2. MakefileのSTAGE2_CFLAGSをSTAGE2_CFLAGS = -Os -fno-stack-protector -march=i386 -m32とする。そうでなければ686命令コードを出力するため、モバイルギアの486では動作しない
  3. stage2/asm.Sを以下のように変更する
3:      /* use keyboard controller */
        pushl   %eax

        call    gloop1
        movb $2,%al /* 以下3行を追加 */
        outb $0x92
        call gloop1

インストール

  1. CFをFAT16でフォーマットする。低容量のCFはFAT12でフォーマットされているかもしれない。また一部のCFは完全に起動しない。もし、GRUB等が起動せず、通常のUnishellが起動するようなら、CFの交換を検討する(Sundiskは比較的よく動作する)。
  2. CFをマウントし、/boot/grubを準備する。適切なmenu.lstを準備する必要もある(キーボードが効かないため)。
  3. ホスト側でgrubを起動し、普通にセットアップ*1
  4. bviなりなんなりでMBRシグニチャを修正する http://d.hatena.ne.jp/mjt/20081023/p1
  5. 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はほぼ間違いなく動作しないことに注意

UbuntuをPVMで使う

意外と難易度が高い。
インストールはHVMとして行い、/bootにあるカーネルとinitrdだけをDom0側に持ってきて使う。PV-GRUBは正常に動作しないことが有った。

  1. HVMをセットアップし、LiveCDから普通にインストールする
  2. パッケージlinux-xenとtightvncを追加(VNCは外部からの操作用)
  3. gconf-editorでapps/gnome_settings_daemon/plugins/keyboardとmouseのactiveのチェックを外す。そうしないとvncserverを使ったときに正常にキー入力を受けつけない。
  4. システム/システム管理/ログイン画面から、リモートを選び、リモートログインを許可する
  5. シャットダウン
  6. PVMを設定する。kernelとしてboot/vmlinuz-2.6.24-21-xenramdiskとしてboot/initrd.img-2.6.24-21-xen、extraとしてboot/grub/menu.lstにあるカーネルオプションを拾ってくる
  7. vncserver -query 127.0.0.1してそれに繋ぐ

感覚としては、coLinuxで普通のディストリビューションを使うのと近い。
64bitのXenで32bitのLinuxが正常に動作する。要するに、周囲の環境と同じ32bit環境で色々と試験する必要があったため。
追記 : 既にlinux-xenではなく、通常の-serverのカーネルXEN DomUのサポートが入っている、、はずだが上手く動いていない。