Help us understand the problem. What is going on with this article?

TOPPERS/ATK2カーネル向け実機レス環境(athrill2)

More than 1 year has passed since last update.

はじめに

本記事は,2018年TOPPERSコンテスト向けに提出した作品をqiita向けに再編集したものです(※).
(※)みごと,金賞いただきました!ありがとうございます.

なお,本記事の最後の節で,「TOPPERSコンテスト参加する意義について」まとめてみました.

概要

本サイトで,TOPPERS/ATK2カーネル向け実機レス環境を開発状況を広報しようと考えています.
現時点では,以下のAUTOSAR/OSスケーラビリティクラスに対応可能な実機レス環境に対応しています.

  • SC1(保護なし,シングルコア)
  • SC1-MC(保護なし,マルチコア)
  • SC3(メモリ保護あり,シングルコア)

上記の動作確認用に,サンプルプログラムをあわせて提供しています(※).
(※) SC1/SC1-MCはOS移植し,SC3はサンプル確認プログラムを作成しています.

AUTOSAR開発で実機レス環境を利用する際の課題

AUTOSAR普及が進む中,車載向け開発においても,机上で全体結合・動作確認できる実機レス環境は,問題の早期検出を可能にするだけでなく,ソフトウェア保守の視点(リグレッション確認)からもそのニーズは高いと思います.

一方で,実機レス環境の課題としては,以下が挙げられます.

既製の実機レス環境を利用する場合

開発資金・期間が潤沢にあれば,既製品を使用することで実機レス環境を使用する効果は十分に享受できますが,一般的に実機レス環境は高額になりえるため,少なくとも以下に示す課題があると思います.

No. 分類 課題
1 導入コスト 実機レス環境は高額(数百万~).
2 スケーラビリティ 既製の実機レス環境を利用する場合は,ライセンス制約により開発をスケールさせることができない可能性が高い.
3 サポート 環境面で未対応機能等がある場合は個別サポートが必要となる.

OSSの実機レス環境を利用する場合

代わって,OSS環境の場合はライセンス制約もなく,自社固有の機能改修等が可能となりますが,以下に示す課題が残ります.

No. 分類 課題
1 導入コスト OSS環境の場合は,マニュアル等が整備されていない場合もあり,ソース/ビルド/使用方法の理解に時間がかかる可能性がある.
2 車載向けCPUアーキ 既存のOSS・実機レス環境としてQEMU/Skyeye等あるが車載向けCPUであるV850/RH850は未対応である.
3 AUTOSAR/OSスケーラビリティクラス AUTOSAR/OSスケーラビリティクラスはSC1~SC4と幅広くあり,すべてのクラスに対応した実機レス環境は存在していない(athrillはSC1までしか対応しきれていない).

提案内容

2017年に提案させて頂いた車載向けOSS・実機レス環境であるathrillは,AUTOSAR向けの環境としては不十分です.よって,TOPPERS/ATK2カーネル向け実機レス環境として,先述の課題に対してathrillをバージョンアップしたathrill2を新たに提案します.

以下,athrillの課題に対して対応した内容です.

1. オープンソース導入コストの問題

まずは,athrill機能マニュアルを整備しました.

2. 車載向けCPUアーキ未対応問題

athrill CPUのバージョンをアップしました(v850e1 ⇒ v850e2v3).

本バージョンアップによるathrill2のCPU命令実装率は以下の通りです(未サポート命令は下図を参照).

CPUアーキ 命令数 実装数 実装率
V850(v850e2v3) 132 127 96.2%
RH850(v850e3v5) 146 127 87.0%

※()内のバージョン表記は, gccのターゲット・プロセッサオプション(-m)で指定するものです

RH850(v850e3v5)は上位互換を保証していますから,v850e2v3の命令実装率を上げることで,RH850の命令実装率も必然的に上がり,athrill2のCPU命令はRH850に極めて近くなります.

3. AUTOSAR/OSスケーラビリティクラス

v850e2/mn4のハードウェア仕様をベースにして,athrillのコア数拡張(2コア),メモリ保護機能を追加しました.本対応でサポート可能となるスケーラビリティクラスは以下の通りです(詳細は次章を参照).

  • SC1(保護なし,シングルコア)
  • SC1-MC(保護なし,マルチコア(2コア))
  • SC3(メモリ保護あり,シングルコア)

athrill2の未サポート命令は以下の通りです.

命令フォーマット V850(v850e2v3) RH850(v850e3v5)
1 SYNCE, SYNCM, SYNCP SYNCI, DBTRAP
2 CALLT
7 LOOP, Bcond, ROTL, LDL.W, STC.W
9 BINS
10 CTRET SNOOZE
11 PUSHSP, POPSP, JARL
14 LD.DW, ST.DW

athrill2のAUTOSAR/OSスケーラビリティクラス適応

先述の通り, v850e2/mn4のハードウェア仕様をベースにして,athrillのコア数拡張(2コア),メモリ保護機能を追加します.本対応により,athrill2が以下のAUTOSAR/OSスケーラビリティクラスに適応できるようにすることが今回の目標となります.

  • SC1(保護なし,シングルコア)
  • SC1-MC(保護なし,マルチコア(2コア))
  • SC3(メモリ保護あり,シングルコア)

上記目標に対して,今回提案するathrill2がどの程度AUTOSAR/OSスケーラビリティクラスに適応できたかを客観的に確認できるようにするため,TOPPERS/ATK2の公式サイトで公開されている「次世代車載システム向けRTOSハードウェア要求仕様書 Ver.3.0.1」を参照し,athrill2のハードウェア要求仕様準拠率を調査しました.

本調査の結果概要は下図のとおりで,最小要求(MR)はほぼ満たしていることがわかりました.

スケーラビリティクラス MR(最小要求) SR(標準要求) AR(性能改善要求)
SC2 100%(2/2) 50%(1/2) 0%(0/1)
SC3 100%(10/10) 50%(1/2) 0%(0/2)
SC1-MC 100%(5/5) 67%(6/9) 17%(1/6)
SC2-MC 80%(4/5) 9%(1/11) 14%(1/7)
SC3-MC 100%(6/6) 64%(7/11) 13%(1/8)

※()内の値は,「要求準拠数/要求数」です.

一方,SR(標準要求)/AR(性能改善要求)についての網羅度は低い結果となっています.これらの要因については,以下に見解を示しますが,今回目標とする機能範囲(SC1, SC1-MC(2コア), SC3)の実機レス環境を提供するという点では問題ではないと判断しています.

HW要素 要件レベル 要件番号 対応SC サポート対象 見解
タイマ MR HW023 SC2-MC × SC2は今回未サポート.athrill2のタイマ数拡張の技術的難易度は低い.
コア間排他制御機構 SR,AR HW005,HW008 SCx-MC × コア数が3以上の場合に必要となる要件.athrill2のコア数拡張の技術的難易度は低い.
メモリ SR,AR HW012,HW013,HW014 SCx-MC athrill2はローカルメモリ/プライベートメモリを仮想化対象としない方針としている.理由は,本機能をサポートしなくても性能的なデメリットは発生しないためである.
キャッシュ SR HW015 SCx-MC athrill2はキャッシュメモリを仮想化対象としない方針としている.理由は,本機能をサポートしなくても性能的なデメリットは発生しないためである.
タイマ SR HW024,HW026,HW027,HW028 SC2,SC2-MC × ノンマスカブル割り込みでのタイマ割り込み発生機構はSC2対応時に検討する予定.
MPU SR,AR HW039,HW040 SC3,SC3-MC × athrill2のメモリ保護機構をマルチコア向けに拡張する際に,保護領域設定機能拡張を実施する予定.
コアID AR HW010 SCx-MC マルチコアOS実装の性能改善要件であり,実機レス環境機能実現する上でMUST要求ではないと判断.
割り込み AR HW019 SCx-MC
MPU AR HW041 SC3,SC3-MC MPUのOS実装に対する性能改善要件であり,実機レス環境機能実現する上でMUST要求ではないと判断.

athrill2の動作環境およびインストール方法

athrill2の動作環境およびインストール方法はathrillと同じです.

項目 参照サイト
動作環境 https://qiita.com/kanetugu2018/items/1f2ef93c9e1fa7a29f97#%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83
事前準備 https://qiita.com/kanetugu2018/items/1f2ef93c9e1fa7a29f97#%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99
インストール方法 https://qiita.com/kanetugu2018/items/1f2ef93c9e1fa7a29f97#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95
インストール確認方法 athrill2を空打ちして以下のメッセージが出力されることを確認するathrill2.png

動作確認

athrill2がサポート対象とするスケーラビリティクラスの動作確認を行いました.

スケーラビリティクラス 動作確認内容
SC1 TOPPERS/ATK2-SC1をathrill2向けに移植し,サンプルプログラムの動作確認を行う.
SC1-MC TOPPERS/ATK2-SC1-MCをathrill2向けに移植し,サンプルプログラムの動作確認を行う.
SC3 SC3のハードウェア要件を満たしていることを確認できるサンプルプログラムを作成し,動作確認を行う※.

※TOPPERS/ATK2-SC3の移植は時間的な余力がなかったため,別の機会で行う予定です.お楽しみに.

SC1

SC1の動作確認内容を以下に示します.

項目 内容 確認結果
プログラム配置場所(github) https://github.com/tmori/athrill/tree/master/sample/os/atk2-sc1_1.4.2/OBJ
athrill2 CPU設定 100MHz
OSハードウェアカウンタ設定 10ms/clock
動作確認[1] atk2-sc1のカーネル起動 OK
動作確認[2] 周期アラームコールバック起動確認(500ms周期) OK
動作確認[3] アラーム実行をキャンセル OK
動作確認[4] タスク起動確認(Task3) OK

上記の動作確認結果詳細については,以下のサイトを参照ください.

https://qiita.com/kanetugu2018/items/d07dac56c4f57ce10f65

SC1-MC

SC1-MCの動作確認内容を以下に示します.

項目 内容 確認結果
プログラム配置場所(github) https://github.com/tmori/athrill/tree/master/sample/os/atk2-sc1-mc_1.4.2/OBJ
athrill2 CPU設定 100MHz
OSハードウェアカウンタ設定 10ms/clock
動作確認[1] atk2-sc1-mcのカーネル起動 OK
動作確認[2] 周期アラームコールバック起動確認(500ms周期) OK
動作確認[3] アラーム実行をキャンセル OK
動作確認[4] タスク起動確認(core0のTask1からcore1のTask9を起動) OK

上記の動作確認結果詳細については,以下のサイトを参照ください.

https://qiita.com/kanetugu2018/items/b43c5715124f42a0393d#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B

SC3

SC3の動作確認内容を以下に示します.

項目 内容 確認結果
プログラム配置場所(github) https://github.com/tmori/athrill/tree/master/sample/athrill2/mputest2
athrill2 CPU設定 100MHz
メモリ保護構成 カーネル領域:1個(コード/データ),ユーザ領域:2個(コード/データ),ユーザ共有領域:1個(データ)(領域割り当ておよびアクセス権設定詳細は,下図を参照)
動作確認[1] 非特権モード(USER1)で,自領域およびユーザ共有領域のみ読み書きおよび命令実行可能であることを確認する.カーネル領域および別ユーザ領域(USER2)の領域については,読み書き/命令実行を行うと,CPU例外が発生することを確認する. OK
動作確認[2] 非特権モード(USER2)で,自領域およびユーザ共有領域のみ読み書きおよび命令実行可能であることを確認する.カーネル領域および別ユーザ領域(USER1)の領域については,読み書き/命令実行を行うと,CPU例外が発生することを確認する. OK
動作確認[3] 特権モードで,全領域の読み書きおよび命令実行可能であることを確認する. OK

pict.png

上記の動作確認結果詳細については,以下のサイトを参照ください.

https://qiita.com/kanetugu2018/items/ea7069ac2b9530261f16

TOPPERSコンテスト参加する意義について

TOPPERSコンテストは昨年から応募させて頂いています.
今年で2回目です.昨年は運よく「金賞」を受賞させて頂きました.

コンテスト受賞してから,ほそぼそと外部発信を続けていたのですが,ここ最近,ほんとうに自分の環境や考え方が変わったなと思います.以下,ポイントをまとめておきますので,機会があればTOPPERSコンテスト参加されることをお勧めします.

  • 外部発信効果
    • 自分が応募した作品(athrill)をTOPPERSの名前の下で紹介できるようになりますから,
    • 個人活動ではなく,コミュニティ活動として認知してもらえます.
    • ⇒初めて聞く人への説得力が違います!
  • コミュニティ仲間
    • TOPPERSイベントにはときどき参加していましたが,
    • コンテスト受賞を契機につながりが一気に広がりました.
    • また,athrillつながりで,TOPPERS会員の方と話が盛り上がったりして,
    • とても楽しい時間をすごせるようになりました.
  • ストレス解消効果
    • 会社の中に閉じこもっていると,人間関係などで,いろいろとストレスがたまるものですが,
    • コミュニティ仲間の人たちとのつながりが増えて,別次元での見え方ができるようになり,
    • あまり会社の世界観だけにこだわらなくなりました.
  • アイディア
    • 自分の趣味の活動(athrill開発)を仕事だけでなく,コミュニティを絡めて考えるようになりました.
    • 結果として,考える幅がひろまったような気がします.
  • 気合がはいる
    • 純粋に,自分のアイディアを第三者に評価していただける良い場所になっています.
    • 今年も,「やったろかい!」と気合入れて応募しました.

最後に,TOPPERSコミュニティの方々には大変感謝しております.これからもよろしくお願いいたします.

関連記事

kanetugu2018
福井在住の組み込みエンジニアです。
https://github.com/tmori/athrill
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした