- - PR -
マイクロソフトがWindows CEの新バージョンである「Windows Embedded CE 6.0」(以下CE 6.0)の提供を開始しました。これまで提供されていた「Windows CE 5.0」(以下CE 5.0)からアーキテクチャが変更され、また開発環境がVisual Studioに統合されるなど、これまでにない改良が行われました。「いままでの開発資産は有効活用できるのか?」「開発方法がどう変わったのか?」など、気になる方も多いかと思います。
本稿では、CE 6.0でのドライバ開発について、CE 5.0との相違点や注意すべき点を紹介します。
CE 6.0のアーキテクチャ再入門
CE 6.0のドライバ開発を理解するためには、CE 6.0のアーキテクチャを知る必要があります。
まず、アーキテクチャの変更点としてメモリモデルがあります。CE 5.0までのメモリモデルは、図1で示すとおり1つの仮想空間(4Gbytes)を使用し、
- 上位2Gbytes:カーネルが利用するエリア
- 下位2Gbytes:すべてのユーザープロセスが利用する共有エリア
となっています。この4Gbytesの仮想空間内すべてにプロセスが配置される構造です。
![]() |
| 図1 CE 5.0のメモリモデル |
一方、CE 6.0は図2で示すとおり4Gbytesの空間を使用するのは同じですが、
- 上位2Gbytes:カーネルが利用するエリア
- 下位2Gbytes:プロセスごとに利用可能なエリアとしてマッピング
という構造となりました。プロセスごとにユニークな2Gbytesのエリアを持つことができるようになっています。よって、CE 5.0ではメモリ上にすべてのデータがマッピングされていますが、CE 6.0ではそうではないということになります。これにより、1プロセス32Mbytesの制限がなくなり、2Gbytesに拡張されることになります。
![]() |
| 図2 CE 6.0のメモリモデル |
次に、重要な管理を行うコアモジュールである
- デバイスマネージャ(device)
- GEWS
- ファイルシステム
について。CE 5.0までは、ユーザーモードの1つのプロセスとして実装されていました。CE 6.0ではこれらがカーネル空間へ移され、プロセスではなくDLLとして実装されるようになりました。
なお、いままでのユーザーモードドライバとしての実装も残されています。ドライバはカーネルモードドライバとするのかユーザーモードドライバとするのか選択可能です。また、これまでと同様、DLLとして実装します。
| 注:上記アーキテクチャの詳細については「Windows CE 6の全貌 第1回」も参照ください。 |
この変更において、ドライバ開発として重要なポイントは、
- カーネルモードで動作することによるパフォーマンスの向上が期待できる
- カーネルメモリへのフルアクセスが可能となる
- 上記により、メモリアクセスへの信頼性に気を付ける必要がある
ということになります。特に最後の信頼性への注意は重要です。これまでユーザーモードとして動作していたCE 5.0であれば、ドライバ内に問題が生じてもOSとしては何とか動作を続けることができましたし、復旧も行えました。しかし、カーネルモードドライバとして実装した場合、ドライバ内での不具合はOS全体の動作に影響を与え、OSクラッシュを引き起こす可能性があります。十分に気を付ける必要があります。
組み込み開発フォーラム 新着記事
- フルスクラッチの“Hello World”を動かしてみよう(2011/3/31)
- FlexRayプロトコルの概要(その2)(2011/3/29)
- JASA、東北地域に拠点を置く会員企業を支援(2011/3/25)
- NEC、震災の影響を受けた4拠点の生産再開を発表(2011/3/23)
- 内部ブロック図の基礎と共通要素(2011/3/22)
- インテル、被災地におけるITインフラの復旧を支援(2011/3/22)
- Facts on AUTOSAR/AUTOSAR導入の現実(2011/3/18)
- 計測器・震災被害ホットラインを開設、テクトロニクス(2011/3/18)
- ZMP、地震の揺れを多角的に計測するアプリ無償配布(2011/3/16)
- メンター、3Dテレビ・マルチメディア検証プラットフォーム(2011/3/16)
- 【番外編】タチの良い計測値、悪い計測値とは?(2011/3/15)
- tarファイルシステムをAndroidに組み込む!!(2011/3/10)






