問題タブ [chardev]

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 に答える
729 参照

linux - マップされた Linux キャラクター デバイス メモリを cudaHostRegister に登録すると引数が無効になる

DMA<->CPU<->GPU データ転送を次の方法でブーストしようとしています。

ユーザー空間に割り当てられたメモリをデバイス DMA にマップし、cudaHostRegister で Cuda に登録すると問題なく動作しますが、「kmalloced」メモリを登録しようとすると、cudaHostRegister から「無効な引数」エラーが返されます。

最初に、問題は配置またはデバイス ドライバーの複雑なメモリ プール管理にあると考えたので、kzalloced 10Kb バッファーが remap_pfn_range で再マップされ、問題が解決しない .mmap() を実装する最も単純なキャラクター デバイスを作成しました。

残念ながら、ネット上で同様の質問を見つけられなかったので、ここで答えが見つかることを心から願っています.

一部のシステム情報とカーネル ドライバー <-> ユーザー空間アプリ コード + ランタイム ログ情報:

キャラクター デバイス mmap() コード:

テスト アプリケーション コード:

実行時デバッグ情報:

ユーザー空間:

カーネルスペース (tail -f /var/log/syslog):

ありがとうございます。

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

c++ - システムコールはスレッドセーフですか?

私はカーネルモジュールを書きました。これは、この Linkのようなキャラクターデバイスドライバーです。ドライバーには、次のような内部構造があります。

したがって、このドライバーを使用するマルチスレッドアプリケーションがあります。現在、このドライバーを次のように使用しています。

したがって、問題は、私のアプリケーションの 4 つのスレッドがこれらの関数を呼び出して、次のように独自の ChannelId を読み書きするかどうかです。ドライバーから読み書きする場合:

データ競合などはありますか?

0 投票する
0 に答える
155 参照

c - モジュールのロードに失敗したのはなぜですか? (/dev/scull0 : そのようなデバイスやアドレスはありません)

私の前の質問から:ubuntuで外部モジュールを構築する方法は?loading out-of-treeまたはが原因でモジュールをロードできないと思ってtainting kernelいましたが、scull_init_module(以下のソース) に追加printkしたので、kern ログからロードされることがわかりました。しかし、私はしませんでした(ログに出力はありません-ログはリンクからのものと同じです)。

uname -a== 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2 (2020-04-29) x86_64 GNU/Linux(ubuntuを使用しない-リンクから)。

scull_init_module:

これは基本的にLinux Device Drivers, Third Editionの chapter3 からのものです。しかし、私はそれを手書きします (コピー/貼り付けではありません)。alloc_chrdev_regionは適切に呼び出されているので、そうですがscull_setup_cdev、どこに問題があるのでしょうか?

編集(dmesgからの出力):dmesgモジュールをロードしているように見えます:

しかし、それでもノードは/dev/scull0与えますNo such device or address

したがって、デバイスが適切に登録され (dmesg を参照)、/dev 階層にノードを作成すると、どういう意味になりno device or addressますか? そして、なぜ私はそれを手に入れているのですか?

EDIT2 (関数 scull_setup_cdev):