RTOSと先進のClangコンパイラを一体化した開発プラットフォーム

開発準備から性能解析までをシンプルに変える
オープンソース ITRONTOPPERS

最新のLLVM /Clang コンパイラ

アドレスサニタイザのデバッグ支援機能

Visual Studioベースの統合開発環境

http://www.kmckk.co.jp/SOLID/LLVM/Clangの可能性にゾクゾクしたSOLIDという新しいプラットフォーム。
"SOLID開発の中心的メンバーに、SOLIDの意図や目的、今後の進化について聞いた"

SOLID 担当エンジニア

佐藤 大介
はじまりはLLVM*した。そして実装の点では、例えばテスト機能のアドレスサニタイザ**のようなエージェントを、予め動いている状態で開発者が使えるよう初めてLLVM/Clangを知ったのはいつですか？に、ツールとOSを一体化したプラットフォームを丸ごと提供すること入社1,2年目の2008年頃、イリノイ大学の中でオープンソースソフトにしました。開発者はツールのデバッグ支援機能の使い方を習得するウエアであるLLVMが研究されていて、日本のオタクの間でも盛り上のではなく、使いたい機能を選ぶだけ。あとはツールが自動的に組みがっていました。当時LLVMに関してLife Long Optimization（いつ込んだデバッグ支援機能が、プログラム実行中に不具合箇所をどんでも最適化できる）という凄い目標の論文が出ていたのでそれに大変ど ん教えてくれる。困る前にツールがミスを教えてくれる、そんな興味を持ち、カンファレンス等に参加するようになりました。LLVMのクールな仕掛けを作り込むことができました。

活動に注目していたところ、レポジトリの開発者メールアドレスがいつの間にか＠apple.comに変わっていて、「 あ〜、この人Apple社に社内で反対意見などはありませんでしたか？

入ったんだなぁ」と思っていたら、LLVMがiOSの開発環境として採用

LLVM/Clangに注目し始めたころから、社内では「面白そうだから、されたんです。Clangプロジェクトがオープンソース化されたのはよ〜く見張っておけ」という雰囲気はずっとありました。オープンソー

2007年ですが、Clangの名前が知れ渡って急激に広まってきたのはスであるLLVM の機能を、当社のデバッガに組み込んだ実績もありそのころ、2010年頃からじゃないかと思います。

ます。SOLID-IDEとしてVisual Studioを導入するときも、今までの当社のデバッガの「顔」と大分違うので、ベテランの（笑）開発者からはLLVM/Clangのどこが凄いと思ったのでしょうか？

とっつきにくいという反応もありましたが、それも使いやすさを体験

きれいにモジュール化されて作られているオープンソースなので、各々し て い る う ち に 皆 推 進 派 に 変 わ っ て い き ま し た 。そ れ に V i s u a lの機能をブラッシュアップしやすいし、新しい機能追加が比較的容易にStudioはゲーム業界のプログラマーの間ではデファクトになってできるところです。僕らの得意分野であるテスト支援機能やデバッグいたという背景も後押ししたと思います。イケてるIDEだな、と。

支援機能の強化等も、自分たちでできますからね。またオープンソースのコミュニティに主要な企業が参加している点でも、更なる進化が期待できると思います。ちなみにARMの64bit版コンパイラは、ARM社の人たちが最初から参加してLLVM/Clang版が開発されました。

CPU性能、メモリ容量のボーナスを品質向上に活用するアドレスサニタイザのようなデバッグ支援機能を使うと、ユーザープロ開発者の悩み、ツールベンダーの覚悟グラム以外のコードが走ったり、メモリを余計に消費しますが、それにLLVM/Clangのポテンシャルの高さは開発者に恩恵をもたらすことがそこは、あまり問題にならなくなってきていると思います。実際にCPUできますか？の動作周波数は日々高速化していますし、使えるメモリ容量も大きい。

今お話しした機能拡張に対する自由度の高いLLVM/Clangを実際に目標性能に対する余裕があるなら、その余裕を品質向上や、日程通りにソフトウエア開発者が利用する場合、現実には「ふたつの壁」が存在し開発するという最も重要な課題に使うべきではないでしょうか。

対する懸念はありませんか？

ます。ひとつは、開発者は限られた時間、限られたリソースで早く確実に製品をリリースしなければいけないので、使い慣れた実績のあるSOLIDは進化し続けるのですね？

ツ ー ル を 変 え る リ ス ク を と り づ ら い こ と で す 。ふ た つ め は 、はい、まだ計画中の開発支援機能がたくさんありますので、楽しみにしLLVM/Clangの持つ解析機能を使いこなすには、開発者自身がツールていてください。もちろん、開発者の方々から「こんな機能はできないの仕組みを理解したうえでプログラムに解析機能を有効にするためののか？」というご要望をいただければ、ツールベンダーとして知恵をコードを埋め込まないといけないところです。開発者が本来目的とし絞って実現していきたいと思います。ている機能以外のコードを書く手間をかけられるか、というとそれはLLVM/Clangを選んだのは、そんな将来性が楽しみだからなんです。

難しい。

まあ、最近はコミュニティが活発過ぎて、メーリングリストとか追っかけるのが大変になってきてるんですけどね（笑）

ツールベンダーとして開発環境をよくするために、コードを埋め込むという課題にも取り組んだのですね？
はい、やはり僕らはツールのプロですから、僕らが責任もってコードを埋め込む。そこに一歩踏み込む覚悟で臨まなければいけないと思いま* LLVM： Low Level Virtual Machine** アドレスサニタイザ： アドレスエラーを検出する、ユーザーコードに組み込まれたライブラリ（文中の社名、製品名は各社の商標です）

RTOSと先進のClangコンパイラを一体化した開発プラットフォーム

SOLID-OS

SOLID-IDE

LLVM/Clang
コンパイラ

デバッガ

RTOSと先進のClangコンパイラを一体化した開発プラットフォーム
ソフトウェアプラットフォームSOLIDは、ARM®プロセッサで動作するリアルタイムOSであるSOLID-OSと、Windows®
パソコン上で動作する統合開発環境SOLID-IDEから構成されます。

SOLID-OS
オープンソースITRON仕様のTOPPERS/ASP3カーネルを基盤とし、独自にメモリ管理機能やローディング機能の対応などを強化しています。

SOLID-IDE
SOLIDソフトウェア開発プラットフォーム
連携

SOLID-IDE
・ IDE（Visual Studioベース）

SOLID-OS・ RTOS（TOPPERS/ASP3）

・ Clangコンパイラ・ 開発支援機構（ローダー等）

・ デバッガ、OSモニタ・ ミドルウェア（TCP/IP）

Visual Studioをベースに開発した統合開発環境で、エディタやビルダーそしてデバッガを含んでいます。SOLID-IDEには実績が豊富なKMC製GCCコンパイラ（exeGCC）の他、新規にLLVM/Clangコンパイラを採用しています。

LLVM/Clangコンパイラ
ARM コンパイラ6でも採用されている、先進的なオープンソースソフトウエアであるLLVM/Clangコンパイラを採用しました。

デバッガ
Windows PC

ARM Device

SOLID-IDE に統合された専用デバッガで、通常のソースデバッグやSOLID 専用のデバッグ機能が使えます。
デバッグ接続は、PARTNER-Jet2が使える他、ユーザーシステムにカスタマイズしたオンラインモニタも利用可能になっています。

一体化することでツールは劇的に「かしこく」「スマート」になる
IDEとRTOSの一体化で便利になること
SOLIDプラットフォームでは、SOLID-OSにデバッグ支援用として組み込んだランタイム（エージェントファームエア）を、SOLID-IDEが持つ充実した解析機能と連携させています。このようにIDEとRTOSを一体化することにより、例えばiOSアプリ
ケーションで使われているXcode開発環境のアドレスサニタ
イザ機能を実現しています。

MMUをRTOSで有効に使う
SOLIDプラットフォームのターゲットはARM Cortex-Aデバ
イスです。SOLIDプラットフォームではMMU対応のベアメ
タルローダーを新規開発、ローダーがELFのヘッダを参照し、仮想・物理アドレスのMMUマップを判断し物理空間に効率的にロードします。

SOLID-IDE

エディタ

Cortex-A対応のMMU

静的解析

Clang
コンパイラ

IDEのローダー

IDEデバッガ
プロファイラアドレス
サニタイザ

モジュール単位のダウンロード

動的性能解析

検出ランタイム
ライブラリ

ELFローダーデバッグ・
解析ランタイム

SOLID-OS +ユーザアプリケーション

TCP/IPなど

enjoy Development エンジニアのためにSOLIDの開発ツールは、エンジニアの方々の開発のしやすさ、を目標に設計しています。そして、開発のしやすさが、エンジニアの方々の開発の楽しさにつながるよう、SOLIDは enjoy
Development のコンセプトを実現できるようデザインしております。
ぜひこの新しい開発スタイルを体験してください。

組み込みシステムの準備段階からプログ ラミング・デバッグまで、開発者の快適さを追求した、新しいプラットフォームです。
OS・カーネル設定

コンパクトで実績の高いTOPPERSカーネル● 名古屋大学を中心としたTOPPERS プロジェクトで開発されたオープンソースITRONであるTOPPERS/ASP3をSOLID-OSに採用しました。
● 組み込み機器として実績のあるμITRON 4.0仕様に準拠しています。
● ASP3のティックレス仕様により実行効率・電力効率が良くなります。
● カーネル本体、プロセッサ依存部、代表的なボードのBSPを提供します。
● ロイヤリティフリーです。

ミドルウエア設定

ミドルウエアの実装は、ツールにお任せ● TCP/IP, Fileシステム、スクリプトエンジン等のミドルウエアを提供。

センサ・メカ制御に強いRTOSであるTOPPERSを採用し、TCP/IP標準添付でネットワークアクセスも可能● パートナー企業製のミドルウエアの実装・連携。

作る準備コーディング

Visual StudioベースのIDEで軽やかにコンパイル

LLVM/Clangコンパイラの解析機能を使い倒す● SOLID-IDEの操作画面はユーザーインタフェースに定評のあるMicrosoft社のVisual Studioをベースに京都マイクロコンピュータが独自開発したロイヤリティフリーのIDE（統合開発環境）を採用しました。

● SOLIDプラットフォームでは、静的解析ツール、動的解析ツール機能を豊富に備えたLLVM/Clangコンパイラを採用しました。

● コンパイルからデバッグまで、全てWindows上で作業できるので、ソ ー ス コ ー ド 全 体 を 見 渡 す こ と が で き 、「ビルド＞転送＞実行＞デバッグ」、の手順がシンプルに行えます。

● ビルド時に静的解析ツールとしてClangを使用することにより、「未初期化変数の利用」「メモリリーク（解放もれ）パスの検出」などが検出可能です。

● Intellisense機能を備えたコード補完型のエディタで、快適なタイピング環境を提供します。

Visual Studio ベースで作成されている、SOLID-IDE

動画で詳しく見る
エディット時のインテリセンス機能● Clangコンパイラは、オプションや言語仕様拡張など、GCCコンパイラとの互換性が高い仕様です。

● Clangコンパイラで検出したエラーを、IDE上で分かりやすく表示します。

コンパイル時の静的解
析で、malloc() で確保した領域を開放しない実行経路を検出した例

組み込みシステムの準備段階からプログ ラミング・デバッグまで、開発者の快適さを追求した、新しいプラットフォームです。
組 み 込 み 初 登 場 ！

アドレスサニタイザ

アドレスサニタイザは、LLVM/Clang コンパイラのデバッグ・テスト支援機能の一つで、メモリ破壊やリークなどを実行時に検出する動的解析機能です。
使い方は簡単。
アドレスサニタイザモードでビルドして実行するだけです。
自分で考えてブレークポイントを設定するなど必要ありません。
SOLID-IDE とSOLID-OSが連携して、間違ったメモリアクセスを自動的にあぶり出してくれます。

バグ付きのソースコード
不正アクセスをしたプログラム行を強調表示（黄色反転部分）

static unsigned short bugarray[10];10個の配列サイズを越えた書き込
みが、i=10の時に発生する

void root_task(intptr_t exinf){
inti, x = 0;ER
ercd;
charbuf[10];// スタック範囲外アクセスコード
for (i = 0; i <= 10; i++) {buf[i] = i;}// .bss 範囲外アクセスコード
for (i = 0; i < 11; i++) {bugarray[i] = 0x1111*i;}

サニタイザによる検出でブレークが発生し、IDEに問題のあるアクセスの詳細情報が表示されます。

不正アクセスした関数のローカル変数表示（ iが10になってる）/** タスクの起動*/
ercd = act_tsk(TASK1);

このようなメモリ破 壊 バ グは、破壊される領域によっては、特定条件でしか問題が発生せず、検出が 難しい場合がある。いわゆる隠れたバグ、になることがある。

ダウンロード不正アクセスについての詳細情報（PCやアクセスアドレス）
不正アクセスがあったメモリ領域を表示（ピンク網掛け部分）かしこいエージェント、ベアメタルローダー● OS非依存でMMU対応のベアメタルローダーは、ELFのヘッダを参照し、仮想・物理アドレスのMMUマップを判断するかしこいローディング機能をもっています。
● IDEとローダーが連携し、作成しなおしたモジュールだけを再ロードして実行できます。
● ブートアップ、メモリ初期化、ローディングについて、SOLID がフレームワークを提供します。

動作確認

シミュレーション・エミュレーション● 既存のシミュレータ（QEMU）、エミュレータ（PARTNER-Jet2）に加え、モニタデバッガをオプションで提供します。

動かす

動画で詳しく見るSOLIDは開発・検証を計画通りに進めるためのツールです。
上流工程で約 6 割

プロジェクト管理者の悩み
組込システムの不具合の約6割はソフトウエア設計・実装段階で作り込まれており、発見するのはその7割以上がデバッグ・テスト工程

企画・仕様

システム設計ソフトウエア設計

11.8%

15.8%

33.5%

企画・仕様

効率よい開発・検証には

6.6% 6.9%

どのようなツールがソフトウェア実装・デバッグ

システムテスト

ソフトウェアテスト5.0%
2.8%
3.7%

27.1%

作業手戻り ?

システム設計というのが実態です。

運用・実機テスト

原因工程比率ソフトウエア設計

12.1%

有効でしょうか？

25.8%

ソフトウェア実装・デバッグ

20.4%

ソフトウェアテスト

13.4%

システムテスト

発見工程比率15.0%

運用・実機テスト

下流工程で約 7.5 割
2012 年版組み込みソフトウェア産業実態把握調査報告書

SOLIDプラットフォームのメリット
SOLIDが解決

こんな悩みを・・・
最先端のOSSツールを採用したいけれど、社内で使用実績がないとツールを使いこなせるか不安。

操作性に定評のあるVisual Studioベースのユーザーインタフェースを採用しているので、ツール習得に時間がかかりません。

長いシンボル名や、類似のシンボル名をうっかりタイプミス、こういうミスはレビューでもなかなか見つからない。

OSやミドルウエアをツールと一体化してKMCが提供、技術サポートもするので安心です。
コード入力補完機能のあるかしこいエディタを採用、効率のよいタイピングができ、タイプミスも防ぎます。

コード修正しながらデバッグしているときは、ダウンロード時間が長いと開発者の集中が途切れてしまう。

スマートなローダーが、デバッグ中の機能モジュールだけを選択的に短時間でダウンロードします。

システムテストでは膨大な条件組み合わせを検証しなければいけないし、なにより開発委託先と検証条件をすり合わせるのに苦労する。

LLVM/Clangコンパイラの持つ豊富な静的・動的解析ツール機能を利用できるので、従来はシステムテストで稀にしか検出できないようなメモリリソース競合不具合などを、評価作業の初期段階で検出します。

実績豊富なJTAGエミュレータ● 各種ARMプロセッサ対応（64bit Cortex-A57 など対応済み）● USBバスパワー対応（Model 10）● プローブホットプラグ対応● マルチコアデバッグ、SMPデバッグ● ETM HSSTP（LVDSでの高速トレース対応）● 各種ロギングモード● QProbeによる動的性能解析● Linux、GCCコンパイラ、LLVM/Clangコンパイラ対応

京都マイクロコンピュータ株式会社
本社：〒610-1104 京都市西京区大枝中山町2-44

Tel.075-335-1050

東京オフィス：〒105-0004 東京都港区新橋2-14-4 Rビル5F Tel.03-5157-4530

http://www.kmckk.co.jp/

お問い合わせメールアドレス：jp-info@kmckk.co.jp
2017. 5