問題タブ [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.
c - Linux カーネル syscall がポインタを与えられない
実験として新しい syscall を実装しようとしていますが、常に segfault が発生します。問題は、ユーザー空間にない char 配列へのポインターを返そうとしていることだと思います。GFP_USER を kmalloc のフラグとして使用して、ユーザー空間にメモリを割り当てようとしましたが、問題は同じままです。
これは私がsyscallを呼び出す方法であり、現時点では変更できません(通常は戻り値にメモリを割り当て、パラメーターとして提供します):
syscall 関数の定義は次のようになります。
私はそれを何度もテストしましたが、syscall が正しく呼び出されていることは確かですが、copy_to_user
.
copy_to_user
常に正の値を返します (サイズと等しいため、まったくコピーしません)。
ちなみに ret のアドレスは f74ce400 と str_in 080484ac のようになっています。
誰が何が悪いのか考えていますか?
linux - Linux でユーザー空間アプリケーションを中断する方法
Linux DMA ドライバーを開発しています。ユーザー空間アプリケーションは、ドライバーが非同期操作 (データ転送) を実行し、操作が完了したときにのみ通知を受けることを望んでいます。ユーザー空間アプリケーションはどのように非同期に情報を取得しますか?
カーネル空間では、割り込みハンドラーをインストールして完了割り込みを処理できることを知っています。私のデータはユーザー空間で処理する必要があるため、私の質問はユーザー空間です。私が考えることができるのは、ユーザー空間にスレッドを作成し、ドライバーがタスクを完了するのを待つことです。これを処理するより良い方法はありますか?または私は間違った方向に考えていますか?
より一般的には、ユーザー空間で Linux の割り込みを処理する方法は?
c - カーネルが IPv6 をサポートしているかどうかをユーザー空間からテストする方法は?
カーネルが C/C++ の Linux で IPv6 をサポートしているかどうかをテストする簡単な方法を探しています。socket() 呼び出しが失敗したかどうか、および errno が EINVAL に設定されているかどうかを確認するだけで十分ですか?
android - U-Boot: 変数をユーザー空間にループ
MLO の実行中に変数を作成し、その値を Android のユーザー空間アプリケーションにアクセスできるようにします。これはどのように達成できますか?
1 つの方法は、変数の内容を外部メモリに書き込み、それをユーザー空間プロセスで読み取らせることです。ただし、ブート中に他のプロセスがアドレスを上書きしていないことを確認する必要があります。
他の方法、ATAG を知っていますか? ATAG を使用できる場合、どのようにこれを行いますか? カーネルモジュールの開発は必要ですか?
乾杯
c - Linux NFQUEUE 処理の問題
カーネルモジュールが着信パケットを転送する NFQUEUE ソケットにバインドするユーザー空間アプリケーションを作成しようとしています (NF_QUEUE にタグを付けることにより)。これは、次のような iptables ルールを使用して達成されます。
iptables ACCEPT チェーンは次のようになります。
これは、NFQUEUE ソケット (QNUM は 0) をポーリングするコードです。
問題は、/proc/net/netfilter/nf_queue が使用中のキュー番号 0 ではなく 2 をリストしているため、ユーザー空間プログラムが関連するソケットで着信パケットを検出しないことです。何故ですか?
c - この FOPS 読み取り方法はどのように機能しますか?
私 (および仲間のクラスメート) は、次の質問を理解できません。
「次の FOPS read() メソッドを検討してください。
このメソッドは、パラメーター count=2 で呼び出されます。'len' のサイズは?"
count が 2 であるため、答えが 2 なのか、それとも 'ABCD + /0' = 5 であるため、答えが 5 なのかはわかりません。
ここで何か不足していますか?
c - Linux カーネルはどのように C ライブラリを「リッスン」しますか?
Linux カーネルとユーザー空間で物事がどのように機能するかの「全体像」を構築しようとしていますが、かなり混乱しています。ユーザー空間がシステムコールを利用してカーネルと「対話」することは知っていますが、その方法はわかりません。C ライブラリとカーネルのソース コードを読んでみましたが、複雑でわかりにくいです。また、プロセス、メモリ、デバイスの管理など、オペレーティング システムに関する概念的な事実に関する本も何冊か読みましたが、それらは「移行」(ユーザー空間 -> カーネル) を明確にしていません。では、ユーザー空間とカーネル空間の間の移行は正確にはどこで行われるのでしょうか? C ライブラリは、マシンで実行されている Linux カーネル内のコードをどのように実行しますか?
例えるなら、家があると想像してください。家は施錠されています。家を開く鍵は家の中にあります。家の中にいるのは、カーネルという 1 人だけです。ユーザー空間は、家に入ろうとしている人です。私の質問は次のとおりです。カーネルは、家の外に誰かが鍵を欲しがっていることをどのように認識し、どのメカニズムがその鍵で家を開くことができるのでしょうか?
linux - ユーザー空間から Linux カーネルに登録されている I2C デバイスにアクセスする方法
I2C スレーブ デバイスのレジスタを変更できるようにしたいと考えています。デバイスにはカーネルにドライバーがあり、ドライバーは I2C クライアントをそのアドレスに登録します。
ドライバーは非常に基本的なもので、すべてのデバイス機能を出力します。ユーザー空間からレジスタにアクセスしたいのですが、I2C-dev でアクセスしようとすると、デバイスまたはリソースがビジーというエラーが発生します。
ドライバーに機能を追加したくはありません。デバイス レジスタを変更するユーザー空間アプリケーションを作成することを好みます。
このような場合、どのように I2C-dev を使用してレジスタを変更できますか?
linux-kernel - access_ok() の第二引数に整数を渡すことはできますか?
LDD3の例では、カーネル モジュールのメソッドの先頭access_ok()
に配置され、ioctl
ユーザー空間から渡されたポインターが有効かどうかをチェックします。ユーザー空間アプリケーションがioctl()
システムコールを呼び出して、変数のアドレスを渡す場合は正しいです。ただし、場合によっては、カーネル モジュールioctl()
の第 3 引数、最後に第 2 引数としてポインターではなく値を使用してシステム コールが呼び出されます。access_ok()
access_ok()
の 2 番目の引数として整数を渡そうとしましたが、正常に動作します。エラーは報告されませんでした。しかし、この使用法が正しいかどうかはよくわかりません。
たとえばioctl()
、ユーザー空間で 3 番目の引数を '3' にして呼び出すとします。次に、 のioctl()
メソッドでstruct file_operations
、2 番目の引数としてaccess_ok()
受け取ります。はポインターを想定している3
ため、ユーザー空間ポインターに変換されます。逆に間違ってる…access_ok()
3