スクリーンショット (3124050495_0f2b581105_m.jpg)
オープンソースのプロセッサエミュレータ QEMU をベースにして株式会社パイロンが開発した Bishop エミュレータのマニュアルです。
/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
以下の内容の /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
インストーラをダウンロードして実行します。
画像ファイルと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
Windows の場合はインストーラによってROMイメージファイルが C:\Program File\qemu-bishop にダウンロードされます。
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"
スタート > すべてのプログラム > qemu-bishop > qemu-bishop (PE-201A)
で実機の出荷状態と同じ状態で起動します。
主なオプションは以下の通りです。
それぞれの使い方は後述します。
Windows でオプションを変更したい時は C:\Program Files\qemu-bishop\qemu-bishop.bat を編集してください。
-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 としてエミュレートしているので環境変数が保存できません。
-M オプションでボードの種類を指定します。
$ qemu-bishop [...] -M pe201a
| 値 | ボード |
|---|---|
| pe201a | PE-201A |
| pe201b | PE-201A |
| pe201q | PE-201Q |
PE-201Qは開発環境としての利便性を向上させるための仮想ターゲットです。実機より大きな画面(640x1024)および豊富なNOR領域(128MBytes)が利用可能となります。
-serial オプションでシリアルポートの出力先を指定します。
$ qemu-bishop [...] -serial stdout
'stdout' で qemu-bishop を実行したコンソールがシリアルコンソールになります。'telnet:localhost:1200,server' を指定すると telnet クライアントがシリアルコンソールになります。
ネットワークコントローラ DM9000 は QEMU が持つ仮想的なネットワーク 10.0.2.0/24に接続されたデバイスとしてエミュレートされます。同ネットワーク内においては擬似的なサーバ機能が提供されます。
なお、同ネットワーク内ではゲートウェイの先を含めて 10.0.2.2 以外から ping の応答はありません。
ホストのキーボードを USB キーボードとして扱うことができます。
$ qemu-bishop [...] -usbdevice keyboard
ホストのキーボードが英語配列でない環境では、一部のキーが正しく解釈されません。
ディスクイメージを USB メモリとして扱うことができます。
$ qemu-bishop [...] -usbdevice disk:ディスクイメージ
ディスクイメージの作成方法についてはブログ記事「ディスクイメージのホスト側での操作方法」を参照してください。
USB メモリのエミュレーションは高負荷時に不安定になる場合があります。
-sd オプションで指定したディスクイメージを SD カードとして扱うことができます。
$ qemu-bishop [...] -sd ディスクイメージ
ディスクイメージの作成方法についてブログ記事「ディスクイメージのホスト側での操作方法」を参照してください。
-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 |
オーディオエミュレーションがサポートしているのは再生のみです。
環境変数 QEMU_AUDIO_DRV でオーディオドライバを指定できます。
$ QEMU_AUDIO_DRV=alsa qemu-bishop ...
指定できるドライバは以下の通りです。
| 環境変数の値 | ドライバ | 備考 |
|---|---|---|
| sdl | SDL Audio | |
| alsa | Linux ALSA driver | Linux のみ指定可 |
| oss | Linux OSS driver | Linux のみ指定可 |
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のみです。
エミュレータウィンドウ上のポインタ操作を、タッチスクリーンへの入力として変換します。PE-201A や PE-201B としてエミュレーションを行う場合、タッチスクリーンはキャリブレーション済の状態で起動します。PE-201Q では変換係数の初期値に意図的にある程度の誤差を残してあります。キャリブレータの動作確認には PE-201Q を使用してください。
マスク ROM としてエミュレーションされます。NOR としてのコマンドには応答しません。
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)手順は 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)