問題タブ [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.
c - chardev のメジャーモードとマイナーモードはどれくらい安定していますか?
私はシリアルポートライブラリに取り組んでおり、キャラクターデバイスのメジャー/マイナーモードを使用して、指定されたファイルがプラットフォームシリアルポート、pty、または USB シリアルポートであるかどうかを確認することを考えています。 Linux または OSX に存在するフレームワーク。
実際、ファイルが USB シリアル ポートなのかプラットフォーム シリアル ポートなのかを調べるには、libudev
Linux やIOKit
OSX など、利用可能なフレームワークを使用する方法があります。PTY
しかし、ファイルをチェックするには、古き良きものを使用するしか方法はない
と思いますstat()
:
これまでのところ、debian Linux でPTS
chardev のメジャー モードがすべて
136
であり、OSX ではすべての PTS のモードが16
. ddg をクロールすると、Solaris がメジャー モードを使用している可能性があることがわかりました。24.
PTY/PTS とは何か、およびその歴史について話している多くのリソースをオンラインで見つけることができました。openpty、pty、またはptsのマンページは、メジャーとマイナーを示していますが、デバイス/dev/ptmx
のメジャー/マイナーモードについては言及していません。PTS
また、ユニス全体の主要モードをリストするリソースはありません。
だからここに私の質問があります:
PTS
特定の Unix フレーバーに対して (および拡張により他のシリアル chardev)のメジャー モードは安定していますか? (±2年で安定するものを探しています)- それらはどこで定義されていますか?それを処理するのはカーネルドライバーだと思いますね。
- これがどのような種類のデバイスであるかを検出するために、chardev のメジャー モードに依存するのは良い考えですか?
注意: unix.SEに投稿することをためらっていますが、コードでそれを使用するコンテキストにいるので、これはここで、SO で尋ねる質問であると考えました。
編集: 関連する質問を unix.SEに投稿し、他の主要なモードを見つけて、それらがシステム間でどれほど安定しているかを調べてください。私の推測では、誰も答えを持っていない場合、少なくともシステムに問い合わせて情報源を調べることができます。
linux - Linux カーネル : create_device() で作成された /dev ファイルのパーミッションを設定する
char デバイスのドライバーである小さな Linux モジュールを作成しています。私のコードでは、デバイス自体よりもデバイスクラスを作成しているため、システムに /dev ファイルが作成されます。問題は、/dev ファイルにルート権限しかなく、ユーザーがそのファイルに対する読み取り、書き込み、実行のいずれの権限も持っていないことです。/dev ファイルの権限を変更したいと考えています。
Web で回答を検索したところ、udev ファイルを変更することがわかりましたが、モジュールがカーネルに読み込まれるときに動的に変更する権限が必要なため、この解決策は私の場合には機能しません。私が書いているモジュールは、常に自分のマシンで実行されるとは限らないため、「その場で」アクセス許可を変更する必要があります。
権限を変更する機能はありますか?
linux-device-driver - remap_pfn_range を使用して、ブート時のリザーバー メモリをユーザー空間にマップします
remap_pfn_range を使用して、ブート時に予約済みメモリ (2G のオフセットで 30M) (ブート カーネル パラメータ mem=2G memmap=30M$2G) をユーザー空間にマップしようとしています。 以下は私のドライバー コードです。
私のユーザー空間アプリは以下です
モジュールを挿入すると、戻ります
しかし、ユーザー空間アプリを実行するとエラーが返されます
c++ - OS X ドライバーの自動アンロード
ここで私の最初の質問です:)
私は現在、キャラクター デバイスを提供し、OSX 10.7+ をターゲットとする一般的な kext を作成しています。これは純粋な C であり、IOKit/C++ はゼロです。(これが問題になる場合は、10.11 でドライバーをテストしています。)
キャラクターデバイスを参照するすべてのファイル記述子が閉じられたら、ドライバーをアンロードしたいのですが、うまくいかないようです。
AppleのドキュメントによるとOSKextRetainKextWithLoadTag
:
autounload が有効な場合、kext の最後の参照がドロップされた直後に、kext への未解決の参照がなく、その Libkern C++ サブクラスのインスタンス (存在する場合) がない場合、kext はアンロードされます。
...
IOService のサブクラスを定義する Kext では、autounload が自動的に有効になります。他の kext は、参照カウントを使用して自動アンロードを管理でき、Libkern C++ オブジェクトを定義および作成する必要はありません。
前述のように、私の kext にはIOService
サブクラス (さらに言えばクラス) がないため、OSKextRetainKextWithLoadTag
.
ただし、すべてのファイル記述子が閉じられた後、kext は永久にロードされたままになります。
さらに、一般的な kext でアンロードがサポートされなくなった場合にIOService
備えて、(プロバイダーとして) サブクラスを提供するシン C++ ラッパーで開始ルーチンと停止ルーチンをラップした kext の「ハイブリッド」バージョンを作成しました。同じ結果です。IOResources
OSKextRetainKextWithLoadTag
( andを使用する一般的な kext の例をいくつか見つけましOSKextReleaseKextWithLoadTag
たが、それらは非常に古く、最近のバージョンの OS X に対して機能するかどうかはわかりません。)
私が間違っていることは何か分かりますか?
ありがとうございました。
c - No such device or address が原因でデバイス ファイルを開くことができない
キャラクターデバイスドライバー(カーネルモジュール)を作成しようとしています。モードが読み込まれ、以下に示すようにキャラクター デバイスが作成されます。
しかし、テスト アプリケーションを使用してデバイスを開こうとすると (ドライバー内の open 関数は、デバッグ メッセージの出力以外に特別なことは何もしません)、次のエラーが発生します。
/proc/devices の内容は次のとおりです。
メジャー番号が 246 のデバイスが存在します。
これは、デバイスを開こうとする方法です。
これは、LKM のスニペットです。
誰でもエラーを見つけるのを手伝ってもらえますか? 必要に応じて、完全なコードを投稿します。
linux - Linux カーネル モジュールの ioctl で ENOTTY を取得する
次のchardevが定義されています:
.h
モジュール .c
私のユーザーコード
常に同じエラーで失敗します:ENOTTY
デバイスの不適切な ioctl
同様の質問を見たことがあります:つまり
Linux カーネル モジュール - IOCTL を使用すると ENOTTY が返される
Linux カーネル モジュール/IOCTL: デバイスの不適切な ioctl
しかし、彼らの解決策は私にはうまくいきませんでした