TOPPERS/JSP カーネル for Bishop マニュアル

Bishop向けTOPPERS/JSPカーネルを使用するための手順です。

TOPPERS/JSPカーネルとは、μITRON4.0仕様に準拠したリアルタイムカーネルで、TOPPERSプロジェクトの開発成果です。 TOPPERS/JSPカーネルの詳細についてはTOPPERSプロジェクトを参照してください。

株式会社パイロンが独自に配布する非公式なバージョンです。本ソフトウェアについてTOPPERSプロジェクトへの質問はお控えください。

TOPPRES/JSPカーネルのサポートは実験的なものです。実用レベルに達していないことを予めご了承ください。

1. ROMイメージ

Bishop向けTOPPERS/JSPカーネルのROMイメージファイルを下記の場所からダウンロードします。

TOPPERS/JSP カーネル for Bishop
toppers-jsp-bishop-1.4.3-pylone0.bin
ROMバイナリ
1.4.3-pylone0ダウンロード28.0KB

2. Bishopボードでの使用方法

Bishop ドキュメントの、

を参考に、ダウンロードしたROMイメージファイルをNOR上の開始アドレス0番地に書き込みます。

本手順によって、元のROMイメージの内容は書き換えられてしまう点にご注意ください。

書き込みが終了したらBishop本体とHostPCをシリアルケーブル(クロス)で接続し、Bishop本体の電源を入れます。TOPPERS/JSPカーネルのシリアルポートの設定は以下の通りです。

ハードウェアフロー制御Off
ソフトウェアフロー制御Off
ボーレート115200
データビット8
パリティなし
ストップビット1

HostPC側のシリアルコンソールへの設定方法等はBishopドキュメント:クイックスタートを参照してください。

3. Bishopエミュレータでの使用方法

Bishopエミュレータがインストールされている環境を前提とします。

3.1. Linux

qemu-bishopでは起動したディレクトリにあるu-boot.binというファイルをエミュレーションするアドレス空間の0番地に読み込み、起動します。Bishop向けTOPPERS/JSPカーネルは開始アドレス0番地に設置する必要があるため、ROMイメージファイルを任意のディレクトリにダウンロードした後、下記の様にしてファイルをリネームします。(x.x.xはダウンロードしたファイル名に合わせてください)

$ mv toppers-jsp-bishop-x.x.x.bin u-boot.bin

既に本来のu-boot.binが存在する場合は消去されてしまいますので必要に応じてバックアップしてください。

ダウンロードした任意のディレクトリにて、以下のコマンドでqemu-bishopを実行します。

$ qemu-bishop -M pe201a -serial stdio -kernel dummy -mtdblock /dev/null -nographic

この時、

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カーネルの動作に影響はありません。

3.2. Windows

C:/Program Files/qemu-bishop/にROMイメージファイルをu-boot.binという名称でダウンロードし、スタート > すべてのプログラム > qemu-bishop > qemu-bishop (PE-201A) から実行します。

必要に応じて元のu-boot.binをバックアップしてください。

3.3. オプション

Linux環境においてqemu-bishopに指定したオプションを以下に解説します。下記以外のオプションに関してはBishop エミュレータマニュアル:主なオプションを参照してください。

-nographic
グラフィカルディスプレイ出力エミュレーションを無効にし、コマンドラインアプリケーションとしてQEMUを起動します。

4. ビルド方法

4.1. クロス開発ツールのインストール

クロス開発ツールのインストール (Debian編, Fedora編) を参照してください。

4.2. ソースコードの入手

Bishop向けTOPPERS/JSPカーネルのソースコードを下記の場所からダウンロードします。

TOPPERS/JSP カーネル for Bishop
toppers-jsp-bishop-1.4.3-pylone0.tar.bz2
ソースコード
1.4.3-pylone0ダウンロード996.4KB

4.3. ソースコードの展開

ソースコードを適当な作業ディレクトリに展開します。

$ tar xjvf toppers-jsp-bishop-0.0.1.tar.bz2

展開したディレクトリに移動します。

$ cd toppers-jsp-bishop-0.0.1

4.4. ビルド

Bishop用にビルドします。

$ cd cfg
$ make depend
$ make CC=g++-4.2
$ cd -
$ perl ./configure -C armv4 -S bishop
$ make depend TARGET_PREFIX=arm-linux-gnu-
$ make TARGET_PREFIX=arm-linux-gnu-

現時点(2009/02/24)では、カーネルコンフィギュレータ(cfg)はgcc-4.3系ではコンパイルできません。

ビルド完了後、jspというファイル名でELFバイナリが生成されるので、必要に応じて、

$ arm-linux-gnu-objcopy -O binary jsp toppers-jsp-bishop.bin

としてRAWバイナリへと変換します。

5. qemu-bishopとgdbによるデバッグ

gdbからqemu-bishop上のTOPPERS/JSPカーネルをデバッグする方法に関して記載します。 手順としては、Bishop エミュレータマニュアル:gdbによるデバッグとほぼ同一です。

ここでは、Bishop向けTOPPERS/JSPカーネルのソースコードディレクトリパスを~/toppers-jsp-bishop、qemu-bishop起動ディレクトリを~/bishop-romとします。

まず、デバッグ対象バージョンのソースコードを前述のビルド手順にてビルドしELFバイナリを生成します。(デバッグ情報を付加するコンパイルオプションは予めMakefileにて設定しています)

次に、生成されたELFバイナリからRAWバイナリをqemu-bishop起動ディレクトリに取得します。

$ cd ~/toppers-jsp-bishop
$ arm-linux-gnu-objcopy -O binary jsp ~/bishop-rom/u-boot.bin

-s,-Sオプション付きでqemu-bishopを起動します。

$ cd ~/bishop-rom
$ qemu-bishop -M pe201a -serial stdio -kernel dummy -mtdblock /dev/null -nographic -s -S

最後に、ビルドしたTOPPERS/JSPカーネルのソースディレクトリでgdbを起動し、qemu-bishopに接続します。

$ cd ~/toppers-jsp-bishop
$ arm-linux-gnu-gdb jsp
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"...
No symbol table is loaded.  Use the "file" command.
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
0x00000000 in vector_table ()

例として システム依存初期化関数である_kernel_sys_initialize()にブレークポイントを設定し、実行してみます。

(gdb) break _kernel_sys_initialize
Breakpoint 1 at 0x2bac: file ./config/armv4/bishop/sys_config.c, line 130.
(gdb) continue
Continuing.

Breakpoint 1, _kernel_sys_initialize () at ./config/armv4/bishop/sys_config.c:130
130 {
(gdb) list
125 /*
126  *  ターゲットシステム依存の初期化
127  */
128 void
129 sys_initialize(void)
130 {
131     init_clock();
132
133     init_ports();
134
(gdb)

ブレークしているsys_initialize()の本名は_kernel_sys_initialize()です。jsp_rename.hにてシンボル名を置き換えています。

cc