Edited at

athrill(アスリル) を使用して TOPPERS OS(ASP3) をデバッグ


概要

PC上で組込み系プログラムをデバッグしたいと思っている方に向けて、1つのソリューションをご紹介します。本ソリューションを使用してデバッグできるプログラムは以下のものです。


  • ベアメタル・プログラム

  • 組込み制御系 OS(TOPPERS OS, AUTOSAR OS 等)

  • OS上で動作するリアルタイムなアプリケーション

今回は、TOPPERS OS(ASP3)をデバッグします。


athrill(アスリル)

ここでご紹介するソリューション (CPU エミュレータ) は athrill(アスリル) というものです。

athrillは、athrill開発プロジェクトで公開されているオープンソースですので、誰でも使用可能です。

第7回TOPPERS活用アイデア・アプリケーション開発コンテスト 活用アイディア部門の受賞作品

athrillの特徴を以下にまとめます(2018/03時点)。


  • 仮想化範囲

項目
詳細

CPU
V850

割り込みコントローラ
多重割り込み可能

周辺デバイス
CAN、タイマ、シリアル、A/D変換器等

マルチノード対応
エミュレータ間でCAN通信可能


  • 支援機能

項目
詳細

対話型CUI機能
CUIでCPUエミュレータをコントロールできる

デバッグ機能
gdbライクにデバッグできる

割り込み機能
任意のタイミングで任意の割り込み発生できる

命令ログ機能
命令実行ログがログファイルとして保存できる

プロファイル機能
性能解析用に関数単位での命令数を計測できる


  • ソース

項目
詳細

ソース
OSS

ライセンス
TOPPERSライセンス


動作環境

項目
詳細

OS
MinGW(Windows10, 7)), Linux(Ubuntu(32bit, 64bit))

ソースデバッグ用エディタ
Windows(サクラエディタ), Linux(Visual Studio Code)


ダウンロード方法

GitHub上で公開されいてるathrill開発プロジェクトをダウンロードしてください。


インストール方法


  • Windows

step
概要
詳細

1
環境変数登録
環境変数Pathに以下を追加する
[1] [athrill root folder]/bin/windows
[2] サクラエディタバイナリ配置フォルダパス

2
MinGW起動
MinGWのターミナルを起動する

3
インストール確認
MinGWのターミナル上で athrillを空打ちする


  • Linux

step
概要
詳細

1
ターミナル起動
任意のターミナルを起動する

2
環境変数登録
export PATH=[athrill root folder]/bin/linux:$PATH

3

Visual Studio Code のインストール
$ dpkg -i code_1.21.1-1521038898_i386.deb

4
インストール確認
ターミナル上で athrillを空打ちする

athrillを空打ちして、以下のメッセージが出力されていれば、インストール成功です。

Usage:athrill -m<memory config file> [OPTION]... <load_file>

-c : set core num. if -c is not set, core num = 2.
-i : execute on the interaction mode. if -i is not set, execute on the background mode.
-r : execute on the remote mode. this option is valid on the interaction mode.
-t<timeout> : set program end time using <timeout> clocks. this option is valid on the background mode.
-m<memory config file> : set athrill memory configuration. rom, ram region is configured on your system.
-d<device config file> : set device parameter.


事前準備

デバッグ対象となるプログラムは、事前にv850のクロスコンパイラでビルドされている必要があります。v850のクロスコンパイラは、このサイトからダウンロードできます。

athrillプロジェクトでは、すでにビルド済みのTOPPERS OS(ASP3)のサンプルプログラムを用意していますので、そのバイナリを使用して、athrillの使用方法をお見せします。

サンプル・バイナリの配置場所は、

 "athrill/sample/os/asp3/OBJ/asp"

です。


デモ

今回のデモは、Ubuntu(32bit)環境で、Visual Studio COde を使用します。

$ uname -a

 4.13.0-38-generic #43-Ubuntu SMP Wed Mar 14 15:23:42 UTC 2018 i686 i686 i686 GNU/Linux

$ cat /etc/lsb-release

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=17.10
DISTRIB_CODENAME=artful
DISTRIB_DESCRIPTION="Ubuntu 17.10"

step
デバッグ内容

0
Visual Studio Codeを起動する

1
athrillを起動する

2
asp3を実行する

3
TASK1の特定ポイント(sample1.c 150行目)にブレークポイント設定

4
割り込み番号 36 の割り込みを発生させる

5
命令ログを参照し、TASK1のブレークポイントから割り込みが発生し、もとのTASK1の処理に戻っていることを確認する


Visual Studio Code 起動

以下のコマンドで Visual Studio Code を起動します。

 $ code

Visual Studio Code 起動後、athrill プロジェクトのトップフォルダをワークスペースフォルダとして追加してください。athrill でデバッグする場合、ターミナルは右側に配置しておくと便利です。

ターミナル上でカレントディレクトリを asp3 のフォルダに移動してください。

 $ cd sample/os/asp3/OBJ


athrill 起動

athrill に asp バイナリファイル(ELF形式)を渡して起動します。

 $ athrill -i -m memory.txt -d device_config.txt asp

athrillが起動すると、ELFファイルのローディングメッセージが出力され、プログラムカウンタのアドレス 0x0 番地に停止し、コマンド入力待ちとなります。

※オプション説明

※ -i :インタラクションモード(デバッグするためのオプション)

※ -d :デバイスコンフィグファイル(athrill のカスタマイズ情報を指定する)


asp3 実行

athrill のコマンド上で、continue コマンド(c)を実行すると、asp3の起動メッセージが出力され、TASK1 のメッセージが連続出力されていることがわかります。


ブレークポイント設定

ブレークポイントは、「関数名」、「ファイル名と行番号のセット」、「アドレス番地」のいずれかで設定できます。今回は、TASK1 の特定ポイント(sample1.c 150行目)に設定し、continueすると、設定したポイントでブレーク発生していることがわかります。

[DBG>b sample1.c 150

break 0x916

さらに、「lコマンド」を実行すると、Visual Studio Codeの左側のエディタに、該当ファイル/行を指し示してくれます。

※「lコマンド」を実行するとフォーカスを奪われますので、Visual Studio Code のキーボード・ショートカットで

※「前のターミナルフォーカス」に「Ctrl+L」を割り当てると便利です。


割り込み発生

割り込み発生コマンド(i コマンド)を使用すると、任意の割り込みを発生させることができるます。今回は、36 番の割り込みを発生させ、ステップ実行(n コマンド)します。

[DBG>i 36

[DBG>n
[DONE> core0 pc=0x95c task(+ec) 0x95c: B cond(0x1):0x94c
[NEXT> pc=0x2c0 kernel_cfg_asm.S 415

0x94c 番地の命令実行後、プログラムカウンタが 0x2c0 番地に移動していることがわかります。0x2c0 番地は 36 番の割り込み発生時のアドレス番地であり,割り込み発生したことになります。割り込み発生してから、プログラムカウンタが TASK1 に戻るまでの命令の流れを記録するため、v コマンドでロギングしてみます。

[DBG>v

VIEW_MODE=ON


命令ログ確認

命令ログは athrill 起動フォルダ直下に log.txt としてテキスト出力されます。エクスプローラから log.txt をクリックし、内容を確認すると、v コマンド実行からのログ情報が大量に生成されていることがわかります(1 行 1 命令)。

1行目のログ情報は、TASK1 の命令実行ポイントであり,その直後に 36 番地の割り込み発生し,割り込み処理が実行されていることがわかります。最終行を確認すると、割り込み復帰命令(RETI)実行後、無事、TASK1 の命令アドレス(0x94c)に戻っていることが確認できました!


関連記事