問題タブ [ioctl]
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ユーザースペースとカーネルスペースの間にコード実行速度の違いがあるのはなぜですか?
Linuxユーザースペースとカーネルスペースで単純なwhileループコードを実行し、経過時間を測定すると、違いが得られます。
テストコードは、ArmCortexSoCチップの一部のハードウェアレジスタにアクセスすることです。
結果は、
ユーザーレイヤー:5202.16ミリ秒
カーネルレイヤー:32650.53ミリ秒です。
カーネルレイヤーはユーザーレイヤーより1.6倍高速でした。
c++ - 操作をブロックするioctl
フレームバッファにアクセスするために ioctl 関数を使用しています
問題は、フレームごとにフレームバッファを 3 回書き込んでいることです
。青い。
つまり、各フレームに 3 つのレイヤーがあり、赤が下、緑、青が上になります。したがって、赤と緑は見えず、青しか見えません。
さて、私の質問は、ioctl 呼び出しを使用すると、赤と緑を認識できず、青だけを認識できるように見えるということです。
フレームごとに、次のようなことを行いました。
そして、私の getFrameBuffer() は次のようなものです:
これまでのところ、getFrameBuffer() を呼び出すと、すべて青色が返されます。フレームバッファなどの書き込みをブロックして、 getFrameBuffer() を呼び出したときに赤色が得られるようにする方法はありますか?
c++ - フレームバッファを一時的にロックする
以前、 ioctlで同様の質問をして、操作をブロックしました。
より一般的には、フレームバッファの上書きをブロックする方法を知りたいです。
私のフレームバッファーは3つのレイヤーで構成されており、システム/ハードウェア呼び出しであるioctl関数を使用して、ハードウェアから直接フレームバッファーを取得するために、
一番下のフレームバッファーにアクセスしたいと考えています。
opencvとは何の関係もありません。私は他の方法を試しましたが、これまでのところ、同じように機能します。基本的にフレームバッファは全体が青色で返されますが、赤色にしたいです。Red()を呼び出す前にロックし、getFrameBuffer()の後にロックを解除する必要があるということですか?とにかく、データを取得するまでフレームバッファの書き込みをブロックしますか?
編集:ioctlアプローチの前に、getFrameBuffer()で、glReadPixelsを使用しましたが、正常に動作します。赤い色を返します。しかし、速度が遅すぎて、ioctl呼び出しを使用して速度を向上させたいと思っていました。getFrameBufferには、次のようなものがあります。
c - char デバイスは、複数の (int) ioctl 引数をキャッチします
unlock_ioctl ごとに ioctl (BKL なし) 関数を処理する Linux char デバイスを作成する必要があります。現時点では、ユーザー空間の ioctl コマンドから 1 つの引数を受け取ることができます。
複数の int 引数を受け取るにはどうすればよいですか (たとえば、この呼び出し)?:
linux - カーネルへの新しい IOCTL の追加 (番号範囲)
私は新しいカーネル モジュールを作成しており、新しい IOCTL の実装を追加しています。
IOCTL の番号付けで従うべきルールはありますか?
たぶん、いくつかの「ユーザー範囲」がありますか?
組み込みプラットフォームでカーネル 2.6.21 を使用しています。
c - wlan usb デバイスで使用されているドライバーを特定する方法
短い: 特定の USB デバイスで使用されているドライバーを確認する posix の方法はありioctl()
ますか?
そして今、私がそれを必要とする理由:
iwlist から派生し、iwlib を使用する wlan スキャン アプリケーション (USB wlan ドングルを使用するデバイス専用) があります。
簡単に言えば、次のようなものでスキャンを初期化することです。
に保存された結果を待ってから、検出されたネットワークに関する情報を含むトークンにデータをトークン化してwrq.u.data.pointer
解析します。iw_extract_event_stream
struct iw_event iwe
これが背景です。今、私の本当の問題が始まります。信号品質を取得するには、 とラベル付けされたトークンを見つけてIWEVQUAL
から値を読み取る必要がありますiwe.u.qual.qual
。残念ながら、一部のドライバーとシステム アーキテクチャでは、この値は常に間違っています。何らかの理由でドライバーを変更できなかった/変更したくないため、信号レベルを使用して信号品質を計算する回避策を実装する必要がありました。
ご覧のとおり、多くの恣意的な仮定に基づいたかなり汚れた方法であるため、iwe.u.qual.qual
可能な限り元の値を使用することをお勧めします。したがって、現在接続されているデバイスで使用されているドライバーが標準の方法を使用できるかどうか、または上記の hocus pocus を使用する必要があるかどうかを確認したいと思います。
c - すべてのインターフェイスの C/C++ Linux MAC アドレス
次のコードを使用して、現在のコンピューターのすべての MAC アドレスを取得しています。
簡単なシェル コマンド ifconfig を実行すると、lo、eth0、および wlan0 が表示されます。C/C++ コードで eth0 と wlan0 の MAC アドレスを取得したいと考えています。しかし、wlan0 のみが返されます - eth0 がありません (ifr_names lo、lo、wlan0 を取得しました)。おそらく eth0 がアクティブでないためです (イーサネット ケーブルが接続されていないため、ケーブルが返されます)。「オフ」になっている場合でも、その ioctl(SIOCGIFCONF) コマンドを変更して eth0 も取得できますか?
直接使用してHWアドレスを取得できます
しかし、名前が eth0 ではなく、別のもの (eth1、em0、...) になる場合はどうでしょうか? 全部手に入れたいです。手伝ってくれてありがとう。
linux - ioctl関数の実行に関して、64ビットOSでの32ビットモードと64ビットモードでのコンパイルの違いは何ですか?
私は64ビットのEnterpriceSuSE11を持っています。HIDRAWデバイスを開き、その上でioctl関数を操作して、以下のようにこのデバイスから生の情報を取得するアプリケーションがあります。
このプログラムを64ビットモードでコンパイルすると、エラーや問題は発生せず、アプリケーションを実行すると、ioctl関数が正しく機能します。
このプログラムを32ビットモードで準拠させれば、エラーも問題もありません。しかし、アプリケーションを実行すると、ioctl関数はEINVALエラーを返します(errno = 22、無効な引数)
どうしたの?
ノート:
c - OSX Get CD Speed (ioctl)
光ディスクを使用するソフトウェアを配布していますが、デフォルトのフルスピードではノイズが多すぎて許容できません。私の目標は、ioctl を使用してディスクの速度を下げることですが、/Volumes/MyDisk/Application から /dev/disk(n) を見つける方法がわかりません。
以下は私がこれまでに持っているものですが、ディスクパスをハードコーディングしたくありません。
visual-c++ - ERROR_INVALID_HANDLE
mpusbapi.hで定義されている次の関数を使用しようとしています
test.cppでこれらを使用すると、次のようになります。
コンソール出力は次のとおりです。
MPUSBWriteが0を返すということは、書き込み機能が失敗したことを意味します。エラーコード6はERROR_INVALID_HANDLEに対応します:ハンドルが無効です。
誰もが理由を知っていますか?私には予感がありますが、pipeName
これを確認/修正する方法がわかりません。