問題タブ [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.
c - sysfs、ifreq、IOCTL または ??? ネットワークの状態をプログラムで監視する
BusyBox Linux (カーネル 2.6.x) を実行する組み込み SoC があり、ネットワーク接続がダウンまたはアップしたときにタイムリーに監視するか、少なくとも通知する必要があります (他のイベントをキャッチすることは良いことですが、必須ではありません)。 .
私は長い間SOスレッドをグーグルで読んだり読んだりしてきましたが、特定のOSや月の満ち欠けなどで手元にある正確なタスクに応じて、さまざまな答えがあるようです.
私たちの具体的な基準は次のとおりです。
- C プログラムの内部から見ているので、コマンド ライン呼び出しよりも C コードの方が適しています。
- インターフェースは常にそこにありますが、それが稼働していること、または稼働していたことを保証することはできません (リンク
up
が.down
- ポーリングする必要はなく、ステータス変更メッセージが発生したときに送信/キャッチする方がよいでしょう。カーネルはすでにドライバーからそのようなメッセージを受け取っていると思いますが、フックできるものがあるかどうかはわかりません。
考えられる回答をいくつかの候補に絞り込みましたが、どれが最も優れているかはわかりません (オーバーヘッドが最も少なく、信頼性が高く、将来のバージョンで壊れる可能性が最も低い):
embedded - /sys/kernel/debug/gpio が空になるのはどのような状況ですか?
概要
私の目的は、Intel マザーボード (C1037U プロセッサを搭載した NM70 チップセット) 上の Peppermint 4 Linux (カーネル バージョン 3.8.0) で GPIO ピンを制御することです。
sysfs インターフェイスを使用して発生している問題をデバッグしており、/sys/kernel/debug/gpio が空になる条件を理解しようとしていますか?
ピン 0 ~ 255 をエクスポートしようとすると、
echo XX > /sys/class/gpio/export
XX が 0 から 255 の場合、次のエラー メッセージが表示されます。
echo: write error: No such device
/sys/kernel/debug/gpio が空になるのはどのような状況ですか?
バックグラウンド
- マザーボード: NM70 チップセットを搭載した Intel
- プロセッサ: C1037U プロセッサ
- OS:ペパーミント4リナックス
- カーネルバージョン: 3.8.0
- GPIO インターフェース: sysfs
ファイルシステムを介してユーザー空間から GPIO ピンにアクセスできるようにする sysfs インターフェイスを使用しようとしています。
ユーザー空間でGPIOアクセスを公開し、 GPIO のデバッグ モードをオンにします。
新しいカーネルがコンパイルされると、初めて /sys/class/gpio に GPIO フォルダーが表示されました。そして、理論的には、ファイルシステムへの書き込みによって GPIO ポートのオン/オフを切り替えることができるケースになるはずです。このアプローチはhttp://falsinsoft.blogspot.co.uk/2012/11/access-gpio-from-linux-user-space.htmlで概説されています。
ピン 0 ~ 255 をエクスポートしようとすると、
echo XX > /sys/class/gpio/export
XX が 0 から 255 の場合、次のエラー メッセージが表示されます。
echo: write error: No such device
0 ~ 255 の範囲外のピンをエクスポートしようとすると、
echo XX > /sys/class/gpio/export
次のエラー メッセージが表示されます
echo: write error: Invalid argument
チュートリアルでは、GPIO ポートが別のプログラム用に予約されていることが原因である可能性があり、その場合、デバッグ ファイル (/sys/kernel/debug/gpio) はそれらが予約されている場所を示すことができると示唆しています。
ただし、/sys/kernel/debug/gpio は空です。
BIOS で GPIO ピンを表示および制御できます (ピンを入力または出力 HIGH/LOW に変更します)。
関連する質問
linux-kernel - 仮想ファイル システムとシステム コールの違いは何ですか?
私が理解しているように、カーネルは主に、ユーザー空間がカーネルで何かを行うための 2 つのインターフェイスを提供します。これらは、システム コールと仮想ファイル システム (procfs、sysfs など) です。私が本で読んだことによると、VFS は内部的に System Call も使用しています。
だから私は知りたいのですが、これら2つはどのように正確に接続されていますか? また、VFS over System Call を使用する必要がある状況と、その逆の状況はどのようなものですか。
embedded-linux - 組み込みデバイスで /dev の代わりに sysfs を使用する
これまで、組み込み Linux に関する書籍では、/dev ノードを使用してユーザー空間からデバイスと通信する方法について説明していました。しかし、sysfs 経由でドライバーと通信するデバイスがますます増えています。これを行う方法について明確な説明が見つかりませんでした。これは、読み取り/書き込み fops を介した場合と同じように機能しますか?
チュートリアル/説明はありますか? 私はLinuxデバイスドライバーの第3版を所有しています。これは、ドライバーと対話するための/ devインターフェイスと、いくつかの情報を表示するための/ sysfsのみを説明しています。
sysfs - sysfs なしでファイルシステムを使用できますか?
ファイルシステムとカーネルでsysfsを無効にするカスタムLinuxを使用しようとしています。ドライバの使用方法、または sysfs を使用するドライバを使用する場合に必要な変更についてお尋ねしたいと思います。
ありがとう、ラン
linux - Linux ファイル システムのどこにボード電圧モニター ドライバーを配置すればよいですか?
私の知識レベル
こんにちは、私は Linux の初心者であり、Linux デバイス モデルとファイル システムについて調べるために最善を尽くしています。私が探しているものを尋ねる/グーグルする語彙を持っていない場合は申し訳ありません(私はPCBデザイナーのバックグラウンドを持っています)。ここで少し頭がいっぱいです。
私が読んだいくつかのドキュメント:
- http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html (これは /dev についてのみ述べています)
- https://www.kernel.org/doc/Documentation/sysfs-rules.txt (この混乱は私を悲しませます)
質問
さまざまな PCB レール電圧モニター用のドライバーを実装しようとしています。ADC 値は、SPI 経由でメイン プロセッサと通信する MCU によって読み取られます。この MCU は GPIO 制御も行います。これについては、既に動作する /sys/class/GPIO ドライバーを作成しましたが、正直なところ、完全には理解できません。
したがって、ADC 側でも /sys の下のどこかにいるべきだと考えていますが、どこにあるのかわかりません。/デバイス? /クラス?
私の理解では、/dev または /proc はドライブや CPU などのためのものであるため、ビルドすることはできますが、すべきではありません。
私が検討しているオプションの 1 つは、カスタム クラスを作成することです。/sys/class/boardvoltage かな?しかし、これは開発者が作成する一般的なドライバ ボードである必要があり、適切な属性を持つクラスが既に存在すると考えています。
ボーナス質問
より広い意味で、ドライバー開発者は各クラスの目的をどのように知る必要があるのでしょうか? 各タイプのクラスにアクセスするさまざまな方法をどのように学習しますか? たとえば、/dev ドライバーが読み取りと書き込みを行う間、GPIO は「cat」または「echo」されます。/sys/class/leds のようなものを実行する方法を学ぶにはどうすればよいですか?