PC実機での開発方法


はじめに

バージョン0.0.9以降のesオペレーティングシステムでは、qemu上でだけでなく、実際のPC上でも起動させることができるようになっています。ここではコンパクトフラッシュ(CF)カードを使ってesオペレーティングシステムをPC実機上で実行する方法を紹介します。

実験用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に設定されていることを確認してください。

CF-IDE変換アダプタ

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
$ stty -F /dev/ttyS1 115200 -parenb cs8 -cstopb

COM1はデバッグ出力を表示するだけですので、ターミナルで次のようにしておけばよいでしょう。

$ cat < /dev/ttyS0

PC実機でブートさせるまでの手順

FedoraのPCにCFカードを挿入します。PCにCFカードスロットがない場合には市販のUSB CFカードリーダー/ライターなどを取り付けてください。Fedora上では/dev/sdaなどがCFカードに割り当てられているはずです。マルチカードリーダーを使っているとsdbだったりsdcだったりする場合もありますので、dmesgコマンドで確認してみてください。

$ dmesg
SCSI device sdb: 1000944 512-byte hdwr sectors (512 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 23 00 00
sdb: assuming drive cache: write through

上記の例では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
$ vcopy /dev/sdb init/es.img
$ vcopy /dev/sdb cmd/squeak-3.7.1/squeak.elf
$ vcopy /dev/sdb cmd/squeak-3.7.1/SqueakV3.sources
$ vcopy /dev/sdb cmd/squeak-3.7.1/Squeak3.7-5989-full.image
$ vcopy /dev/sdb cmd/squeak-3.7.1/Squeak3.7-5989-full.changes

※ vformat, vcopyコマンドを実行する際にはCFカードリーダー/ライターのアクセスランプが消えていることを確認してから行ってください。CFカードを引き抜くときも同様です。アクセス中にカードを抜くとPCを再起動しないとCFカードの読み書きが再びできなくなる場合があります。

ファイルのコピーが完了したら、CFカードをカードリーダー/ライターから抜き出します。

実験用PCのBIOS設定

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を利用する場合

gdbを使用してesカーネルをデバッグする場合にはBIOS設定画面でCOM2を有効にして、Fedora側ではgdbをあらかじめ起動しておきます。

$ gdb es.elf
(gdb) target remote /dev/ttyS1

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秒)といったところです。

[esオペレーティングシステムのホームページに戻る]


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.

SourceForge.jp