ObjectSquare

[Linux と組込み]


1. まくら  -なぜ組込みで Linux ?-

組込みシステムの OS として、Linux を使おう、という話が、日本でもまじめに語られるようになりました。 Linux 使いの私としては嬉しい限りです。(遠い目。。。) 今までは、組込みシステム用のOSとしては、商用 RTOS か 自作 ITRON が多く採用されていました。 それらの OS があるのに、Linux を使おうという話がでる 理由は、以下のようなものだと思います。

linux の長所 linux の短所

逆に、Linux の弱点としては、そのリアルタイム性だと思われます。 Linux は普通の UNIX を意識して作られているので、設計上特にリアルタイム性を 追求してはいません。

しかし、その点についても、リアルタイム性を追求した改良版のLinux というものも出てきています。 すぐに仕事に使えるとは限りませんが、今後の発展が楽しみです。

メモリサイズやオブジェクトコードのサイズは、実はそれほど本質的な問題ではありません。 それは、Linux はモジュールとして機能ブロックを追加・削除できるからです。 リアルタイムシステム、組込みシステムに適応する場合の問題は、適切な粒度のモジュール化が 出来ているか/簡単にできるか、ということです。

こういった話は、既にいろいろな雑誌に載っているので、 興味のある方はそちらをお読みになってください。

この記事では、まだ日本語になっていないネタを中心に話をしていきたいと思います。

参考文献:

Interface 1999 February 「特集 技術者のための PC UNIX 活用ノウハウ」
Interface 1999 November 「特集 リアルタイムOS としてのLinux活用法」


INDEX


2. eCos のはなし

さて、皆さんは eCos という RTOS をご存知でしょうか? 一般のひとには Cygwin で有名な(?) Cygnus が作った オープンソース、ロイヤリティフリーな RTOS です。

私は別に Cygnus さんとは何の関係もありません(^^;
個人的に Cygwin のツールを使っているし、Cygnus は好きな会社ではありますが。(^^)

さらに余談。
Cygnus が Redhat に買収されたのはなんとなく寂しい。 Redhat も別にキライではないけれど、Cygnusの 「小粒でもぴりりと辛い」感じが好きでした。。。

※ ご存知無い方のために補足すると、 gccベースに機能拡張したコンパイラの egcs を開発していたのは Cygnus のエンジニア。今では egcs は gcc と統合されたので Cygnus がgcc を開発している事になります。

参考文献:

Interface January p54 「オープンソース、ロイヤリティフリーのRTOS eCos」
Interface April p177「eCos の概要」

eCos の詳細は参考文献や URL を見ていただくとして。 なぜここで eCos をとりあげるのか、というと 「商用 RTOS vs Linux」で 「Linux の長所」 に相当する ことが結構 eCos に当てはまるからです。

いわく

などなど。さらに、こちらは最初から RTOS として設計されているので

といった利点があると思います。Linux でもモジュール機能があるので、 チューニング次第で、かなり footprint を小さくできるようですが、 eCos のほうが小さいシステムには向いているように思います。

逆に、ちょっと大きなシステム(ファイルシステムやネットワークが必要)の場合は、 RTOS に機能モジュールをどんどん追加することになり、Linux に近づいていくように思います。

結局のところ、両者(Linux と eCos)の使い分けは

といったことになるのかな、と思っています。

OS をそのように使い分けるとしても、アプリケーションを作る立場としては、 アプリケーションを OS に依存しないようにつくれないものか? と考えてしまいます。そこで、Elix の話です。


INDEX


3. Elix のはなし

Elix とは何か?

Elix とは、

組込み用のアプリケーションの OS 間での互換性を保つため、API を標準化しましょう
という話です。

アプリケーションは、OS のシステムコールの代わりに Elix の API のみを使うことによって、 OS の違いを意識する必要がありません。 各 OS 用の Elix ライブラリがその違いを吸収してくれる、というわけです。

では、その API を見てみましょう。

API は前述の URL から Web ブラウザでもみれますし、 PDF またはPS ファイルをダウンロードする事も出来ます。

レベル1:
RTOS 互換層。ここで定義される機能は、Linux と典型的な RTOS (eCos, RTEMS, VxWorks, PSOS etc.) のどちらでも使用可能。 いくつかの機能は、限定されたり、意味を変更されたりする。
レベル2:
Linux single process only。RTOS に移植するのが難しいようなLinux の機能。 また、レベル1 で限定された機能のフル実装。
レベル3:
組込み向け Linux マルチプロセスアプリケーション用。 POSIX.1 をベースに、組込みシステムに不要と思える機能を除いたもの。(ジョブコントロールなど)
レベル4:
POSIX のフル実装。EL/IX の一部ではない。

レベルは、その機能の多さによって決められています。 このへんの感覚は java の profile と同じですね。 互換性とスケーラビリティの両方を考慮すると、こういった解になるのでしょう。

もともと Linux はモジュールの機能を持っているので機能によるレベル分けは問題ありません。 素の linux ではモジュールの機能がおおざっぱすぎるとは思いますが、 仕掛けが既にあるので、好みの大きさのモジュールに作り直すのはそれほど大変な事ではないとおもいます。

などとわかったような事を書きましたが、私が実際にやったわけではないので、ほんとのところはわかりません(^^; 最近ではいくつかある組込み用の linux などは、そこら編の「モジュール」の粒度、使いやすさ、 といったところが、distributer の腕の見せ所になるのではないかと思っています。

参考 URL

Lineo 社が作った組込み用 Linux
Transmeta 社が作ったモバイル用 Linux

むしろ気になるのは、Linux では考慮していなかった RealTime 性です。 OS固有のシステムコールを直に呼ぶ場合と、Elix のライブラリを使う場合では、 後者のほうが冗長な分だけ RealTime 性が犠牲になると思われます。 それが許されるアプリケーションならば、互換性を考慮して Elix を使ったほうがよいでしょうし、 許されないとすれば選択の余地無く OS のシステムコールを直呼びすることになるのでしょう。

と、こんなことを考えていると、Cygnus じゃなかった RedHat から 次のような発表があったようです。

RedHat,組込みLinuxアプリ開発環境「RHTED」発表


INDEX


4. RHTED(RedHat Tools Embedded Developpers)のはなし

RedHat,組込みLinuxアプリ開発環境「RHTED」発表 の記事を読んでみても、RHTED がどんなものなのか、私にはよくわかりませんでした。

Linux 用の IDE ってことだけど、CodeFusion とどこが違うの?

Cygnus はもともと Linux 用の IDE として CodeFusion という製品を売っています。 それと何処が違うのか?という疑問です。

「組込みデバイス用のLinuxアプリケーションを開発できる」ということなので、 Elix ライブラリが使えるところが違うのではないかと推測しています。

が、それだけではまだ謎が残ります。

各CPU用のシミュレータがつくのか?

「Intelの32ビットチップやPowerPCチップに対応した」アプリケーションが作れるとあります。 CPU の違いをOS が吸収し、OS の違いを Elix で吸収させるのではなかったのか?という疑問です。

直接の答えではありませんが、思い当たる節があります。 eCos です。eCos は各 CPU ごとシミュレータが Linux 上で動作します。 実際のターゲットボードにダウンロードするよりかなりラクです。

とゆーことで、eCos の技術を RHTED に取り込んだのではないか、という推測が成り立ちます。

RHTED = CodeFusion + Elix ライブラリ + CPU シミュレータ

この推測を確かめるべく、ネット上を何時間もさまよいました。。。 (ここでいろんなサイトを探し回って英語と格闘している姿を思い浮かべてください)

。。。情報がありません。前述の ZDNet(の英語版)だけです。 RedHat 本家の下に何かあるはず!と探し回ったのですが 見つかりませんでした。

それじゃあ別の手で、とゆうことで Cygnus じゃなかった RedHat (え、しつこいって(^^; )のサポートの方に聞いてみました。

RHTED(Red Hat Tools for Embedded Developers)は、現在、 ネイティブアプリケーションの開発者向けに出荷しており、 数々の賞を受賞している統合開発環境Code Fusionを、 組込みシステムの開発のために規定されたEL/IX APIが使用出来るよう改良したものです。

このAPIは4つのレベルを持ち、例えば、レベル1のAPIのみを使用して開発されたアプリケーションは、 ソースコードを変更することなく携帯電話のような非常に小さな組込みシステムからネットワークサーバーのような大きなシステムまで、 ほとんどすべてのターゲット上で動作します。

また、オペレーティングシステムも携帯電話ではeCosなどの組込みシステム用RTOSを使用し、 サーバーではLinuxなどのOSを使用するというように用途に合わせて選択出来ます。

さらに、ターゲットも、eCosでサポートしているすべてのプロセッサ、 組込みLinuxではx86とPowerPC860というように自由に選択出来ます。

つまり、EL/IX APIを使用して開発されたアプリケーションは、 EL/IXに対応したOSの種類×そのOSに対応しているターゲットの種類で表される種類のプラットフォーム上で動作するということです。 これは、今までプラットフォーム毎にソースコードの変更を余儀なくされていた組込みシステムの開発者にとって画期的なソリューションと言えるでしょう。

by 中村@日本シグナス さん

とゆうことだそうです。

とりあえずものが出てくるの楽しみにしています。


INDEX


5. あんか

本当はもっといろいろ書きたい事があるのですが、今回は時間切れとなってしまいました。

本文中でも触れましたが、組込み用の Linux としてはいろんな製品が出てきているようです。 主なもののリストアップとその概略、特徴などを調べたかったのですが、間に合いませんでした。

中でも Mobile Linux は Crusoe という画期的な CPU で動くのでとっても注目しています。

# ああ、Crusoe についてももっと書くつもりだったのに。。。

あと、Java との絡みや、JTRON との関係などもおもしろいと思っています。

これらの話題については、別の機会に書きたいと思います。

# 編集長様にボツにされなければ。。
# 仕事がハマッてしまわなければ。。。。

それでは皆様、 Happy programming !

© 2000 OGIS-RI Co., Ltd.


INDEX