Windows Embedded CE 6.0ドライバ開発の要点Windows CE 5.0開発者に贈る(1/3 ページ)

CE 6.0でOSの構造に大幅な変更が施され、ドライバ開発の面にもその影響が及んでいる。何が変わり、どこに注意すべきなのかを解説する

» 2007年03月12日 00時00分 公開
[岩崎平(Microsoft MVP - Windows Embedded/安川情報システム),@IT MONOist]

 マイクロソフトが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の仮想空間内すべてにプロセスが配置される構造です。

CE 5.0のメモリモデル 図1 CE 5.0のメモリモデル

 一方、CE 6.0は図2で示すとおり4Gbytesの空間を使用するのは同じですが、

  • 上位2Gbytes:カーネルが利用するエリア
  • 下位2Gbytes:プロセスごとに利用可能なエリアとしてマッピング

という構造となりました。プロセスごとにユニークな2Gbytesのエリアを持つことができるようになっています。よって、CE 5.0ではメモリ上にすべてのデータがマッピングされていますが、CE 6.0ではそうではないということになります。これにより、1プロセス32Mbytesの制限がなくなり、2Gbytesに拡張されることになります。

CE 6.0のメモリモデル 図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クラッシュを引き起こす可能性があります。十分に気を付ける必要があります。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.