Bishop エミュレータマニュアル

スクリーンショット

オープンソースのプロセッサエミュレータ QEMU をベースにして株式会社パイロンが開発した Bishop エミュレータのマニュアルです。

1. 対象 OS

  • Debian GNU/Linux 4.0 etch (x86)
  • Debian GNU/Linux sid (x86)
  • Ubuntu 8.10 (x86)
  • Fedora 7, 8, 9, 10, 12 (x86)
  • Windows XP SP2 (x86)

2. インストール

2.1. Debian, Ubuntu

/etc/apt/sources.list に以下の apt-line を追加します。

deb http://downloads.pylone.jp/tools/deb ./

(まだ行っていなければ) pylone.jp の鍵を導入します。

# wget http://pylone.jp/pubkey.asc -O - | apt-key add -

パッケージ一覧を更新してから qemu-bishop パッケージをインストールします。

# aptitude update
# aptitude install qemu-bishop

2.2. Fedora

以下の内容の /etc/yum.repos.d/pylone-jp.repo を作成し、yum レポジトリを追加します。

[pylone-tools]
name=PyloneTools
baseurl=http://downloads.pylone.jp/tools/rpm/
enabled=1
gpgcheck=0

リポジトリ情報を更新してから、qemu-bishop パッケージをインストールします。

# yum update
# yum install qemu-bishop

2.3. Windows

インストーラをダウンロードして実行します。

3. ROMイメージのダウンロード

3.1. Linux

画像ファイルとROMイメージファイルをダウンロードして任意のディレクトリに置きます。

$ mkdir ~/bishop-rom
$ cd ~/bishop-rom/
$ wget http://downloads.pylone.jp/bishop/miscimages-20081215/pe201a.img
$ wget http://downloads.pylone.jp/bishop/miscimages-20081215/pe201b.img
$ wget http://downloads.pylone.jp/bishop/miscimages-20081215/led.img
$ wget http://downloads.pylone.jp/bishop/romimages-20081216/u-boot.bin
$ wget http://downloads.pylone.jp/bishop/romimages-20081216/uImage
$ wget http://downloads.pylone.jp/bishop/romimages-20081216/initrd.uimg
$ wget http://downloads.pylone.jp/bishop/romimages-20081216/splash480.bmp.gz
$ wget http://downloads.pylone.jp/bishop/romimages-20081216/splash640.bmp.gz
$ wget http://downloads.pylone.jp/bishop/romimages-20081216/nand-bishop.img.bz2
$ bunzip2 nand-bishop.img.bz2

3.2. Windows

Windows の場合はインストーラによってROMイメージファイルが C:\Program File\qemu-bishop にダウンロードされます。

4. 起動

4.1. Linux

ROMイメージを置いたディレクトリで qemu-bishop を実行します。実機の出荷状態と同じ状態で起動するためには、以下のようなオプションをつけてください。

$ qemu-bishop -M pe201a -serial stdio -kernel dummy -mtdblock nand-bishop.img -append "root=/dev/mtdblock5 rootfstype=jffs2 console=ttySAC0,115200n8 console=tty0"

4.2. Windows

スタート > すべてのプログラム > qemu-bishop > qemu-bishop (PE-201A)

で実機の出荷状態と同じ状態で起動します。

5. 主なオプション

主なオプションは以下の通りです。

-Mマシンの指定 (pe201a, pe201b, pe201q)
-kernel元々 kernel を指定するオプションですが、Bishop エミュレータでは NOR からカーネルをロードする動作をエミュレートするため無視されます。
-serialシリアルポートの出力先を指定します。
-usbdeviceUSB デバイスの指定
-mtdblockNAND イメージファイルの指定
-sdSD カードイメージファイルの指定
-appendカーネルパラメータの追加

それぞれの使い方は後述します。

Windows でオプションを変更したい時は C:\Program Files\qemu-bishop\qemu-bishop.bat を編集してください。

6. カーネル起動パラメータの変更

-append オプションを使ってカーネル起動パラメータを変更できます。

例えば、qemu-bishop を実行されるホストのNSFサーバによる NFSRoot で起動する場合は以下のようになります。

$ qemu-bishop [...] -append 'root=/dev/nfs nfsroot=10.0.2.2:/rootfsのパス ip=10.0.2.15:::255.255.255.0:::'

指定できるカーネル起動パラメータは実機と同じです。詳細は Bishop の各種ドキュメントを参照してください。

実機では u-boot のモニタコマンドから bootargs 環境変数によってカーネルパラメータを指定します。 Bishop エミュレータでは NOR を単なる ROM としてエミュレートしているので環境変数が保存できません。

7. ボードの選択

-M オプションでボードの種類を指定します。

$ qemu-bishop [...] -M pe201a
ボード
pe201aPE-201A
pe201bPE-201A
pe201qPE-201Q

PE-201Qは開発環境としての利便性を向上させるための仮想ターゲットです。実機より大きな画面(640x1024)および豊富なNOR領域(128MBytes)が利用可能となります。

8. 各種ペリフェラルのエミュレート

8.1. シリアル

-serial オプションでシリアルポートの出力先を指定します。

$ qemu-bishop [...] -serial stdout

'stdout' で qemu-bishop を実行したコンソールがシリアルコンソールになります。'telnet:localhost:1200,server' を指定すると telnet クライアントがシリアルコンソールになります。

8.2. ネットワーク

ネットワークコントローラ DM9000 は QEMU が持つ仮想的なネットワーク 10.0.2.0/24に接続されたデバイスとしてエミュレートされます。同ネットワーク内においては擬似的なサーバ機能が提供されます。

ゲートウェイ10.0.2.2
DNS10.0.2.3
DHCP10.0.2.2

なお、同ネットワーク内ではゲートウェイの先を含めて 10.0.2.2 以外から ping の応答はありません。

8.3. USB キーボード

ホストのキーボードを USB キーボードとして扱うことができます。 

$ qemu-bishop [...] -usbdevice keyboard

ホストのキーボードが英語配列でない環境では、一部のキーが正しく解釈されません。

8.4. USB メモリ

ディスクイメージを USB メモリとして扱うことができます。

$ qemu-bishop [...] -usbdevice disk:ディスクイメージ

ディスクイメージの作成方法についてはブログ記事「ディスクイメージのホスト側での操作方法」を参照してください。

USB メモリのエミュレーションは高負荷時に不安定になる場合があります。

8.5. SD カード

-sd オプションで指定したディスクイメージを SD カードとして扱うことができます。

$ qemu-bishop [...] -sd ディスクイメージ

ディスクイメージの作成方法についてブログ記事「ディスクイメージのホスト側での操作方法」を参照してください。

8.6. NAND

-mtdblock オプションで指定したイメージファイルが NAND として扱われます。

$ qemu-bishop [...] -mtdblock nand-bishop.img
nand-bishop.img - Bishop 出荷状態と同じ内容の NAND イメージファイル
nand-bishop.img.bz2
bzip2
20081216ダウンロード57.0MB
nand-bishop.img.zip
zip
20081216ダウンロード58.1MB
nand-empty.img - 何も書き込まれていない空のイメージファイル
nand-empty.img.bz2
bzip2
20081216ダウンロード136Byte
nand-empty.img.zip
zip
20081216ダウンロード131.3KB

8.7. オーディオ

オーディオエミュレーションがサポートしているのは再生のみです。

環境変数 QEMU_AUDIO_DRV でオーディオドライバを指定できます。

$ QEMU_AUDIO_DRV=alsa qemu-bishop ...

指定できるドライバは以下の通りです。

環境変数の値ドライバ備考
sdlSDL Audio
alsaLinux ALSA driverLinux のみ指定可
ossLinux OSS driverLinux のみ指定可

8.8. LED

Bishop標準のLinuxカーネルで起動した場合、実機と同様にHeartBeatの処理が開始されるとLEDの表示が変化します。

LEDはGPIOポートバンク'B'の 5,6,7,8 ビットに接続されているので、アドレス0x56000014に値を書くと(対応するピンが出力用に設定されていれば)反映されます。なお、論理は負、0 から数えたビット番号とLEDの対応は下表の通りです。

ビットLED
5LED5
6LED4
7LED7
8LED6

例として、U-Bootのモニタコマンドで4つのLEDすべてを消灯/点灯するには以下のようにします。

Bishop # mw.l 56000014 1e0
Bishop # mw.l 56000014 000

エミュレータ上では 1e0 に代わりに ffff などの値を書いても同様の結果が得られますが、実機では 0x1E0 以外の値を設定すると他デバイスの動作に干渉してしまいます。

なお、仮想ターゲットPE-201QにはLEDが存在しないため、LED がエミュレートされるのは PE-201A と PE-201Bのみです。

8.9. タッチスクリーン

エミュレータウィンドウ上のポインタ操作を、タッチスクリーンへの入力として変換します。PE-201A や PE-201B としてエミュレーションを行う場合、タッチスクリーンはキャリブレーション済の状態で起動します。PE-201Q では変換係数の初期値に意図的にある程度の誤差を残してあります。キャリブレータの動作確認には PE-201Q を使用してください。

8.10. NOR FlashROM

マスク ROM としてエミュレーションされます。NOR としてのコマンドには応答しません。

9. gdb によるデバッグ

9.1. Linux カーネル

Linux カーネルをデバッグ情報付きでビルドします。

$ wget http://downloads.pylone.jp/src/linux-2.6.26.8-pylone0.tar.gz
$ tar xzvf linux-2.6.26.8-pylone0.tar.gz
$ cd linux-2.6.26.8-pylone0
$ make ARCH=arm menuconfig
  Kernel hacking  --->
    [*] Kernel debugging
    ...
    [*] Compile the kernel with debug info
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnu- uImage

ダウンロードした qemu-bishop の ROM イメージファイルの uImage を差し替えます。

$ cp arch/arm/boot/uImage ~/bishop-rom/

qemu-bishop を -s -S オプションで起動します。

$ cd ~/bishop-rom/
$ qemu-bishop [...] -s -S

-s -S オプションで起動した qemu-bishop は CPU を止めて、ポート 1234 (-p オプションで変更可)で gdb の接続を待っている状態です。

ビルドしたカーネルのソースディレクトリで gdb[1] を起動し、qemu-bishop に接続します。

$ cd linux-2.6.26.8-pylone0
$ arm-linux-gnu-gdb vmlinux (または arm-linux-gnu-gdbtui vmlinux)
GNU gdb 6.6.90.20070912-debian
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i486-linux-gnu --target=arm-linux-gnu".
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
0x00000000 in ?? ()

例として Bishop の初期化関数 bishop_machine_init() にブレークポイントを設定してみます。

(gdb) b bishop_machine_init
Breakpoint 1 at 0xc000e0e4: file arch/arm/mach-s3c2440/mach-bishop.c, line 497.
(gdb) c
Continuing.

Breakpoint 1, bishop_machine_init () at arch/arm/mach-s3c2440/mach-bishop.c:497
497             s3c2410_pm_init();
(gdb) list
492
493     static void __init bishop_machine_init(void)
494     {
495             int lcd_set0, lcd_set1;
496
497             s3c2410_pm_init();
498
499             /* SD/MMC */
500             s3c_device_sdi.dev.platform_data = &bishop_mci_cfg;
501
(gdb)

9.2. u-boot

手順は Linux カーネルとほとんど同じです。

u-boot をビルドします。

$ wget http://downloads.pylone.jp/src/u-boot-1.2.0-pylone5.tar.gz
$ tar xzvf u-boot-1.2.0-pylone5.tar.gz
$ cd u-boot-1.2.0-pylone5
$ make bishop_config
$ make

ダウンロードした qemu-bishop の ROM イメージファイルの u-boot.bin を差し替えます。

$ cp u-boot.bin ~/bishop-rom/

qemu-bishop を -s -S オプションで起動します。

$ cd ~/bishop-rom/
$ qemu-bishop [...] -s -S

ビルドしたカーネルのソースディレクトリで gdb を起動し、qemu-bishop に接続します。

$ cd u-boot-1.2.0-pylone5
$ arm-linux-gnu-gdb u-boot (または arm-linux-gnu-gdbtui u-boot)
GNU gdb 6.6.90.20070912-debian
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i486-linux-gnu --target=arm-linux-gnu".
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
0x00000000 in ?? ()

例として Bishop の初期化関数 bishop_init() にブレークポイントを設定してみます。

(gdb) b bishop_init
reakpoint 1, board_init () at bishop.c:34
(gdb) c
Continuing.

Breakpoint 1, board_init () at bishop.c:34
34      {
(gdb) list
29                      "subs %0, %1, #1\n"
30                      "bne 1b":"=r" (loops):"0" (loops));
31      }
32
33      int board_init (void)
34      {
35              S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
36              S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
37
38              /* to reduce PLL lock time, adjust the LOCKTIME register */
(gdb)
  1. ^ クロスの gdb をインストールする手順については「クロス開発ツールのインストール」(Debian編, Fedora編) を参照してください。
cc