問題タブ [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.
linux - マップされた Linux キャラクター デバイス メモリを cudaHostRegister に登録すると引数が無効になる
DMA<->CPU<->GPU データ転送を次の方法でブーストしようとしています。
ユーザー空間に割り当てられたメモリをデバイス DMA にマップし、cudaHostRegister で Cuda に登録すると問題なく動作しますが、「kmalloced」メモリを登録しようとすると、cudaHostRegister から「無効な引数」エラーが返されます。
最初に、問題は配置またはデバイス ドライバーの複雑なメモリ プール管理にあると考えたので、kzalloced 10Kb バッファーが remap_pfn_range で再マップされ、問題が解決しない .mmap() を実装する最も単純なキャラクター デバイスを作成しました。
残念ながら、ネット上で同様の質問を見つけられなかったので、ここで答えが見つかることを心から願っています.
一部のシステム情報とカーネル ドライバー <-> ユーザー空間アプリ コード + ランタイム ログ情報:
キャラクター デバイス mmap() コード:
テスト アプリケーション コード:
実行時デバッグ情報:
ユーザー空間:
カーネルスペース (tail -f /var/log/syslog):
ありがとうございます。
c++ - システムコールはスレッドセーフですか?
私はカーネルモジュールを書きました。これは、この Linkのようなキャラクターデバイスドライバーです。ドライバーには、次のような内部構造があります。
したがって、このドライバーを使用するマルチスレッドアプリケーションがあります。現在、このドライバーを次のように使用しています。
したがって、問題は、私のアプリケーションの 4 つのスレッドがこれらの関数を呼び出して、次のように独自の ChannelId を読み書きするかどうかです。ドライバーから読み書きする場合:
データ競合などはありますか?
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):