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

オープンソースのプロセッサエミュレータ QEMU をベースにして株式会社パイロンが開発した Bishop エミュレータのマニュアルです。
- 1. 対象 OS
- 2. インストール
- 2.1. Debian, Ubuntu
- 2.2. Fedora
- 2.3. Windows
- 3. ROMイメージのダウンロード
- 3.1. Linux
- 3.2. Windows
- 4. 起動
- 4.1. Linux
- 4.2. Windows
- 5. 主なオプション
- 6. カーネル起動パラメータの変更
- 7. ボードの選択
- 8. 各種ペリフェラルのエミュレート
- 8.1. シリアル
- 8.2. ネットワーク
- 8.3. USB キーボード
- 8.4. USB メモリ
- 8.5. SD カード
- 8.6. NAND
- 8.7. オーディオ
- 8.8. LED
- 8.9. タッチスクリーン
- 8.10. NOR FlashROM
- 9. gdb によるデバッグ
- 9.1. Linux カーネル
- 9.2. u-boot
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 | シリアルポートの出力先を指定します。 |
| -usbdevice | USB デバイスの指定 |
| -mtdblock | NAND イメージファイルの指定 |
| -sd | SD カードイメージファイルの指定 |
| -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| 値 | ボード |
|---|---|
| pe201a | PE-201A |
| pe201b | PE-201A |
| pe201q | PE-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 |
|---|---|
| DNS | 10.0.2.3 |
| DHCP | 10.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 ...指定できるドライバは以下の通りです。
| 環境変数の値 | ドライバ | 備考 |
|---|---|---|
| sdl | SDL Audio | |
| alsa | Linux ALSA driver | Linux のみ指定可 |
| oss | Linux OSS driver | Linux のみ指定可 |
8.8. LED
Bishop標準のLinuxカーネルで起動した場合、実機と同様にHeartBeatの処理が開始されるとLEDの表示が変化します。
LEDはGPIOポートバンク'B'の 5,6,7,8 ビットに接続されているので、アドレス0x56000014に値を書くと(対応するピンが出力用に設定されていれば)反映されます。なお、論理は負、0 から数えたビット番号とLEDの対応は下表の通りです。
| ビット | LED |
|---|---|
| 5 | LED5 |
| 6 | LED4 |
| 7 | LED7 |
| 8 | LED6 |
例として、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)
著作権と免責
Copyright © 2008-2010 Pylone, Inc.
この文書の著作権は株式会社パイロンが保有します。
この文書は「現状のまま(as is)」で提供され、明示的であるかどうかを問わず、内容についてなんら保証するものではありません。
この文書には、技術的な誤り、誤植、不適格な表現や未完成部分等を含む可能性があります。従って、この文書は予告無しに追加、変更、削除される可能性があります。
この文書は「クリエイティブ・コモンズ-表示-2.1-日本 以降」(CC-by-2.1 or later) の下で配布されています。