CE 6.0でOSの構造に大幅な変更が施され、ドライバ開発の面にもその影響が及んでいる。何が変わり、どこに注意すべきなのかを解説する
マイクロソフトが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 5.0までのメモリモデルは、図1で示すとおり1つの仮想空間(4Gbytes)を使用し、
となっています。この4Gbytesの仮想空間内すべてにプロセスが配置される構造です。
一方、CE 6.0は図2で示すとおり4Gbytesの空間を使用するのは同じですが、
という構造となりました。プロセスごとにユニークな2Gbytesのエリアを持つことができるようになっています。よって、CE 5.0ではメモリ上にすべてのデータがマッピングされていますが、CE 6.0ではそうではないということになります。これにより、1プロセス32Mbytesの制限がなくなり、2Gbytesに拡張されることになります。
次に、重要な管理を行うコアモジュールである
について。CE 5.0までは、ユーザーモードの1つのプロセスとして実装されていました。CE 6.0ではこれらがカーネル空間へ移され、プロセスではなくDLLとして実装されるようになりました。
なお、いままでのユーザーモードドライバとしての実装も残されています。ドライバはカーネルモードドライバとするのかユーザーモードドライバとするのか選択可能です。また、これまでと同様、DLLとして実装します。
この変更において、ドライバ開発として重要なポイントは、
ということになります。特に最後の信頼性への注意は重要です。これまでユーザーモードとして動作していたCE 5.0であれば、ドライバ内に問題が生じてもOSとしては何とか動作を続けることができましたし、復旧も行えました。しかし、カーネルモードドライバとして実装した場合、ドライバ内での不具合はOS全体の動作に影響を与え、OSクラッシュを引き起こす可能性があります。十分に気を付ける必要があります。
Copyright © ITmedia, Inc. All Rights Reserved.