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

オープンソースのプロセッサエミュレータ QEMU をベースにした SBC6000X エミュレータのマニュアルです。

1. はじめに

SBC6000X 用の Linux Kernel が動作する程度です。

完全にデバイスをエミュレートするものではありません。

また、QEMU の機能である仮想マシンのスナップショットの保存、復帰に対応していません。

なお、サポートする外部ストレージは NFS のみです(バージョン 0.15.1-pylone1 現在)。

2. 動作確認 ホスト OS

  • Debian GNU/Linux 6.0 Squeeze (x86)
  • Ubuntu 11.10 (x86)

尚、ライブラリとして、

  • glib
  • zlib
  • SDL

が必要になります。

3. 動作確認 ゲストソフトウェア

  • SBC6000X 用 Linux 環境 (20111024 リリース版)

4. ライブラリのインストール

QEMU をビルドするためのライブラリ(開発版パッケージ)をインストールします。既にインストール済みの場合は不要です。

# apt-get install libglib2.0-dev
# apt-get install zlib1g-dev
# apt-get install libsdl1.2-dev

5. ソースコードのダウンロード

エミュレータのソースコードをダウンロードします。

$ mkdir ~/qemu-sbc6000x
$ cd ~/qemu-sbc6000x
$ wget http://downloads.pylone.jp/sbc6000x/src/qemu-sbc6000x-0.15.1-pylone1.tar.bz2

6. ビルド

ダウンロードしたソースコードをビルドします。

$ cd ~/qemu-sbc6000x
$ tar xf qemu-sbc6000x-0.15.1-pylone1.tar.bz2 
$ cd qemu-sbc6000x-0.15.1-pylone1
$ ./configure --target-list=arm-softmmu
$ make

生成されるバイナリファイル名は qemu-system-arm で 標準のQEMUと同じであるため、make install を行なう場合はご注意ください

7. ゲスト環境の準備

Buildroot を用いたビルドと同様の手順で構築します。 (既に実機用に構築済みの場合は同じもので構いません)

以降、SBC6000X 用 Buildroot のディレクトリを ~/buildroot-sbc6000x とします。

8. NFS ルートファイルシステムの準備

NFSルートファイルシステム環境の構築と同様の手順で構築します。

さらに、/etc/exportfs に以下の行を追加し、exportfs コマンド等によって設定内容を反映します。

/opt/sbc6000x    127.0.0.1(rw,sync,subtree_check,no_root_squash,insecure)

9. 起動

エミュレータを起動する端末を開き、以下のコマンドを実行します。

$ cd ~/qemu-sbc6000x/qemu-sbc6000x-0.15.1-pylone1
$ ./arm-softmmu/qemu-system-arm \
      -M sbc6000x \
      -m 256 \
      -serial telnet:localhost:1200,server \
      -kernel ~/buildroot-sbc6000x/output/images/uImage \
      -append "console=ttyS0 root=/dev/nfs rw nfsroot=10.0.2.2:/opt/sbc6000x ip=dhcp"

この時エミュレータは、シリアルコンソールの出力先である、ポート 1200 番を使用した Telnet接続を待ち受けます。

従って、エミュレータを起動した端末とは別の端末を開き、以下のコマンドを実行します。

$ telnet localhost 1200

Telnet 接続が成功すれば、エミュレータの起動が再開されます。(ポート 1200 番を既に使用している場合は、別の空いているポートを使用してください)

起動後、Buildroot へのログイン可能なユーザーは "root"、または "default"(一般ユーザ) です(何れもパスワードはありません)。

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

-Mマシンの指定 (sbc6000x)
-mSDRAM の容量指定 (MiB単位)
-kernel起動する Kernel の uImage の指定
-serialシリアルポートの出力先を指定。上記では ポート 1200 による Telnet 接続
-appendカーネルパラメータの追加

-serial オプションは stdio も指定することが可能ですが、ゲスト Linux 上の shell に対する Ctrl-C などのシグナルを QEMU が受け取ってしまうためとても不便です。

10. 終了

終了するには、QEMU ウィンドウを閉じるか、起動した端末上で Ctrl-C を発行して QEMU を終了してください。

11. 問題点

起動中、まれに、

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

というタイミングで起動が停止してしまいますが、終了して再度、起動してみてください。

12. ネットワーク

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

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

エミュレータ上の /etc/resolv.conf を以下のように設定すれば、実ネットワークを参照することが可能になります。

nameserver    10.0.2.3

ただし、ping においては、10.0.2.2 以外からの応答はありません。

cc