問題タブ [device-driver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
661 参照

windows-ce - XXX_IOControl への呼び出しの終了後、Windows CE デバイス ドライバーで呼び出し元のメモリをマップする方法は?

私は Windows CE デバイス ドライバーに ioctl を実装しています。これは、アプリケーション メモリの大きなチャンクへのポインターを取得して、DeviceIoControl へのアプリケーション呼び出しを通じて開始された非同期 I/O を実行します。

MapCallerPtr() を使用する場合、XXX_IOControl 関数が戻ると、ポインターはマップ解除されます。ポインターが IST で使用されると、マップされなくなり、クラッシュが発生します。

XXX_IOControl への呼び出しの最後を超えてポインターをマップする最良の方法は何ですか? アプリケーションは、ドライバーがメモリの処理を終了したという通知をドライバーから受け取るまで、メモリが有効なままであることを保証します。

これは Windows CE 5.0 上にあります。

0 投票する
1 に答える
654 参照

fonts - デバイス フォントを記述するリソース dll を作成するにはどうすればよいですか?

私が構築しているターゲット ドライバーは、ネイティブ ドライバーではなく、Microsoft Universal Pinter Driver で動作するミニドライバーです。

DDKによると:

これらの項目 (私の場合はフォント) の説明は、Platform SDK のドキュメントで説明されているように、リソース DLL に配置されます。

それから次のように続けます。

プリンターのリソース DLL で、RC_UFM リソース タイプを使用して .ufm ファイルを指定し、RC_FONT リソース タイプを使用して .ifi ファイルを指定します。

SDK への参照にもかかわらず、リソース dll 内に .ifi フォント情報を実際に配置する方法に関する情報はありません。

誰でもこれを行う方法を指摘できますか?

編集

はい、プリンタには常駐フォントが含まれており、それらを記述するリソース ファイルを作成する必要があります。

これまでのところ、別の障害にぶつかりました。リソース dll にコンパイルする必要があるフォント記述ファイルは.ifi(DDK は可能だと言っていますが) できないようで、機能しません。ただし、.ufmフォント記述ファイルでは機能します。問題は、デバイス フォントを記述した ifi ファイルしかなく、umf がないことです...

何かアドバイス ?

0 投票する
3 に答える
5612 参照

windows - Windows ビデオ ドライバーのバージョンを取得するにはどうすればよいですか?

Windows で、ユーザー モード プログラムは、インストールされているビデオ カードのドライバー バージョン番号を取得する方法を教えてください。

ATI の「Catalyst Control Center」などのプログラムは、この情報をユーザーに表示したり、バグ レポートに自動的に含めたりすることができます。彼らはどうやってそれを手に入れますか?

PSDK のドキュメントを調べましたが、関連するものが見つかりません。

ユーザー プログラムは、Device Manager が表示するデータベースをウォークスルーできますか?
ディスク ドライブ ジオメトリを取得するような IOCTL 呼び出しはありますか?
(信頼できる) レジストリ キーにありますか?

0 投票する
3 に答える
2000 参照

java - データ取得ハードウェア用の Java ドライバ?

データ取得を行う必要があり、Java を使用してデータ取得アプリケーションをプログラムしたいと考えています。現在、ドライバー用のJavaラッパーを備えたLabJackを使用しています。単純なものでは問題なく動作していますが、実際のものにアップグレードする必要があります。

Java デバイスドライバーが利用可能なデータ取得プラットフォーム (NI または Measurement Computing またはその他の 1 つ) を知っている人はいますか?

0 投票する
1 に答える
750 参照

linux - Linux デバイス ドライバの安全でない FXSAVE/FXRSTOR バグ -- 前例はありますか?

厄介な問題が発生し、デバッグしようとしている会社の多くのエンジニアが一時的に困惑しました。

C++ プログラムは通常、MPI を備えたマルチコア コンピューターのクラスターで実行されます。

非常に長い時間 (おそらく数日) 実行された後、突然失敗します。

それに取り組んでいるほとんどのエンジニアは、プログラム自体にバグがある可能性を排除したため、ハードウェアの問題の可能性を非難し始めていますが、Linux カーネル モジュールまたはデバイスのいずれかにソフトウェアの問題があるに違いないと思います。運転者。

疑わしいのは、カーネル モジュールまたはデバイス ドライバーが、いくつかの浮動小数点計算を行うために、SMP システムでは安全でない方法で FXSAVE/FXRSTOR を実行していることです。これは、再入可能にする必要があるカーネル ルーチンの静的バッファに対して FXSAVE を実行するのと同じくらい簡単なことかもしれません。これにより、競合状態のバグが発生し、スレッドの浮動小数点コンテキストがほとんど破損しなくなります。

アプリケーション レベルでは、FXSAVE/FXRSTOR コンテキストの一部である MXCSR の 1 つまたは複数のビットが突然変更されているように見えますが、それを変更するアプリケーション コードはありません。

何年も前に Windows で似たようなことがありましたが、最終的にはビデオ ドライバーのバグであることが判明しました。アプリケーション コードがオペレーティング システムによってプリエンプトされたときに、そのスレッドのコンテキストの一部の MXCSR ビットが破損していました。

私は Linux カーネルのハッキングやデバイス ドライバーの開発の専門家ではありませんが、再入可能性の規則が大幅に変更されていることを読んでいます。非 SMP システムと SMP (マルチコア) システムの間。カーネル バージョン間。など。したがって、競合状態のバグの可能性は妥当と思われます。

私の質問は次のとおりです。その説明に当てはまる既知の Linux ドライバー (またはカーネル) のバグはありますか?

同様の症状があった場合、私が引用できる前例があれば参考になります。この時点で、関係者の多くは (IMHO) 「私のコードにはバグがないので、ハードウェアが悪いに違いない」と考えて時間を無駄にしています。それを超えて、本当の原因である可能性が高いものを探したいと思います.

0 投票する
2 に答える
224 参照

linux - デバイス ドライバを作成できるようにするための、デバイスの最小要件は何ですか?

最近、カーネル空間、特にデバイス ドライバーに関する記事を読み始めました。それで、デバイス用のデバイスドライバーを簡単に作成できるようにするために、デバイスにいくつかの最小要件があるのだろうかと思っていましたか?

0 投票する
7 に答える
8689 参照

embedded - 組み込みデバイス用 USB - デバイス ドライバー/プロトコル スタックの設計

私は、SPI インターフェイスを介してマイクロ コントローラーと通信する組み込みデバイス用のデバイス ドライバーを作成する任務を負っています。最終的には、USB インターフェイスを使用して更新されたコードを外部からダウンロードし、検証段階で使用します。

私の質問は、組み込みシステム内の USB プロトコル スタック/デバイス ドライバーの実装/設計をカバーする優れたリファレンス デザイン、ドキュメント、またはオンライン チュートリアルを知っている人はいますか? 私はまだ始めたばかりで、650 ページの USB v2.0 仕様を読むのは、現時点では少し大変です。

参考までに、私が使用しているマイクロコントローラーは Freescale 9S12 です。

マーク

ゴールデンミーン (-AD) のコメントに基づいて、次の情報を追加したいと思います。

1) 組み込みデバイスはカスタム エグゼクティブを使用し、COTS または RTOS を使用しません。

2) デバイスは割り込みを使用して、デバイスからデータを取得する準備が整ったことを示します。

3) Linux に関するいくつかのドキュメントを読みましたが、Linux にまったく詳しくないので、現時点ではあまり役に立ちません (ただし、すぐに役立つことを願っています)。

4) 設計アプローチは、少なくとも現時点では、USB デバイス用のデバイス ドライバーを作成し、USB プロトコル層 (I/O) をデバイス ドライバーの上に配置してデータを解釈します。私は間違っているかもしれませんが、これが最善のアプローチだと思います。

編集 - 1年後

二度と USB デバイスで作業することがない場合に備えて、頭から消える前にいくつかの項目を共有したかっただけです。コードを開発し、それを最初に起動して実行するときに、いくつかの障害に遭遇しました。

私が遭遇した最初の問題は、USB デバイスがホスト (私の場合は Windows) に接続されたときに、ホストがリセット要求を発行したことでした。USB デバイスは、割り込みイネーブル フラグをリセットおよびクリアします。これが起こっていることを知るのに十分な文献を読んでいなかったため、セットアップ要求割り込みを受け取ることはありませんでした。これを理解するのにかなりの時間がかかりました。

私が遭遇した 2 番目の問題は、Set_Configuration のセットアップ要求を適切に処理していないことでした。私はそれを処理していましたが、このセットアップ要求が入ったときに USB デバイスが ACK を送信していなかったため、要求を正しく処理していませんでした。ハードウェア USB プロトコル アナライザーを使用して、最終的にこれを発見しました。

私が遭遇した他の問題もありましたが、これらは、理解するのにかなりの時間を要した 2 つの最大の問題でした。私が心配しなければならなかったもう 1 つの問題は、ビッグ エンディアンとリトル エンディアン、それぞれ Freescale 9S12 と USB データ フォーマット (Intel) です。

過去に行った UART デバイス ドライバーと同様の USB デバイス ドライバーをビルドすることになりました。このコードを次の URL に投稿しました。

http://lordhog.wordpress.com/2010/12/13/usb-drive

私は構造体を多用する傾向があるため、#define を使用するほどポータルではないため、人々はそれらを好まないかもしれません (例: MAX3420_SETUP_DATA_AVAIL_INT_REQR 0x20)。しかし、コードが読みやすくなるので気に入っています。誰かがそれについて質問がある場合は、お気軽に電子メールでお問い合わせください. 「USB Complete: The Developer's Guide」という本は、どの領域に集中すべきかを知っている限り、役に立ちました。これは単純なアプリケーションであり、低速 USB のみを使用しました。

0 投票する
1 に答える
1702 参照

usb - USB 構成の設定に失敗する

libusb を使用して USB デバイスと通信しようとしていますが、レースの最初の段階でつまずいているように感じます。どのエンドポイントと通信する必要があるかなどは正確にわかっていますが、そこまで到達することさえできません。私は、本質的に:

これで、デバッグ モードでデバイス情報を見ることができ、現在の構成が 0 (初期化されていない/再起動直後) であり、構成番号が 1 の有効な構成が 1 つだけあることがわかります。 1 にすると、-22 の戻り値が返されます。これは、(stringifier を通過して) "windows api error: bad parameter.

同様の問題を抱えている他の人を見つけることができませんでした。それはとても簡単なことのように思えます.インターフェイスを主張したり、代替インターフェイスを設定したりすることさえできません.最初に構成を設定する必要があります。私は何が欠けていますか?(重要な場合:これはWinXP上にあります)

0 投票する
3 に答える
5848 参照

windows - USB 転送ケーブルのプログラミング / USB デバイス ドライバーとの通信

Windows からUSB 転送ケーブル (Belkin のEasy Transfer Cableなど) にプログラムでアクセスするにはどうすればよいですか?

私はlibusb-win32に精通していますが、私が知る限り、それを新しいデバイスや Windows Vista で使用するのは難しいようです。

Windows Easy Transferがこれを実行できることを知っています。Windows 転送ツールと同じことを行うコードを作成するにはどうすればよいですか?

これを行う方法について定型化されたドキュメントがない場合は、喜んで掘り下げますが、どこから始めればよいかわかりません。Windows 転送ツールの動作を監視して、その動作を確認するにはどうすればよいですか? Windows では、デバイス マネージャーで「転送ケーブル デバイス」という独自のカテゴリの転送ケーブルも提供されているようです。これらのドライバーの 1 つと低レベルの通信を行うにはどうすればよいですか?

0 投票する
2 に答える
332 参照

windows - USB デバイス ドライバーで Tx パフォーマンスを向上させるにはどうすればよいですか?

Windows 2000 以降で Windows Driver Model (WDM) を使用して、USB 1.1 デバイス用のデバイス ドライバーを開発しました。

私の問題は、64 バイトのバルク転送を使用した場合の Tx パフォーマンスがかなり悪いことです。使用する USB ホスト コントローラに応じて、最大パケット スループットは 1 秒あたり 1000 パケット (UHCI) または 2000 パケット (OHCI) です。Linux Kernel 2.6 で、1 秒あたり約 5000 パケットの同様のドライバーを開発しました。

Linux ドライバーは最大 10 の非同期バルク転送を使用しますが、Windows ドライバーは 1 つの同期バルク転送を使用します。したがって、これを比較すると、パフォーマンスが非常に悪いことは明らかですが、非同期バルク転送でも試してみましたが、成功しませんでした (パフォーマンスの向上はありません)。

Windows でパフォーマンスを向上させるためのヒントやコツを知っている人はいますか?