バージョン0.0.9以降のesオペレーティングシステムでは、qemu上でだけでなく、実際のPC上でも起動させることができるようになっています。ここではコンパクトフラッシュ(CF)カードを使ってesオペレーティングシステムをPC実機上で実行する方法を紹介します。
これまでに起動を確認したPC構成には以下のようなものがあります。
※ BIOSのバージョン等によって上記の構成でもesを起動できない場合があります。
esを開発する際にはデバッグ出力用にCOM1を、GDBとの接続用にCOM2を使用していますので、マザーボードを選ばれるときにはCOMポートがふたつついているものが良いでしょう(背面にCOM1しかないものでもマザーボード上にCOM2のピンヘッダが搭載されているものがあります)。
ビデオカードについては、いまのところ画面出力の設定にVESA BIOSを使用しているだけですので、チップセット内蔵グラフィックスでも問題ありません。
SMP対応については、Core 2 DuoプロセッサーではBIOSの"Core Multi-Processing"設定を有効にすることでSMPモードでesカーネルを起動させることができます。ハイパースレッディング・テクノロジー対応Pentium 4プロセッサーに関しては、現状ではBIOSの"Hyper-Threading"設定の有効・無効に関わらずシングルプロセッサモードでesカーネルが起動します。これはesカーネルが参照しているMPS 1.4のテーブルには物理プロセッサの情報だけが記載され、HTの論理プロセッサについてはBIOSの設定が反映されないためです(論理プロセッサの情報も記載されるのはACPI規格になりますが、こちらはesがまだ対応していません)。
キーボードとマウスに関しては、PS2タイプのものを用意してください。USBキーボードやUSBマウスにはまだ対応していません。なおマウスはSqueakを利用する場合は最低でも3ボタンマウスが必要になります。ホイールもSqueakから利用できますので、一般的なホイールマウスがあるとよいでしょう(es自体は5ボタンのホイールマウスに対応しています)。
サウンドとネットワークに関しては、現状ではesはqemuがエミュレートしているハードウェアであるSoundBlaster 16とNE2000互換のRTL8029ASだけしかサポートしていません。es側で最近のサウンドやネットワークチップに対応していくことは計画していますが、qemuから実機にテスト環境をそのまま移せると言う意味では便利なアイテムですので、 機会があれば手に入れておくとよいかもしれません。
ISAのSoundBlaster 16カードを使用する場合には、カード上のジャンパがBase I/O Address = 0x220, Interrupt Channel = 5, 8-bit DMA channel = 1, 16-bit DMA channel = 5, MIDI Port Base I/O Address = 0x330に設定されていることを確認してください。
esはFedoraでクロス開発を行っていますので、esをPC実機上で起動させるためにはビルドしたバイナリファイルをPC実機のハードディスクやフロッピーディスクにコピーする必要があります。ハードディスクを毎回FedoraのPCと実験用PCとの間でつなぎ変えたり、いちいちフロッピーディスクにファイルをコピーしたのでは時間がかかり過ぎて効率的ではありません。そこで『CF-IDE変換アダプタ』というものを使っています。これはCFカードをIDEハードディスク代わりに利用できるようにするもので、FedoraでビルドしたバイナリファイルをCFカードにコピーしたら、それをCF-IDE変換アダプタに差し込んで実験用PCを起動するとそのままesを起動させることができるようになります。
CF-IDE変換アダプタは実験用PCのマザーボードとIDEケーブルで接続します。IDEコネクタが複数あるマザーボードではプライマリーのIDEコネクタに接続してください。
なおCFカードは、Squeakの起動時間などが秒単位で違ってきますので、最近の高速にデータ転送が可能なものを選ばれるとよいでしょう。
実験用PCのCOM1とCOM2を開発用のFedoraを実行しているPCに接続します。COM1, COM2ともに115200 bps、ノンパリティ、8ビット、ストップビット1に設定します。
$ stty -F /dev/ttyS0 115200 -parenb cs8 -cstopb |
COM1はデバッグ出力を表示するだけですので、ターミナルで次のようにしておけばよいでしょう。
$ cat < /dev/ttyS0 |
FedoraのPCにCFカードを挿入します。PCにCFカードスロットがない場合には市販のUSB CFカードリーダー/ライターなどを取り付けてください。Fedora上では/dev/sdaなどがCFカードに割り当てられているはずです。マルチカードリーダーを使っているとsdbだったりsdcだったりする場合もありますので、dmesgコマンドで確認してみてください。
$ dmesg |
上記の例では512MBのCFカードが/dev/sdbに挿入されたことがわかります。/dev/sdbを読み書きできるようにアクセス権限を設定しておきます。
$ sudo chmod 666 /dev/sdb |
続いてこのCFカードをフォーマットします。esのクロス開発ツールをビルドしてインストールが完了していればvformatというコマンドが利用できるようになっています。
$ vformat /dev/sdb CHS: 0 0 0 Signature 0xaa55 BS_jmpBoot eb 3c 90 BS_OEMName NINTENDO BPB_BytsPerSec 512 BPB_SecPerClus 16 BPB_RsvdSecCnt 1 BPB_NumFATs 2 BPB_RootEntCnt 512 BPB_TotSec16 0 BPB_Media 248 BPB_FATSz16 245 BPB_SecPerTrk 0 BPB_NumHeads 0 BPB_HiddSec 0 BPB_TotSec32 1000944 Volume is FAT16 (62526) BS_DrvNum 0x0 BS_Reserved1 0 BS_BootSig 41 BS_VolID 0 BS_VolLab NO NAME BS_FilSysType FAT16 freeCount: 62526 (500208KB) nxtFree: 2 partition size: 512483328 bytes |
最近のマザーボードでは上記のようにすれば良いのですが、古いマザーボードですとCHSパラメーターが必要な場合があります。そのようなときはCHSを引数に指定してください(以下はCHS=993/16/63の512MB CFカードの例)。
$ vformat /dev/sdb 993 16 63 CHS: 993 16 63 Signature 0xaa55 BS_jmpBoot eb 3c 90 BS_OEMName NINTENDO BPB_BytsPerSec 512 BPB_SecPerClus 16 BPB_RsvdSecCnt 1 BPB_NumFATs 2 BPB_RootEntCnt 512 BPB_TotSec16 0 BPB_Media 248 BPB_FATSz16 245 BPB_SecPerTrk 0 BPB_NumHeads 0 BPB_HiddSec 0 BPB_TotSec32 1000944 Volume is FAT16 (62526) BS_DrvNum 0x0 BS_Reserved1 0 BS_BootSig 41 BS_VolID 0 BS_VolLab NO NAME BS_FilSysType FAT16 freeCount: 62526 (500208KB) nxtFree: 2 partition size: 512483328 bytes |
これでesのブートセクタが書き込まれたFATフォーマットされたCFカードができました。
※ 現状、esはいわゆるスーパーフロッピー形式を使っていてパーティションテーブルを使っていません。スーパーフロッピー形式でフォーマットしたCFカードはデジタルカメラ やFedoraなどではマウントして使えないので注意してください。
続いて、es.ldr, es.imgおよびSqueakを利用する場合にはSqueak関連のファイル(squeak.elf, Squeak3.7-5989-full.image, Squeak3.7-5989-full.changes, SqueakV3.sources)をCFカードにコピーしてください。それにはesのクロス開発ツールのvcopyコマンドを使います。
$ vcopy /dev/sdb os/bootsect/es.ldr |
※ vformat, vcopyコマンドを実行する際にはCFカードリーダー/ライターのアクセスランプが消えていることを確認してから行ってください。CFカードを引き抜くときも同様です。アクセス中にカードを抜くとPCを再起動しないとCFカードの読み書きが再びできなくなる場合があります。
ファイルのコピーが完了したら、CFカードをカードリーダー/ライターから抜き出します。
CF-IDE変換アダプタにCFカードを差込み、実験用PCの電源を入れてください。最初に起動するときには、まずBIOSの設定画面を表示させてください。BIOSの種類にもよりますが、[DEL]キーや[F1]キーを起動時に押すとBIOSの設定画面に行くものが多いようです。
BIOS設定ではCFカードがIDEハードディスクとして認識できていることを確認してください。古いマザーボードなどでLBAモードが無効になっていた場合には有効に変えてみてください。もしくはCHSを指定してCFカードをvformatでフォーマットしてください。
Core 2 DuoプロセッサーではBIOSの"Core Multi-Processing"設定を有効にすることでSMPモードでesカーネルを起動させることができます。
COM1, COM2の設定画面ではCOM1を有効にしておくとデバッグ出力がCOM1から表示されます。COM2は有効にするとesカーネルのgdbスタブが起動するようになりますので、デバッガを使用しない場合は無効にしておいてください。
※ gdbを起動していない状態でCOM2を有効にしておくと、esカーネルはgdbと通信しようとして途中で停止したままになります。
gdbを使用してesカーネルをデバッグする場合にはBIOS設定画面でCOM2を有効にして、Fedora側ではgdbをあらかじめ起動しておきます。
$ gdb es.elf |
gdbの代わりにguiベースのkdbgを利用する場合は以下のようにします。
$ kdbg -r /dev/ttyS1 es.elf |
デフォルトではesInitの内部で自動的にesカーネルの実行が中断してgdbに制御がわたるようになっています。
以上の設定が終わったら、BIOSの設定を保存してPCを再起動してください。うまくいけば、esが起動してSqueakの画面がでてくるはずです。上述のCore 2 Duo E6300のPCでは、CFカードの読み込み速度にもよりますが、電源投入からSqueakのデスクトップが表示されるまでに23秒ほど(そのうちBIOS側の初期化に13秒)といったところです。
Copyright © 2007
Nintendo Co,. Ltd.
Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Nintendo makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.