sysfs は通常 /sys にマウントされる仮想ファイルシステムです。ディレクトリ、シンボリックリンク、小さな属性ファイルを通じて、カーネルオブジェクトとその関係を表します。デバイス検出ツールやデバイスマネージャーは、カーネルの現在のデバイスモデルを把握するために sysfs を使います。
デバイス · レッスン 4
sysfs
sysfs が `/sys` 以下に Linux カーネルの稼働中のデバイス、ドライバー、バス、クラスモデルを公開する仕組みを学びます。
デバイスモデルをたどる
重要なトップレベルのビューには次のものがあります。
/sys/devices/: 物理デバイスと論理デバイスの階層/sys/class/: block や network など、機能クラス別にまとめたデバイス/sys/bus/: バス、そのデバイス、ドライバー/sys/block/: ブロックデバイスの便利なビュー/sys/dev/: キャラクターまたはブロックのメジャー番号とマイナー番号で索引付けされたリンク
/sys/devices 以外にある多くの項目は、正規の階層を指すシンボリックリンクです。実際の親パスが必要なら、readlink -f でリンクを解決します。
$ readlink -f /sys/class/block/sda
異なるストレージインターフェースを使うシステムには、この例の名前が存在しない場合があります。
カーネルの主要なデバイス階層を含む sysfs のサブツリーはどれですか?
属性を読み取る
属性ファイルは、個別の値や制御を公開します。ブロックデバイスでは、次のような例があります。
$ cat /sys/class/block/sda/dev
8:0
$ cat /sys/class/block/sda/ro
0
$ cat /sys/class/block/sda/size
1953525168
dev はメジャー番号とマイナー番号を報告します。ro はブロックデバイスの読み取り専用フラグです。Linux のブロックデバイスでは、size は物理セクターサイズにかかわらず、慣例として512バイトセクター単位で表されます。特定の属性の単位と意味は、必ずカーネル ABI の文書で確認してください。
ブロックデバイスの sysfs dev 属性には通常何が含まれますか?
`/sys` と `/dev` の関係
/dev には、アプリケーションがデバイス I/O のために開くノードがあります。/sys は、オブジェクトの関係、属性、状態、選択された制御を公開します。/dev/sda のようなブロックノードは /sys/dev/block/8:0 と対応付けられ、後者を解決すると該当する sysfs オブジェクトへ到達します。
二つのインターフェースは互いを補完します。どちらか一方だけにハードウェアの全情報が揃っているわけではなく、調査中にデバイスが消えることもあります。
/sys と /dev を正しく区別している説明はどれですか?
属性へ安全に書き込む
sysfs の属性には書き込み可能なものもあり、電源状態、ドライバーのバインド、キューの動作、デバイスの認可、LED など、稼働中の制御を変更できます。テキストの書き込みが成功すると、ハードウェアやサービスへ直ちに影響する場合があります。永続設定ファイルの編集と同じではありません。
文書化された ABI と現在値を読み、設定を永続化する正しい方法を確認したうえで、許可されたシステムだけでテストしてください。/sys 全体の権限を再帰的に編集したり、推測した値を書き込んだりしてはいけません。
sysfs 属性への書き込みが運用上重要な操作になり得るのはなぜですか?
Linux でハードウェアデバイスを調査するを利用して、sysfs を読み取り専用でたどり、デバイスノードと対応付けてください。
レッスン完了
sysfs を完了しました
sysfs を、稼働中のカーネルオブジェクトを構造化して示すビューとして使えるようになりました。
デバイス、クラス、バス、ブロック、デバイス番号の各ビューをたどる。
文書化された属性を、正しい単位で一つずつ読み取る。
sysfs オブジェクトと
/devノードを対応付ける。書き込み可能属性を、稼働中の制御インターフェースとして扱う。