2010年6月28日月曜日

V-USBによるUSB2.0インタラプト転送デバイスの作成(4)

WinDBGの.kdfilesコマンドについてちょっとメモしときます。

.kdfilesコマンドを使うとホストPCで作成したドライバファイル(*.sys)をターゲットPCへ転送してくれます。WinDBGのヘルプ(英語)にも解説が書いてありますが、ここにも書いておきます。

【STEP1】mapファイルの作成

map
\Systemroot\system32\drivers\sample.sys
C:\work\driver\sample.sys

[解説]
上のパスがターゲットへのドライバファイルのコピー先のパスです。下のパスがホストのコピー元のドライバファイルへのパスです。ドライバ名は自分の作ったドライバのファイル名を指定します。

マップファイルはC:\work\mapfileに保存したと仮定します。マップフィル名はmapfile.iniと仮に設定します。どんな名前でもいいです。

【STEP2】環境変数の設定

各ターゲットOSのビルド環境DOS窓で以下の環境変数を設定します。

[ここは環境によって表示が違う]> set _NT_KD_FILES=c:\work\mapfile\mapfile.ini

【STEP3】
WinDBGを立ち上げて、ターゲットPCをデバッグできる状態にしてから、
ブレークし、コマンドが入力できるようにします。
GUIのコマンド入力エディットボックスから以下のコマンドを入力します。

kd> .kdfiles c:\work\mapfile\mapfile.ini

入力するとログ画面に以下のようなメッセージが表示されます。


KD file associations loaded from 'c:\work\mapfile\mapfile.ini'
以上により、ドライバファイルの自動転送の「準備」ができました。gコマンドを入力してターゲットOSを実行させましょう。

しかし、ドライバはどのタイミングでターゲットにコピーされるのでしょうか?

「ターゲット システム上でドライバが読み込まれるたびに指定された場所からドライバを読み込みます。」 from Windows Driver Kit クイック スタート ガイド(Version : 1.0.0.061114)

です。.kdfilesコマンドを打ったからといってターゲットOSにドライバは転送されません。私はここで少しはまりました。

USB機器だったら、新しくデバイスをビルドして、デバイスを抜き差しすれば新しいドライバはターゲットPCへ転送されます。

詳しくは、WinDBGのヘルプで
Mapping Driver Files(ただし英語)
を参照してください。

Keep Starting!!!

2010年6月25日金曜日

V-USBによるUSB2.0インタラプト転送デバイスの作成(3)





昨日の晩、
V-USBによるUSB2.0インタラプト転送デバイスの作成(2)で作成した、Windows XP用WDMドライバをターゲットのWindows XPマシン(ヒューレットパッカード社製)に接続して
「Hello World by xpsample.sys」
のログが出力されることを確認しました。

接続した機器はUSBメモリです。usbstor.sysをxpsample1.sysと入れ替えてOSをだましています。

本来はUSBメモリを接続すると、OSはusbstr.sysをカーネル空間にロードしてUSBメモリが使えるようになるのです。

左のキャプチャ画面はターゲットのWindows XPマシン(ヒューレットパッカードPC)の画面を示しています。ドライバのプロパティに私の名前が載ってますねー。成功です。ドライバのインストールファイル(*.inf)に自分の名前を書き込んだからです。

このドライバはUSBメモリを接続すると、WinDBG
のコンソールに「Hello World by xpsample.sys」を表示するだけです。
千里の道も一歩から。
このDriverEntry()関数にDriverObject関数を登録していくことで、デバイスを制御しています。


やっと、本来のプログラム作業を行なうところまできました


速報になってるんで、ある程度作業がたまったら、どこかのホームページでもまとめようかなぁ・・・。
ぜーーーんぜん詳細を書いてないんで、ググって飛んできた人は、ガッカリだろうね(笑)    

2010年6月23日水曜日

Googleホームページに娘の写真を張ってみる


いやー、Googleって面白いねぇー。

Googleのホームページに娘の写真や、ガンダムの写真を貼り付けることができるようになったみたいです。

Googleホームページの左下のリンクから使ってみてください。

#ん?文章が変ですね(笑)

2010年6月21日月曜日

東京特許許可局局長、急遽特許許可却下

とうきょうとっきょきょかきょくきょくちょう、きゅうきょとっきょきょ!・・・・・・イテッ!!!

・・・会社で特許書いてます。
なんだか、俺がおぼろげに思いついたアイデアが、「それ、いいやん!」ってなって、先願調査を会社のWebシステムでやって、同じ特許がないか探しています。

なんで、ぽっと出のアイデアが特許候補になっているのか僕には理解できません(苦笑)

憎いっ! 特開2008-1399xx野郎!!!

やっぱり考えることは同じで、某プリンタメーカーの「実体調査中」の特許を見つけました。

「あ、おなじかも???<(*o*)>

ってな説明があって、非常にテンション下がってます(苦笑)



僕が発案した特許はユニバーサル・シリアルバス(USB)にとても関連しているので、先願特許を見ているだけでUSBの勉強になります。

上司に相談したら、上司は「明細書をよく読んだら、君の特許と違う。よく読め」なる指示があり、目を皿のようにして読んでるんですが、

ぜーーーーんぜんわかりません!

大先輩に相談したところ、
「たぶん、あるUSBの機能に対して、上司と君の認識がちがうのかもしれない。よくわからへん」
とのこと。

頭が痛いっす・・・・。(*_*)

特許がぽっと書けたら、俺は今頃ドバイにチカイところでサンザイしとるわい!

2010年6月20日日曜日

V-USBによるUSB2.0インタラプト転送デバイスの作成(2)

>次は、V-USBのコンパイルとATmega168へのFWのダウンロードを行いたいと思います。
と前回は書きましたが、
今、会社のほうの業務で、USB3.0の次に大切な特許出願書類を書いていて、
ドライバのビルド方法の勉強がおろそかになっているので、
今回はWDKを使ってWDMドライバの超基本スケルトンドライバファイルをビルドするまでを勉強しました。


とりあえず以下のコードをWDKのコンパイラでコンパイル

007 #include <wdm.h>
008 
009 NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING UniRegistryPath)
010 {
011 
012     DbgPrintEx(DPFLTR_IHVDRIVER_ID, 
013                DPFLTR_ERROR_LEVEL, 
014                "Hello World by xpsample.sys \n");
015 
016     return STATUS_SEVERITY_SUCCESS;
017 
018 }

以下の写真がビルド完了時のコンソール








そしてサンプルドライバができた。(XpSample1.sys)





今日はここまで。
次はターゲットPC(先日、日本橋で4000円で買ってきたHPのデスクトップパソコン)とWinDBGを使ってデバッグコンソールに「Hello World by xpsample.sys」 メッセージがでるか確認したいと思います。

Keep Starting!!!

2010年6月8日火曜日

V-USBによるUSB2.0インタラプト転送デバイスの作成(1)

ATmega168汎用基板を使ったV-USBによる Low Speed USBデバイスを作って行きたいと思います。

日本橋のデジットでATmega168汎用基板と水晶発振器(12MHz)と抵抗等を買ってきました。
3.3V100mAの3端子レギュレーターを買ってきて基板にマウントしました。3.3VというのはUSB2.0規格で決まっている差動信号の電圧です。
3端子レギュレーターは5VのUSBバス電圧を3.3Vに降圧してくれます。
431のリファレンスを買ってきました。リファレンスICとは正確に一定電圧を出力するデバイスです。3.3Vを入力に対して室温にあまり影響なく約2.5V電圧を安定して出力します。アナログ・デジタル変換器を使用する時、この電圧が基準となります。
Aref端子には1.0Vが印加されるように半固定抵抗で調整しました。センサデバイスをくっつけてインタラプトIN転送をやってみたいと思います。つまり、センサ情報をUSBを使ってWindowsアプリケーションで表示させるわけです。温度計でも、湿度計でもいいです。





左の書籍はUSBコンプリートです。USB機器のバイブルです。













目的:USBデバイス作成を通じてUSB2.0 Windowsドライバの開発技術を習得する。

仕様は以下の通りにしたいと思います。

【USBデバイス要求仕様】
  • USB2.0 Low Speedデバイスとする。
  • インタラプトOUT転送を行なう。
  • コントロール転送は必ず行なう。#当たり前
  • 制御するデバイスはLED1個とする#OUTエンドポイント1を作る
  • ディスクリプタはEEPROMに格納する。
  • V-USBを使用する。
  • Windows GUIアプリケーションでチェックボタンをON・OFFすることでLEDを点灯させたり、消灯させる。(LED点灯は組込みソフトの世界の基本。)
  • WindowsドライバはWDMのお作法を使う。#KMDFお作法を使いたいが基本から。
以上が基本要求仕様になります。

とりあえず、これをたたき台にして細かいところを検討したいと思います。

上の写真でレセプタクル(USBミニBコネクタ)と基板の電源をつなぎました。そして、いきなりですが、PCのUSB端子と接続しました。USBのバスパワー5Vが入力され、3端子レギュレータからは3.3Vが出力されました。リファレンスからは2.5Vが出力され、半固定抵抗でA ref端子に入力する電圧を1.0Vに調整しました。

次は、V-USBのコンパイルとATmega168へのFWのダウンロードを行いたいと思います。

Keep Starting!!!