GAIO CLUB

2004年01月04日

LinuxをWindowsホストでフルシミュレーション「ソニックシミュレータ」いよいよ登場

GAIO CLUB 特集
GAIO CLUB【2004/1月号】
LinuxをWindowsホストでフルシミュレーション「ソニックシミュレータ」いよいよ登場!
桁違いの実行性能を魅せつける高速動作シミュレータ
実機テストでは見つからない”潜在バグ”を絞り出します

実機テストでは見つからないバグ

年々、組み込み機器のソフトウエアは大規模化、複雑化しており、従来と同じ短い開発期間で、基準を満たす品質の組み込みソフトウエアを開発することは難しくなっています。

組み込み製品における不具合の原因の多くは、製品に実装されている機能量や複雑さに比べて、検証にかける時間の不足や、検証手法そのものにあると言われています。

組み込みソフトウエアの不具合の多くは、例外的な条件下におけるシステムの動作や、例外処理に対する動作などで起こることが多いと言われています。しかしながら、多くの皆様のデバッグ工程では、実際の製品試作機を操作して、ソフトウエアバグを見つける手法が取られており、実機を用いたテストでは、例外的な条件を発生させることが困難であるため、結局、十分なテストができないまま市場にリリースされることも少なくありません。

組み込みシステム検証用シミュレータへの期待

ガイオでは、このような例外条件を容易にシステムに再現できる手法として、「マイコンシミュレータ」を推進して参りました。シミュレータは、組み込みシステムの全てをソフトウエアで動作させるものであり、マイコン動作はもちろんのこと、周辺デバイスの動作も、「仮想デバイス」と呼ばれるソフトウエアで動作させます。

このため、周辺デバイスのマスタークロックをストップさせる、マイコンだけでなく、全てのデバイスをステップ実行するなど、現実には不可能な「時間のコントロール」が自由に行えます。周辺デバイスに例外的な条件、振る舞いをプログラムしておけば、実機では滅多に起こらない例外的な動作も容易に再現して、検証できることになります。

また、テストパターンをデータ化しておけば、開発している組み込みソフトが更新されるたびに、自動的にテストを行うような環境も、PC1台だけで構築可能です。 実機では発見できなかったバグを「絞り出す」手段として、シミュレータは大いに期待されています。

組み込みLinuxシステムに必要な実行性能

一般的な組み込みマイコンシミュレータは、ISS(インストラクション・セット・シミュレータ)を実行エンジンにしています。このISSは、クロスコンパイルされた実際のマイコンの命令コードを1ステップずつシミュレーション実行するもので、パイプライン、キャッシュ、メモリモデルなど、高精度にシミュレーションするエンジンを構築することも可能です。

しかしながら、ISSは、マイコン命令コードを1命令ずつ解釈しながら実行するインタプリタ方式であるため、「実行性能」は最速のPC(Pentium4 2.4GHz)を用いた場合でも、約3MIPSに留まります。これは数MHzのRISCマイコンと同じ性能であるため、このエンジンで組み込みLinuxのような大規模なシステムを動作、検証することは現実的ではありません。組み込みLinuxに対応したISSには、現在の1桁以上の実行性能が必要とされています。

ISSをコード変換技術で高速化

「ソニックシミュレータ」は、コード変換技術を用いて、ISS実行時のパフォーマンスを劇的に向上させたマイコンシミュレータです。

シミュレーション実行前に、組み込みマイコンの命令コードをWindowsホストにネイティブなPentiumコードに変換することで、実行性能を従来のISSの10倍以上に高めています。基本的にはISSの構造であるため、インストラクション単位のステップ実行や、完全なソースコードデバッグが可能です。

組み込みLinuxシステムのフルシミュレーション

ソニックシミュレータでは、Linuxカーネル及びドライバ、ファイルシステムのイメージ等を全てをロードすることにより、Linux全体のシミュレーションがを行える実行性能を持っています。例えば、ドライバの設計、動作検証にソニックシミュレータを利用する場合、上位のアプリケーションからシステムコールを発行して、ドライバを動作させる事が出来るため、ドライバ単体での検証でなく、システム一連の動作を考慮した検証が、実機が完成する前の段階で、行えることになります。

ログインプロンプトまでわずか5秒の高速動作

下の図は、「ソニックシミュレータ」を起動して、ログインプロンプトが表示されるまでのターミナルログの様子と、システム構成の概略を示しています。

シミュレータカーネルは、別途作成したサブプロセスを介して、動作しているPCのシリアルポート(COMポート)にアクセスします。このシリアルポートに、Windows上で動作するターミナルソフトを接続して、Linuxのコンソールとして利用しています。
ファイルシステムは、ファイルイメージがオブジェクトとしてリンクされており、起動時にカーネルと共にメモリへロードされます。カーネルの初期化処理で、このメモリ領域をファイルシステムとして認識するようになっています。

人気のコラム

最新のコラム