エンジニアコラム

組み込みOS考察   

エンジニア・コラム

江島 午郎 (えじま ごろう) さん [ コードギア株式会社 ]

第3回:プラットフォーム開発

Androidプラットフォーム(OS)の開発
Androidプラットフォーム開発とは、あるハードウェアをターゲットにして、Android OSを移植する作業のことです。AndroidはCPUコードの依存するLinuxカーネル部分と、CPUには依存しないJavaアプリケーションの組み合わせで出来ていることもあり、他のOSに比べるとCPU移植性は比較的高いと考えられます。とはいえ、実際に移植が試みられているのはARMv5コードとx86コードが殆どであり、このいずれかを(特にARMコードの方を)利用することが推奨されます。
Androidプラットフォームの開発は、その大半はLinuxカーネルとそこで動作するデバイスドライバの開発であると言えます。また、Linuxカーネルを起動するためのブートローダーの開発も必要になります。これらは自分で用意することも出来ますが、半導体メーカーなどのプラットフォームプロバイダが提供している、Android用に構成されテストされたぷらっっとフォームコード(同CPU)を採用することが手っ取り早いでしょう。LinuxカーネルはGPLライセンスであるため、必然的にAndroidのカーネル開発は必ずオープンソース開発となり、標準以外の特殊なドライバ機能を組み込む場合も多数の公開リソースが利用できるという利点があります。(反面、開発メーカーの開発資産流出や、セキュリティ面での懸念は一般に知られるところです。)
Android OSのビルド環境はx86ベースのLinuxとMac OS Xでサポートされています。これらのOSに開発環境をインストールしビルドすると、最終的にはブートローダーバイナリ、カーネルバイナリおよび、多数のOSファイルを含んだルートファイルシステムが生成されます。ところで、このルートファイルシステムを利用するために、Androidでは一定以上の容量のフラッシュファイルシステム(または組み込み用のSDメモリなど)が必ず必要になります。併せて、実行用のシステムメモリーとしてRAMの容量も最低128MBは必要になります。また、Androidバージョン(APIレベル)の互換性を保証する場合には、Androidバージョン別に定義されている必須の周辺デバイス要件を満たす必要があります。
組み込みシステム開発において、アプリケーションの流用性、互換性を高めることは重要なテーマですが、Androidバージョンの互換性を保証しない場合、既存のAndroidアプリケーションを利用でいないなどの支障が生じる可能性があります。


Androidのプラットフォーム開発環境を選択するための条件としては以下の要素があります。
- 32bitまたは64bitのLinux OS
- 使用するAndroidバージョンのカーネルがビルド可能であること
- 使用するAndroidバージョンのAndroid SDKが使用可能であること
- 使用する半導体チップ(SOC)用のデバイスドライバがビルド可能であること


Androidのプラットフォーム開発では、基本的に組み込みLinux開発環境に準じたものが使用されます。アプリケーション開発の場合と異なり、プラットフォーム開発ではGoogleのサポートする環境というのは存在しません。実際には、採用するSOCベンダーの推奨環境を参考にすることになります。
※ たとえばTI OMAPのFroYoバージョンのAndroid DevKitではUbuntu 8.04以降を推奨と書いてある。
http://processors.wiki.ti.com/index.php/TI-Android-FroYo-DevKit-V2.2_UserGuide#Software_Host_Requirements
Androidのバージョン番号が進むにつれ、ビルドに要するメモリ容量も増えてきています。現在では64bit Linuxを主ビルド環境として推奨してるカーネルバージョンも存在します。(2.xバージョンであれば32bit環境の方が扱いやすい。)また、メジャーなLinuxディストリビューションを使用する方が、トラブル発生時に解決策をインターネット等から得られる可能性が高くなるため、実質Ubuntu 32bit版、または64bit版が現実的な選択肢となるでしょう。ここで注意したいのは、Ubuntuにも多様なバージョンが存在し、ビルド可能なカーネルバージョンとの依存関係があることです。このバージョンを使えばいつでもOK!とは言いにくい状況なのです。実際にはあるUbuntuバージョンに固定するとしても、やはり開発メンバーが安心して開発を行うためには、想定した開発環境に問題ないことを先行してチェックする選任者をおくことが望まれます。


Windows CEのプラットフォーム開発
あるハードウェアプラットフォーム上で動作するCompact 7 OSを開発することをCompact 7のプラットフォーム開発と呼びます。Compact 7の動作可能なCPUアーキテクチャはARMv5、ARMv6、ARMv7、MIPSII、MIPSIIFP、x86で、いずれもMMUの利用可能な32ビットプロセッサです。実用上の必要最小RAMはおよそ64MB程度で、Androidと違って完全なRAM上のみのOS実行が可能です。(OSイメージ保存以外の外部ファイルシステムを必要としない。)Compact 7のOSイメージは通常NK.BINと呼ばれる単一ファイルで構成され、この中にはカーネル実行ファイル、デバイスドライバ、データファイル、アプリケーションが含まれます。このNK.BINは別の見方をするとROM化した後のメモリイメージであり、OSに含まれるすべての実行ファイルをあるメモリアドレスに固定して、アドレス参照を解決した後のイメージになっています。これに加えて、NK.BINファイルを読み出してメモリ上に展開するブートローダーを開発する必要があります。あるハードウェアプラットフォーム向けにNK.BINに含まれるデバイスドライバ、ブートローダー、OSの設定ファイルなどをまとめてすぐに利用できるようにしたものをBSP(Board Support Package)と呼びます。このBSPは、Platform Builderという統合開発環境でビルドします。BSPはPlatform Builderに予め含まれているもの以外に、SOCベンダーから最新のものを入手して利用することができます。
Platform Builderは、Visual Studio 2008にアドオンするプラグインツールです。このプラグインをインストールすると、Visual Studioに専用の開発UIが追加されますが、一方ハードディスク内にはCompact 7 OSを構成する各種バイナリファイルやデータファイル、コマンドライン開発ツール、リファレンスBSPなどが含まれる「ビルドツリー」がインストールド可能なカーネルソースコードも含まれています。カーネルデバッグ用の通信手段(イーサーネットやUSB)が使用可能であれば、Visual Studio 2008のIDEを利用したカーネルデバッガを利用できます。Windows CEのプラットフォーム開発環境は、Platform Builderのみであり、誰もがいつでも安定した開発環境を利用することができます。OSの修正パッチは原則マンスリーでマイクロソフトのWEBサイトより入手することができます。


次回は独自ドライバとネイティブコードの開発をテーマにご案内します。