組込み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カーネルの動作が最低限確認出来るものとして、
のみとしました。
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エミュレータによる実行も併用すれば、実機によるデバッグをさらに軽減することが出来ると思います。
組込み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エミュレータ正式版リリース
組込みLinux開発用CPUボードBishopエミュレータBeta4を公開します。
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) のみを公開しています。以下の手順でコンパイルすることができます。
$ ./configure --target-list=arm-softmmu --enable-alsa $ make
まず、以下のイメージファイルをダウンロードします。画像データ以外のファイルは、従来バージョンで使用していたものがあればそのまま使用できます。
イメージファイルが置かれたディレクトリで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エミュレータ正式版リリース
組込みLinux開発用CPUボードBishopエミュレータBeta3を公開します。
再生のみですが、オーディオに対応しました。
SD/MMCに対応しました。 -sd オプションで指定したディスクイメージファイルをSDカードとして扱うことができます。 ディスクイメージの作成方法は「ディスクイメージのホスト側での操作方法」を参照してください。
debianパッケージ、RPM、Windows インストーラを用意しました。
本エミュレータは、オープンソースのプロセッサエミュレータ QEMUの開発版をベースに、Bishop向けの機能を追加したものです。 Beta1 や Beta2 と比較してエミュレーションの精度が向上していますが、まだ実機に存在する全ての周辺機器を正しくエミュレートできるわけではありません。
| ペリフェラル | 状況 | 注 | |
|---|---|---|---|
| NOR | △ | ROMとして表現され、NORとしてのコマンドには応答しません。 | |
| NAND | ○ | ||
| LCD | ○ | ||
| RTC | ○ | ||
| シリアルポート | ○ | ||
| イーサネット | ○ | ||
| GPIO | LED | △ | 状態の設定は可能ですが、表示はおこなわれません。 |
| USB(OHCI) | マスストレージ | △ | 高負荷時に不安定になる場合があります。 |
| キーボード | △ | ホストのキーボードが英語配列でない環境では、一部のキーが正しく解釈されません。 | |
| マウス | ○ | ||
| サウンド | △ | 再生のみです。 | |
| タッチスクリーン | ○ | ||
| SD/MMC | ○ | ||
| カメラ | × | ||
/etc/apt/sources.list に以下の apt-line を加えます。
deb http://downloads.pylone.jp/tools/deb ./
入手可能なパッケージの一覧を更新します。
# aptitude update
qemu-bishop パッケージをインストールします。
# aptitude install qemu-bishop
/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
インストーラ (qemu-bishop-0.9.1-pylone0rc3-setup.exe) をダウンロードして実行してください。
まず、以下のイメージファイルをダウンロードします。
イメージファイルが置かれたディレクトリでqemu-bishopコマンドを
$ qemu-bishop -M pe201b -serial stdio -kernel dummy -usbdevice keyboard -mtdblock nand-bishop.img
として起動してください。
の順で実行されます。
-M オプションには、従来の pe201a と pe201b に加えて pe201q を指定することができます。
「スタート」 → 「すべてのプログラム」 → 「qemu-bishop」
ソースコード (qemu-bishop-0.9.1-pylone0rc3.tar.bz2) からビルドする場合の手順です。
$ ./configure --target-list=arm-softmmu --enable-alsa $ make
正式版を公開しました - 記事: Bishopエミュレータ正式版リリース
組込みLinux開発用CPUボードBishopのエミュレータのBeta2版を公開します。
エミュレートする環境として提供される仮想ターゲットPE-201Qを追加しました。実機より大きな画面(640x1024)および豊富なNOR領域(128MBytes)が利用可能となるので、開発環境としての利便性が向上します。
エミュレータウィンドウ上のポインタ操作を、タッチスクリーンへの入力として変換するようにしました。PE-201A/Bとしてエミュレーションを行う場合、タッチスクリーンはキャリブレーション済の状態で起動します。PE-201Qでは変換係数の初期値に意図的にある程度の誤差を残してあります。キャリブレータの動作確認にはPE-201Qを使用してください。
QEMU起動時に-appendオプションが付加された場合に、U-Bootの環境変数"bootargs"へ反映するようにしました。この環境変数はLinuxカーネルの起動時の引数として渡されます。
-append を指定しないか、空("")とした場合、bootargsの内容は
bootargs=console=ttySAC0,115200 console=tty0 preinit=/pylone root=/dev/mtdblock5 nfsroot=10.0.2.2:/ROOTFS/ ip=10.0.2.15::10.0.2.2:255.255.255.0:::
となります。この場合、特に操作しなければルートファイルシステムとしてNANDが使用されます。
-appendに"xxx=yyy"のような値を指定した場合、bootargsの内容の後半が書き換えられて
bootargs=console=ttySAC0,115200 console=tty0 preinit=/pylone xxx=yyy
となります(この例のままでは"root="が指定されなくなるため、起動に失敗します)。
-append "root=/dev/nfs nfsroot=xx.xx.xx.xx:/XXXXX ip=10.0.2.15::10.0.2.2:255.255.255.0:::"
のように有効な"root="と付加情報を設定すれば、指定に従って起動します(この例の場合は nfs サーバxx.xx.xx.xx の /XXXXX をルートとして)。
QEMU がエミュレーションのために使用するコード変換バッファ領域のサイズを増やしました。エミュレータ上で複雑な処理をおこなわせた場合の速度低下が軽減されています。
QEMUのメモリ消費量がBeta1と比較して増加しているため、十分なメモリを確保しての使用をお勧めします。
今回のリリースでは、ソースコードのみ提供します。以下のリンク先から取得してください:
今後
も準備する予定です。
本エミュレータは、オープンソースのプロセッサエミュレータQEMUの開発版をベースに、Bishop向けの機能を追加したものです。Beta2ではBata1に比較してエミュレーションの精度が向上していますが、まだ実機に存在する全ての周辺機器を正しくエミュレートできるわけではありません。
| ペリフェラル | 状況 | 注 | |
|---|---|---|---|
| NOR | △ | ROMとして表現され、NORとしてのコマンドには応答しません。 | |
| NAND | ○ | ||
| LCD | ○ | ||
| RTC | ○ | ||
| シリアルポート | ○ | ||
| イーサネット | ○ | ||
| GPIO | LED | △ | 状態の設定は可能ですが、表示はおこなわれません。 |
| USB(OHCI) | マスストレージ | △ | 高負荷時に不安定になる場合があります。 |
| キーボード | △ | ホストのキーボードが英語配列でない環境では、一部のキーが正しく解釈されません。 | |
| マウス | ○ | ||
| サウンド | × | ||
| タッチスクリーン | ○ | ||
| MMC | × | ||
| カメラ | × | ||
Debian環境では、 # apt-get build-dep qemu を実行することで、必要なパッケージを一括してインストールすることもできます。
ソースコードを展開したディレクトリ内で以下の手順を行うことで、実行可能ファイル ./arm-softmmu/qemu-system-arm が生成されます。
Bishopエミュレータに実機出荷状態と同様の動作をさせるためには、
を与える必要があります。それぞれのファイルをリンク先からダウンロードし、ソースコードのトップディレクトリに置いた状態で
$ ./arm-softmmu/qemu-system-arm -M pe201b -serial stdio -kernel dummy -usbdevice keyboard -mtdblock nand-bishop.img
として起動してください。
の順で実行されます。
オプション”-M”には、従来の"pe-201a"と"pe-201b"に加えて"pe-201q"を指定することができます。
カーネルイメージを最新のBishop向けカーネルに差し替えると、起動時にタッチスクリーンからルートファイルシステムを選択することができます。
QEMUなどのシステムエミュレータでは、エミュレートされるシステムに対して仮想的なデバイスを見せることができます。 ハードディスクなどの記憶装置を模擬する場合、ディスクイメージをファイルとして作成して使うことが多いでしょう。
今回は、このディスクイメージを仮想環境の外側で作成/操作する手段について紹介します。
作業環境としてはLinuxを想定しています。
希望の構成のディスクイメージを、ホスト環境で作成する手順を説明します。
まず希望のデバイスサイズのファイルを用意します。
サイズさえ十分ならどのようにしても構いませんが、ddで作ることをおすすめします。例えば 512 MBytes のものを作りたいなら
$ dd if=/dev/zero of=FILENAME bs=1 count=1 seek=536870911
とするとよいでしょう。(seek= の値は、512 MBytes = 524288 KBytes = 536870912 Byte なので、536870912-1 を指定しています)
素朴に /dev/zero からコピーして
$ dd if=/dev/zero of=FILENAME bs=1M count=512
としてもよいのですが、近代的な(ファイルにholeが作れる)ファイルシステムで作業しているならseek させた方が終了が早く、実ディスク消費も抑えられます。
エミュレーションされる環境を実際の環境に近付けるために、ディスクイメージ上にはパーティションが作成されている状態を用意できると便利です。そこで、ループバックデバイスを用いてファイルをブロックデバイスとして見せ、fdisk などの対象に取れるようにする方法について説明します。
パーティションを作成する必要がないなら、ディスクイメージに対してmkfsを実行すれば十分なので、この節の内容は不要です。
まず、losetupを用いてファイルをループバックデバイスに結びつけます。この操作にはroot権限が必要です。
# losetup /dev/loop0 FILENAME
losetupに成功すると、/dev/loop0がFILENAMEを内容とするブロックデバイスとして振る舞うようになります。
何らかの理由でloop0が使用中の場合は、適宜loop1などに読みかえてください。
ループバックデバイスに対してfdiskを実行します。後の作業で各パーティションの開始セクタ番号が必要になるので、-uオプションを付けておきます。
# fdisk -u /dev/loop0 Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xaf87fef0. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
パーティションを作成します。この例では一つだけ作ります。
Command (m for help): n First sector (63-1048575, default 63): Using default value 63 Last sector or +size or +sizeM or +sizeK (63-1048575, default 1048575): Using default value 1048575
パーティションを作成したら、状態を確認します。
Command (m for help): p
Disk /dev/loop0: 536 MB, 536870912 bytes
255 heads, 63 sectors/track, 65 cylinders, total 1048576 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0xaf87fef0
Device Boot Start End Blocks Id System
/dev/loop0p1 63 1048575 524256+ 83 Linux
Partition 1 does not end on cylinder boundary.表示される値のうち、「Units」の値(ここでは 512 bytes)と「Start」の値(ここでは63)を覚えておきます。
作成結果に問題なければ変更をイメージに書き戻して終了します。
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks. Command (m for help): q
使いおわったらループバックデバイスを開放します。
# losetup -d /dev/loop0
ここまでの作業でディスクイメージにパーティションを作成できましたが、まだ個々のパーティションにはファイルシステムが書かれていません。個別のパーティションに対してmkfsを実行するための手順を説明します。
mkfsの対象とするためには、(ディスクイメージ全体ではなく)対象となるパーティションの部分を取り出す必要があります。
losetupの-oオプションを使用することで、ファイルの途中からをループバックデバイスに結びつけます。
先ほどの例では 開始位置が 63、Unit が 512 bytes だったので、パーティション#1のオフセットとして63*512=32256バイトを設定します。
# losetup -o 32256 /dev/loop0 FILENAME
losetupに成功したら、好みのファイルシステムを作成できます。
# mkfs.ext2 /dev/loop0
使いおわったらループバックデバイスを開放します。
# losetup -d /dev/loop0
既にファイルシステムが作られているイメージ(上記の手順で作成したものや、仮想環境で使っていたrawイメージなど)を扱う場合、mountの"loop"オプションを使用することで、イメージ内部のパーティションを直接ホスト環境にマウントすることができます。
この例の場合、loopのoffsetに開始位置(32256)を指定する:
# mount -o loop,offset=32256 FILENAME /mnt/
と、/mnt経由で先ほど作成したパーティションの内容を操作することができるようになります。
作業が終わったら通常のmountと同じように
# umount /mnt/
します。
正式版を公開しました - 記事: Bishopエミュレータ正式版リリース
Bishopエミュレータのベータ版を公開しました。
パイロンでは組込みLinux開発用CPUボードBishopのエミュレータを開発しています。主要な構成要素についてエミュレーションの実装が終了したので、Beta1として公開します。
今回のリリースでは、ソースコードとWindows向けインストーラの形式で提供します。以下のリンク先から取得してください:
今後
についても準備していく予定です。
本エミュレータは、オープンソースのプロセッサエミュレータQEMUの開発版をベースに、Bishop向けの機能を追加したものです。Bata1の段階では、まだ実機に存在する全ての周辺機器を正しくエミュレートできるわけではありません。
| ペリフェラル | 状況 | 注 | |
|---|---|---|---|
| NOR | △ | ROMとして表現され、NORとしてのコマンドには応答しません。 | |
| NAND | ○ | ||
| LCD | ○ | ||
| RTC | ○ | ||
| シリアルポート | ○ | ||
| イーサネット | ○ | ||
| GPIO | LED | △ | 状態の設定は可能ですが、表示はおこなわれません。 |
| USB(OHCI) | マスストレージ | △ | 高負荷時に不安定になる場合があります。 |
| キーボード | △ | ホストのキーボードが英語配列でない環境では、一部のキーが正しく解釈されません。 | |
| マウス | ○ | ||
| サウンド | × | ||
| タッチスクリーン | × | ||
| MMC | × | ||
| カメラ | × | ||
※Debian環境では、 # apt-get build-dep qemu を実行することで、必要なパッケージを一括してインストールすることもできます。
ソースコードを展開したディレクトリ内で以下の手順を行うことで、実行可能ファイル ./arm-softmmu/qemu-system-arm が生成されます。
Bishopエミュレータに実機出荷状態と同様の動作をさせるためには、
を与える必要があります。それぞれのファイルをリンク先からダウンロードし、ソースコードのトップディレクトリに置いた状態で
$ ./arm-softmmu/qemu-system-arm -M pe201b -serial stdio -kernel dummy -usbdevice keyboard -mtdblock nand-bishop.img
として起動してください。
の順で実行されて、最終的にログインプロンプトが表示されます。
このスクリーンショットは現在パイロンで開発中のBishopエミュレータです。オープンソースのプロセッサエミュレータQEMUをベースにしています。ちょっと試しにやってみるかという軽い動機で始めたのですが、作業が進み QEMU への理解が深まるにつれて組込みソフトウェア開発ツールとしての可能性を感じるようになりました。まだ具体的な活用をご提案できるまでには至っていませんが、何か役にたつ使い方があれば紹介していきたいと考えています。