問題タブ [sysfs]
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 - エラーをチェックするためにユーザー空間内のデバイスの制御レジスターをポーリングする
PCI デバイスで発生したユーザー空間でエラーをログに記録するコードを書いています (カーネルは既にカーネル リング バッファーにログを記録しています)。現在、目の前に2つのアプローチがあり、
(eventfd を使用して) ユーザー空間プロセスに割り込みを送信するようにカーネル デバイス ドライバーを変更し、(select() または poll() を使用して) この割り込みを受信すると、ioctl を使用して詳細なエラー情報を取得できます (デバイス ドライバーの変更が必要になります)。 )。これには、避けたいカーネルコードの変更が必要です。
私のプロセスはルートとして実行されるため、sysfs を使用してデバイスのエラー ステータス レジスタを読み書きできます。このためには、常にレジスタをポーリングする必要があり、エラーが発生したら、ステータス レジスタを読み取ってデコードし、詳細なエラー情報を取得して、レジスタをクリアします。
ユーザー空間でのみ変更が必要なため、2 番目のアプローチに傾倒しています。
私の質問は次のとおりです。
- 2番目のアプローチは理にかなっていますか?
- もしそうなら、両方のアプローチの長所と短所は何ですか?
- 2 番目の方法でポーリングを行うと、CPU サイクルが浪費されます。最初のアプローチで select() または poll() を使用すると、同様の割合で CPU サイクルが浪費されますか。
役立つ回答をいただければ幸いです。:)
linux - 一般に、ucLinux では、ioctl は /sys ファイルシステムへの書き込みよりも高速ですか?
私が使用している組み込みシステムがあり、現在、sysfs を使用して特定の機能を制御しています。
ただし、できれば高速化したい機能があります。
このサブシステムは ioctl インターフェイスもサポートしていることを発見しましたが、コードを書き直す前に、(ucLinux 上で) 一般的にどちらがより高速なインターフェイスであるかを検索することにしました: sysfs と ioctl.
両方の実装を十分に理解して、それぞれのオーバーヘッドの違いを大まかに理解できる人はいますか? 「関数呼び出しからファイルレイヤーを削除したため、ioctlの方が高速です」などの一般的な情報を探しています。または、「sysfs は非常に単純なインターフェースを備えているため、それらはほぼ同じです」。
2013 年 10 月 24 日更新:
私が現在行っている特定のケースは次のとおりです。
kernel/power/main.c では、この書き込みを処理するコードは次のようになります。
ioctl 呼び出しを処理するコードが次のようなカスタム ioctl() に移動することで、これを高速化できますか。
(したがって、ioctl() は sysfs 関数が行ったのと同じ低レベル関数を呼び出します)。
memory - Linux カーネルでメモリ インターリービングとメモリ分割が行われる場所はどこですか?
Linuxカーネルのsysfs仮想ファイルシステムに関するコースの宿題に取り組んでいます。sysfs 仮想ファイル システムのセットアップの一環として、Linux カーネルは物理メモリをブロックに編成し、さらにこのディレクトリ sys/devices/system/memory 内のセクションに編成します。そのディレクトリでは、メモリ チャンクは、memory0、meomory1、memory2 などとして表されます。
Linuxカーネルを掘り下げた後、メモリが128MBのブロックに分割され、さらにメモリのセクションに分割されていることがわかり、これを行うコードがCファイルのMemory.cにあることがわかりました。上記のCファイルでは、メソッドmemory_dev_init()には、メモリブロック全体を分割してセクションに分割するためのロジックがあります(または、それが私が理解したものです:))。私の教授によると、Linux のメモリはランクに分割され、ランクには以下に示すようにインターリーブされたメモリ アドレスが含まれます。
宿題の一環として、ランク形式を次のように変更して、連続したメモリ ブロックを取得できるようにします。
したがって、現在の Linux カーネルで、このメモリ インターリービングがどこで行われているか、既存のランキングがどのように行われているかを知りたいだけです。誰かが私を正しい方向に向けてもらえますか?
android - sysfs のフォルダー内にフォルダーを作成する方法
Android で私の実装用の sysfs を作成しようとしていますが、.NET で自分のフォルダーを作成することに固執していますCLASS
。
私の要件:
コード:
ここにコードを貼り付けました。この点で私を助けてください。
linux-kernel - Linux で実行中のプロセスのプリエンプション数をカウントする
ユーザー空間から特定の PID のプリエンプションをカウントする方法はありますか? プロセスがプリエンプトされた回数を測定することに興味があります。
c - /proc/partitions 物理ディスクとパーティションを検出するためのメジャー番号とマイナー番号
出力から物理ディスク ( /dev/sda
) と論理ディスク ( )を区別したい。/dev/sda1
/proc/partitions
- 私が見る簡単な方法の1つは、整数で終わるかどうかを正規表現パターンで確認することです
- 私のマシンの出力を見ると、すべてのエントリ
sda
よりもマイナー値が最小ですsdaN
- の存在を確認するので、(失敗する) ディレクトリと(成功する) ディレクトリ
/sys/block/[NAME]
を読み込もうとします。/sys/block/sdaN
/sys/block/sda
どれが信頼できるかわかりませんが、他に方法はありますか?
また、次のようなツリー構造を確実に作成するにはどうすればよいですかsda : {sda1, sda2, sda3, sda4, sda4}, sdb : {sdb1}
- その名前だけで
- マイナー番号による
- もう一度調べて
/sys/block
- 位置順 (sda1 は常に sda の後に来ることが確認されていますか? たとえば、論理パーティションのエントリは常に物理ディスクのエントリの後に来るのでしょうか?)
linux - Linuxカーネルモジュールのsysfs属性ファイルから文字列を読み取る方法は?
基本的に、「abcdefg」などの文字列を含む「myconfigfile」などの構成ファイルが必要です。
この文字列をカーネル モジュールの値として読み取りたいと考えています。つまり、char*
そのファイルから値「abcdefg」を取得するコードをコードに入れたいと考えています。私が理解していることから、sysfsを使用する必要があります。ここに私の質問があります:
- ファイルを作成して
/sys/module/path/to/my/module
ディレクトリに移動するだけですか? - ファイルを利用できる場合、値を正確に読み取るにはどうすればよいですか? ファイルが「myconfigfile」と呼ばれているとします。このドキュメントを読みましたが、率直に言って、理解できません。