問題タブ [userspace]
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-kernel - SYSFS を使用してカーネルからユーザー空間アプリケーションに通知を送信する方法
「コールバック関数を呼び出すために、カーネル空間からユーザー空間アプリケーションに通知を送信する必要がある」USB ACM ドライバーで作業しています。コードでカーネルからユーザー インターフェイスへの使用についてはあまり知りません。このシナリオでsysfsがどれだけ役立つか。コードに実装するアイデアを得るために、sysfs を使用するサンプル コードを送信してください。どこにも見つかりませんでした。また、カーネルからユーザー空間への通知を実現する簡単な方法を教えてください。前もって感謝します。
linux - get_user() を使用してユーザー空間からカーネル空間にデータを送信する方法は?
ユーザー空間でパラメーターの値を計算しましたが、整数値をカーネル空間に渡したいと考えています。を使用する必要があることはわかっていget_user(x, ptr)
ますが、カーネル モジュールへのポインターを提供する方法がわかりません。
ユーザー空間コードに整数変数があり、それへのポインターを見つけることができます。ただし、カーネルコードで使用できるように、ポインターを事前に知っておく必要があります。両方のコードで使用できるように、特定のメモリ位置 (つまり 0x...) を整数変数に割り当てる必要がありますか?それとも別の回避策がありますか?
このデータ転送のオーバーヘッドを最小限に抑えたいと考えています。
c - ユーザー空間から sk_buff へのアクセス
スイッチでやってます。パケットは特別なギガビット ポート経由でカーネルに入ります。各パケットの前には、パケットが最初に入ってきたスイッチ ポートを示すヘッダーが付きます。
私は、パケットに応答するためにポートを知る必要があるプロトコルに取り組んでいます。電力割り当て、OAM、802.1X などすべてにこの問題があることを想像できます。
スイッチのポート番号を sk_buff の新しいフィールドに保存します。問題ない。
しかし、ユーザー空間では、recvfrom を使用してパケットを受信しており、sk_buff にアクセスできません。私は sll_ifindex にアクセスできるので、VLAN を含め、パケットが入ってきたインターフェイス (eth0.2 など) を知ることができますが、すべてのパケットが特別なギガビット ポートに入っているため、これは必要なものではありません。元のポートが必要です。
sockaddr から sk_buff までさかのぼる方法はありますか? 途中でパケットがコピーされているため、その前のバイトにアクセスできなくなります。少なくとも今は skbuff にもアクセスできません。この情報の別のキューを維持し、別のチャネルまたは何かを介してそれを通信するなど、不安定なものを思い付くことができましたが、それは問題があるようです.
アイデア?
linux-kernel - Linux カーネル モードで、ユーザー空間コマンドを実行する方法
カーネル モードで execve をフックします (system_call_table エントリ __NR_execve を関数に変更します)。ELFのアセンブリコードを確認したい。害がある場合は実行せずにそのまま戻ります。
Linuxモジュールを書いています。Linux カーネル モードで、objdump を使用して ELF ファイルを分解したいと考えています。ユーザーモードで objdump を実行し、カーネルモードに戻りたいです。これは可能ですか?ありがとうございました。
windows - ユーザー空間とカーネル空間の間でメモリを共有する方法
ユーザー空間とカーネル空間の間でメモリを共有する必要があります。メモリはユーザー空間に割り当てられ、カーネルでは物理アドレスを使用してメモリ記述子リストを作成し、DMA コントローラー (FPGA に常駐) を初期化します。
WEC2013 を搭載した Zynq (ARM+FPGA) を使用しています。
Microsoft は、「IOCTL メソッド」と「共有メモリ オブジェクト」メソッドの2 つのメソッドを提供していますが、どちらも使用できません。
- IOCTL: メソッド パラメーターが Windows Embedded Compact によって無視されるため、METHOD_xxx_DIRECT を使用できません。IOCTL に関する MSDN
- 共有メモリ オブジェクト: メモリは既にユーザーによって割り当てられているため、(CreateFileMapping を使用して) 名前付きメモリ オブジェクトを作成できません。データのコピーに時間がかかりすぎます。
これを行う別の方法はありますか?または、ユーザー空間で MDL を取得できますか?
char - ユーザー空間プログラムからデバイスファイルにデータを書き込めません
カスタム デバイス用のカーネル モジュールを開発しています。実際には、アドレス 0x0120 ~ 0x0123 の ISA バスに 4*8 ビットの io ポートが接続されています。このドライバーは、Alessandro Rubini と Jonathan Corbet による「スカル」に基づいています。私のOSはUbuntu 10.04で、カーネルは2.6.32-74ジェネリックで、組み込みのコンソール指向コンパイラgccを使用しています。モジュールが正常にロードおよびアンロードされ、読み取りおよび書き込み機能が実装されました。この方法で実装したデバイスファイルからの読み取り:
}
すべてが機能し、ステータスバーにデバイスから読み取った文字列が表示されます。しかし、デバイスファイルを書き込もうとすると、問題が発生します。デバイス ファイルを書き込む関数が常にエラーを報告します。
/li>
-ちょうど ET3201 == NULL のように常に。この時点でカーネル モジュールがロードされ、そこからの読み取りは問題ありません。デバッグ後、カーネル ログに対応する「printk」メッセージが出力されないため、カーネル モジュールの「Write」関数が呼び出されないことがわかりました。必死になって、私はこのようにしようとしました:
ステータスバーにエラーメッセージが表示されます: Error: g-file-error-quark: 2, Failed to create file '/dev/ET32010.****8X': Permission denied g_file_set_contents が一時ファイルに書き込むためだと思います次に、「許可が拒否されました」というデバイスファイルに名前を変更しようとします。これはデバイス ファイルの書き方が間違っている可能性があります。正しい方法を見つけるのを手伝ってください...
私の質問: 関数 on_BnStop_clicked が正しく動作しないのはなぜですか? ユーザー空間プログラムからcharデバイスファイルに正しく書き込む方法は?
デバイスのアクセス権を確認しました...
次に、カーネルモジュールのinitスクリプトでモードを666に変更しました
on_BnStart_clicked 関数は以前と同様に「許可が拒否されました」を返しましたが、on_BnStop_clicked はカーネル モジュールの「書き込み」メソッドを呼び出し、ERR == NULL で正常に完了しました。結局、エラー報告機能は「セグメンテーション違反」(reporting ERR == NULL) でクラッシュしましたが、私はすでにこのバグを修正しました。
memory-management - プロセスのメモリ管理に関する質問
オペレーティング システムに関する質問はほとんどありません。私はグーグルでよく検索しますが、答えを見つけることができません。誰でも私を助けてください。
Q1. カーネルによってユーザープログラムが利用できるメモリの量はどれくらいですか?それに制限はありますか?
Q2. ユーザープログラムが持つことができるアドレスの最大範囲は何ですか?それを決定するものは何ですか?
Q3. 無限ループの malloc など、ユーザー プログラムに余分なメモリが割り当てられた場合はどうなりますか?