Pylone Blog - タグ:qemu
SBC6000X エミュレータ
先日発売いたしました、組込みLinux開発用CPUボード SBC6000X を QEMU でサポートしましたので公開します。
ベースにした QEMU のバージョンは 0.15.1 です。
| SBC6000X エミュレータ | |||
| qemu-sbc6000x-0.15.1-pylone1.tar.bz2 ソースコード | 0.15.1-pylone1 | ダウンロード | 4.6MB |
概要
ARM926 は本家 QEMU でサポートされているため、同コア の SoC を搭載したプラットフォームがいくつかサポートされています。 しかし、同コアを使用した SBC6000X のマイクロプロセッサである AT91SAM9261 は今のところサポートされていません。
そこで、Linux の起動に必要となる周辺デバイスのエミュレーションを追加しました。
現状
SBC6000X 用 Linux が起動できる必要最小限のエミュレーションを目標にしたため、実機を完全にエミュレート出来るまでに至っていません。
クイックスタート
ホスト OS として Debian GNU/Linux Squeeze を例に説明します。
SBC6000X 用の Buildroot を用いたビルド にて環境一式が整っていることを前提とします (以降、SBC6000X 用 Buildroot のディレクトリを ~/buildroot-sbc6000x とします)。
現時点では、NAND デバイスをまだエミュレートできないため、ここでは、rootfs に NFS を使用します。 以下の設定を追加し、反映します (以降、NFS として export するディレクトリを /opt/sbc6000x とします)。
# vi /etc/exports /opt/sbc6000x 127.0.0.1(rw,sync,subtree_check,no_root_squash,insecure) # exportfs -a
次に、QEMU をビルドするためのライブラリ (開発版パッケージ) をインストールします。 既にインストール済みの場合は不要です。
# apt-get install libglib2.0-dev # apt-get install zlib1g-dev # apt-get install libsdl1.2-dev
最後に、ビルドして実行するまでの手順です。
$ mkdir ~/qemu-sbc6000x $ cd ~/qemu-sbc6000x $ wget http://downloads.pylone.jp/sbc6000x/src/qemu-sbc6000x-0.15.1-pylone1.tar.bz2 $ tar xjf qemu-sbc6000x-0.15.1-pylone1.tar.bz2 $ cd qemu-sbc6000x-0.15.1-pylone1 $ ./configure --target-list=arm-softmmu $ make $ ./arm-softmmu/qemu-system-arm \ -M sbc6000x \ -m 256 \ -serial stdio \ -kernel ~/buildroot-sbc6000x/output/images/uImage \ -append "console=ttyS0 root=/dev/nfs rw nfsroot=10.0.2.2:/opt/sbc6000x ip=dhcp"
起動後にログイン可能なユーザーは "root"、または "default" (一般ユーザ) です (何れもパスワードはありません)。
終了するには、QEMU ウィンドウを閉じるか、起動した端末上で Ctrl-C を発行して QEMU を終了してください。
その他の詳しい使い方については SBC6000X エミュレータマニュアル を参照してください。
既知の問題点
起動中、まれに、
mmc0: host doesn't support card's voltages mmc0: error -22 whilst initialising SDIO card mmc0: host doesn't support card's voltages mmc0: error -22 whilst initialising MMC card mmc0: host doesn't support card's voltages mmc0: error -22 whilst initialising SDIO card mmc0: host doesn't support card's voltages mmc0: error -22 whilst initialising MMC card
というタイミングで起動が停止してしまいますが、終了して再起動してみてください。
おわりに
QEMU に対して追加実装した部分の完成度はまだ低いですが、Linux の基本的な動作は確認できると思います。 SBC6000X のソフトウェアの検討や、組み込み Linux 開発の入門を目的とした使い方をしていただければ幸いです。
ドキュメント
TOPPERS/JSPカーネル for Bishop
組込みLinux開発用CPUボードBishop向けに移植したTOPPERS/JSPカーネルを公開します。使用したTOPPERS/JSPカーネルのバージョンは 1.4.3 です。
TOPPERS/JSPカーネルとは、μITRON4.0仕様に準拠したリアルタイムカーネルで、TOPPERSプロジェクトの開発成果です。 TOPPERS/JSPカーネルの詳細についてはTOPPERSプロジェクトサイトを参照してください。
株式会社パイロンが独自に配布する非公式なバージョンです。本ソフトウェアについてTOPPERSプロジェクトへの質問はお控えください。
今回の移植は実験的なものです。実用レベルに達していないことを予めご了承ください。
| TOPPERS/JSP カーネル for Bishop | |||
| toppers-jsp-bishop-1.4.3-pylone0.tar.bz2 ソースコード | 1.4.3-pylone0 | ダウンロード | 996.4KB |
| toppers-jsp-bishop-1.4.3-pylone0.bin ROMバイナリ | 1.4.3-pylone0 | ダウンロード | 28.0KB |
移植概要
ゼロからの移植ではなく、標準TOPPERS/JSPカーネルに既に含まれる同一のCPUコアを持つシステムをベースにして移植を行いました。 BishopのCPUコアはARM920Tであるため、ベースにするシステムはIntegrator/AP+CM920Tとしました。
また、サポートしたデバイスは、TOPPERS/JSPカーネルの動作が最低限確認出来るものとして、
- インターバルタイマ
- UART
のみとしました。
Bishopエミュレータによる実行
Bishopエミュレータにて実行する手順です。 予めBishopエミュレータをインストールしたLinux環境を想定しています。
Windows上のBishopエミュレータでの実行手順、及びBishopボードでの実行手順に関しては後述の関連リンクを参照してください。
前述のTOPPERS/JSPカーネルのROMバイナリファイルをダウンロードして、ダウンロードしたディレクトリに移動後、
$ mv toppers-jsp-bishop-1.4.3-pylone0.bin u-boot.bin
としてファイル名称を変更して、
$ qemu-bishop -M pe201a -serial stdio -kernel dummy -mtdblock /dev/null -nographic
としてqemu-bishopを起動します。この時、
failed to open: led.img failed to open: led.img failed to open: led.img failed to open: led.img failed to open: pe201a.img bishop_reset: splash image splash480.bmp.gz was not found bishop_reset: failed to load a kernel image file
と、qemu-bishopがメッセージを出力しますがTOPPERS/JSPカーネルの動作に影響はありません。
次いで、
TOPPERS/JSP Kernel Release 1.4 (patchlevel = 3) for ARM - Pylone Bishop board (Feb 24 2009, 15:21:58)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2006 by Embedded and Real-Time Systems Laboratory
Graduate School of Information Science, Nagoya Univ., JAPAN
System logging task is started on port 1.
Sample program starts (exinf = 0).
task1 is running (001). |
task1 is running (002). |
task1 is running (003). |
とTOPPERS/JSPカーネルのバナー、及びTOPPERS/JSP付属のサンプルプログラムからのシリアル出力が表示されると思います。
サンプルプログラムは起動中の3つのタスクに関する指示を与えられるようになっており、 例えばレディーキューを回転する'r'を入力すると、task1からtask2へと実行状態のタスクが切り替わります。
Sample program starts (exinf = 0). task1 is running (001). | task1 is running (002). | task1 is running (003). | #rot_rdq(three priorities) task2 is running (001). + task2 is running (002). + task2 is running (003). +
サンプルプログラムの詳細に関しては、TOPPERS/JSPカーネルソースコード内の sample/sample1.c 冒頭のコメント文を参照してください。
TOPPERS/JSPカーネルに標準で付属するWindows上で動作するシミュレータでもタスクの状態を検証する事が出来ると思いますが、今回のBishopエミュレータによる実行も併用すれば、実機によるデバッグをさらに軽減することが出来ると思います。
関連リンク
Bishopエミュレータ正式版リリース
組込みLinux開発用CPUボードBishopエミュレータの正式版をリリースしました。
ドキュメント
ダウンロード
| Bishopエミュレータ | |||
| qemu-bishop-0.9.1-pylone1.tar.bz2 ソースコード | 0.9.1-pylone1 | ダウンロード | 2.3MB |
| qemu-bishop-0.9.1-pylone1-setup.exe win32 installer | 0.9.1-pylone1 | ダウンロード | 1.7MB |
| qemu-bishop_0.9.1-pylone1-1_i386.deb deb | 0.9.1-pylone1-1 | ダウンロード | 461.0KB |
| qemu-bishop-0.9.1_pylone1-1.i386.rpm rpm | 0.9.1-pylone1-1 | ダウンロード | 462.8KB |
関連記事
BishopエミュレータBeta4リリース
正式版を公開しました - 記事: Bishopエミュレータ正式版リリース
組込みLinux開発用CPUボードBishopエミュレータBeta4を公開します。
更新履歴
- 2008/9/26: 初版公開
Beta3からの変更点
ボード画像/LED状態表示のサポート
Bishopの実機では、GPIOポートに対して出力を行うことで、基板上でLED5/LED4/LED8/LED7とラベルされたLEDを制御することができます。
QEMUウィンドウ内にLCDの内容だけでなく、これらのLED状態も表示されるようにしました。起動初期段階のデバッグ等に利用できます。
リリース内容
本エミュレータは、オープンソースのプロセッサエミュレータ QEMUの開発版をベースに、Bishop向けの機能を追加したものです。 本リリースでは Beta3 と比較してエミュレーション可能な機能自体に変更はありません。
各種ペリフェラルのサポート状況
| ペリフェラル | 状況 | 注 | |
|---|---|---|---|
| NOR | △ | ROMとして表現され、NORとしてのコマンドには応答しません。 | |
| NAND | ○ | ||
| LCD | ○ | ||
| RTC | ○ | ||
| シリアルポート | ○ | ||
| イーサネット | ○ | ||
| GPIO | LED | ○ | PE-201QにはLEDが存在しないため、201A,201Bエミュレーション時のみ表示されます。 |
| USB(OHCI) | マスストレージ | △ | 高負荷時に不安定になる場合があります。 |
| キーボード | △ | ホストのキーボードが英語配列でない環境では、一部のキーが正しく解釈されません。 | |
| マウス | ○ | ||
| サウンド | △ | 再生のみです。 | |
| タッチスクリーン | ○ | ||
| SD/MMC | ○ | ||
| カメラ | × | ||
コンパイル手順
本バージョンでは、ソースコード (qemu-bishop-0.9.1-pylone0rc4.tar.bz2) のみを公開しています。以下の手順でコンパイルすることができます。
必要なもの
- gcc-3.4 (4.x では動作しません)
- zlib
- SDL 1.2
手順
$ ./configure --target-list=arm-softmmu --enable-alsa $ make
実行
まず、以下のイメージファイルをダウンロードします。画像データ以外のファイルは、従来バージョンで使用していたものがあればそのまま使用できます。
- U-Boot
- Linuxカーネル
- initrd
- ファイルシステム (NAND)
- NOR上スプラッシュ画像領域イメージ
- PE-201Aエミュレーション画像データ
- PE-201Bエミュレーション画像データ
- LED状態表示画像データ
イメージファイルが置かれたディレクトリでqemuを
$ qemu-system-arm -M pe201a -serial stdio -kernel dummy -usbdevice keyboard -mtdblock nand-bishop.img
$ qemu-system-arm -M pe201b -serial stdio -kernel dummy -usbdevice keyboard -mtdblock nand-bishop.img
のように起動してください。
-M オプションに指定された値(pe201a または pe201b) に従って、QEMUウィンドウ内にLCDの内容だけでなく、ボード画像/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すべてを消灯/点灯するには以下のようにします。
# mw.l 56000014 1e0 # mw.l 56000014 000
なお、QEMU上では 1e0 に代わりに ffff などの値を書いても同様の結果が得られますが、実機では 0x1E0 以外の値を設定すると他デバイスの動作に干渉してしまいます。
関連記事
BishopエミュレータBeta3リリース
正式版を公開しました - 記事: Bishopエミュレータ正式版リリース
組込みLinux開発用CPUボードBishopエミュレータBeta3を公開します。
更新履歴
- 2008/5/23: 初版公開
Beta2からの変更点
オーディオサポート
再生のみですが、オーディオに対応しました。
SD/MMCサポート
SD/MMCに対応しました。 -sd オプションで指定したディスクイメージファイルをSDカードとして扱うことができます。 ディスクイメージの作成方法は「ディスクイメージのホスト側での操作方法」を参照してください。
バイナリパッケージ
debianパッケージ、RPM、Windows インストーラを用意しました。
リリース内容
本エミュレータは、オープンソースのプロセッサエミュレータ QEMUの開発版をベースに、Bishop向けの機能を追加したものです。 Beta1 や Beta2 と比較してエミュレーションの精度が向上していますが、まだ実機に存在する全ての周辺機器を正しくエミュレートできるわけではありません。
各種ペリフェラルのサポート状況
| ペリフェラル | 状況 | 注 | |
|---|---|---|---|
| NOR | △ | ROMとして表現され、NORとしてのコマンドには応答しません。 | |
| NAND | ○ | ||
| LCD | ○ | ||
| RTC | ○ | ||
| シリアルポート | ○ | ||
| イーサネット | ○ | ||
| GPIO | LED | △ | 状態の設定は可能ですが、表示はおこなわれません。 |
| USB(OHCI) | マスストレージ | △ | 高負荷時に不安定になる場合があります。 |
| キーボード | △ | ホストのキーボードが英語配列でない環境では、一部のキーが正しく解釈されません。 | |
| マウス | ○ | ||
| サウンド | △ | 再生のみです。 | |
| タッチスクリーン | ○ | ||
| SD/MMC | ○ | ||
| カメラ | × | ||
インストール
Debian
/etc/apt/sources.list に以下の apt-line を加えます。
deb http://downloads.pylone.jp/tools/deb ./
入手可能なパッケージの一覧を更新します。
# aptitude update
qemu-bishop パッケージをインストールします。
# aptitude install qemu-bishop
Fedora
/etc/yum.repos.d/pylone-jp.repo に yum レポジトリを追加します。
[tools] name=Tools baseurl=http://downloads.pylone.jp/tools/rpm/ enabled=1 gpgcheck=0
リポジトリ情報を更新します。
# yum update
qemu-bishopパッケージをインストールします。
# yum install qemu-bishop
Windows
インストーラ (qemu-bishop-0.9.1-pylone0rc3-setup.exe) をダウンロードして実行してください。
実行
Linux
まず、以下のイメージファイルをダウンロードします。
イメージファイルが置かれたディレクトリでqemu-bishopコマンドを
$ qemu-bishop -M pe201b -serial stdio -kernel dummy -usbdevice keyboard -mtdblock nand-bishop.img
として起動してください。
- U-Bootがメモリに読みこまれて起動
- U-BootがLinuxカーネルを読みこみ
- LinuxカーネルがNANDのファイルシステムイメージをマウント
の順で実行されます。
-M オプションには、従来の pe201a と pe201b に加えて pe201q を指定することができます。
Windows
「スタート」 → 「すべてのプログラム」 → 「qemu-bishop」
コンパイル手順
ソースコード (qemu-bishop-0.9.1-pylone0rc3.tar.bz2) からビルドする場合の手順です。
必要なもの
- gcc-3.4 (4.x では動作しません)
- zlib
- SDL 1.2
手順
$ ./configure --target-list=arm-softmmu --enable-alsa $ make

![[広告] 組込みLinux開発用CPUボード SBC6000X](/i/sbc6000x-ad.jpg)