« XILINX XDMAの使い方と速度 | トップページ | Windows10におけるXDMAコア割り込みの発生方法 »

2017.08.07

Windows10時代のデバイスドライバ開発とデバッグ

DMAのデバイスドライバを開発するため、Windows10での開発環境を整える必要が出てきましたので調べてみました。

いくつかの参考になりそうな記事がありますので、リンクを貼っておきます。

「Windows 10 でサンプル ドライバーをビルドするまで」
https://blogs.msdn.microsoft.com/jpwdkblog/2015/08/21/windows-10/

「ユニバーサル Hello World ドライバー (KMDF) の作成」
https://msdn.microsoft.com/ja-jp/library/windows/hardware/hh439665(v=vs.85).aspx

最初の「Windows 10 でサンプル ドライバーをビルドするまで」に従ってインストールします。

●Visual Studio 2015 Expressのインストール

まずは、VisualStudio2015のExpressをインストールしなければなりませんが、これが大変です。ExpressはCommunityに変わり、2015は2017に変わったので、2015 Expressをダウンロードしようとしても2017 Communityに飛ばされてしまいます。なかなかたどり着けません。

Visual Studio 2015 Expressのダウンロード先はこちらです

日本語版 https://www.visualstudio.com/ja/post-download-vs/?sku=xdesk&clcid=0x411&telem=ga

英語版 https://www.visualstudio.com/ja/post-download-vs/?sku=xdesk&clcid=0x409&telem=ga

上のページを訪れると自動的にダウンロードの保存ダイアログが出るので、保存します。

Getvsexpress

私は日本語版をインストールしました。

●Windows 10 SDKのインストール

Windows 10 SDKは難しくありません。下記のページからEXEをダウンロードする、を押せば手に入ります。

https://developer.microsoft.com/ja-jp/windows/downloads/windows-10-sdk

Getsdk

●Windows 10 WDKのインストール

下記のページにあります。

https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit

Getwdk

●ユニバーサル Hello World ドライバー (KMDF) の作成

参考リンクの「ユニバーサル Hello World ドライバー (KMDF) の作成」をしてみようと思っても、同じようにはいきません。まず、ソリューションエクスプローラで「追加」→「新しい項目」とやっても、Package Manifestしか出ないのです。

Addnewitem

C++やHのファイルのテンプレートというものがないためなのですが、テンプレートは以下のフォルダの中にあります。

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\VCProjectItems

しかし、VCフォルダに存在するのはVCProjectItems_WDExpressです。そこで、。VCProjectItems_WDExpressをコピーしてVCProjectItemsに名前を変えます。

Copywdexpress

プロジェクトに新しいC++やCファイルを追加できるようになります。

Addc

これで、ユニバーサル Hello World ドライバー (KMDF) の作成が作れるようになります。

●配置とデバッグ

ただ、その先にある配置やデバッガのところがうまくいきません。リモートデバッグの方法も試してはみましたが、参考リンクのようにはいきません。

そもそも2台のPCをつないでデバッグする・・というのは理想的ではありますが、やはり1台のPCでやりたいものです。

私の方針は以下のとおりです。

  • セキュアブートを無効にする
  • 開発用兼実験用PCで、カーネルモード署名の強制を無効にする
  • Windowsをbcdeditでテストモードにする

カーネルモードでのデバッグはDbgPrintを使います。KdPrintは括弧を二重にしないといけなかったり、何かと使いにくいのです。DbgPrintは

DbgPrint("DmaAdapter address = %x",addr);

のようにprintf感覚で使えてとても便利です。DbgPrintの出力は、DbgView.exeで見ることができます。

Dbgview

DbgView.exeは以下のリンクから入手できます。

https://technet.microsoft.com/ja-jp/sysinternals/debugview.aspx

DbgView.exeを管理者モードで起動して、Captureのオプションを下記のように設定すれば、DbgPrintの出力を見ることができます。

Dbgprint2

●ドライバの日付について

基本的にビルドしてテストしての繰り返しなので、面倒なことはしたくありません。Visual Studioでビルドしたドライバには、自動的にinf2catやsigntoolで署名が施されます。

ただし、日付がUTCなので日本の午前0時を過ぎると翌日になってしまい、未来の日付は使えないとエラーになってしまいます。そこで、下記のオプションを設定する必要があります。

Inf2cat

●ドライバの署名について

Visual Studioでプロジェクトを作ると、オレオレ証明書ができているようです。

Debugフォルダの中に.cerというファイルがありますので、これを信頼されたルート証明機関にインストールします。

Sign2

これで、自分のPCだけで使えるAuthenticode署名ができるようなのですが、

Sign3

ドライバのインストールで失敗するようなので、私はWindowsをテストモードにして、署名の強制を無効にして使っています。

ざっと駆け足で説明しましたが、このような手順でWindowsのデバイスドライバを開発できるようになると思います。

|

« XILINX XDMAの使い方と速度 | トップページ | Windows10におけるXDMAコア割り込みの発生方法 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« XILINX XDMAの使い方と速度 | トップページ | Windows10におけるXDMAコア割り込みの発生方法 »