sysfs
100%

デバイス · レッスン 4

sysfs

sysfs が `/sys` 以下に Linux カーネルの稼働中のデバイス、ドライバー、バス、クラスモデルを公開する仕組みを学びます。

sysfs は通常 /sys にマウントされる仮想ファイルシステムです。ディレクトリ、シンボリックリンク、小さな属性ファイルを通じて、カーネルオブジェクトとその関係を表します。デバイス検出ツールやデバイスマネージャーは、カーネルの現在のデバイスモデルを把握するために sysfs を使います。

デバイスモデルをたどる

重要なトップレベルのビューには次のものがあります。

  • /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 属性への書き込みが運用上重要な操作になり得るのはなぜですか?

レッスン完了

sysfs を完了しました

sysfs を、稼働中のカーネルオブジェクトを構造化して示すビューとして使えるようになりました。

  • デバイス、クラス、バス、ブロック、デバイス番号の各ビューをたどる。

  • 文書化された属性を、正しい単位で一つずつ読み取る。

  • sysfs オブジェクトと /dev ノードを対応付ける。

  • 書き込み可能属性を、稼働中の制御インターフェースとして扱う。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
次のレッスン
デバイス に戻る