概要
sysfsは、
Linuxカーネル2.6で導入された仮想
ファイルシステムです。このシステムは、デバイスやドライバに関する情報をカーネルモデルからユーザ空間にエクスポートし、設定や管理を容易にする機能を提供します。sysfsはBSDシステムのsysctlに似ていますが、
ファイルシステムという形で実装されている点が特徴です。
歴史
sysfsは、Linuxドライバモデルが導入された2.5開発サイクル中に生まれました。これは、Linuxバージョン2.4におけるいくつかの問題点を解決するためのものでした。具体的には:
- - ドライバとデバイス間の関係を示す統一された方法が欠けていた
- - ホットプラグ機能の不足
- - procfsが多くの非プロセス情報で混雑していた
これらの課題を解決する目的で、sysfsはデバイスツリーの情報をエクスポートするよう設計されました。これにより、procfsの混雑を回避できると考えられています。sysfsはPatrick Mochelによって実装され、その後Maneesh Soniがメモリ使用量を減らすための改善を行いました。
元々、sysfsはddfs(Device Driver Filesystem)と呼ばれており、新しいドライバモデルのデバッグを目的に作成されていました。プロセスは、デバイスツリーのデバッグにprocfsを利用して行われていましたが、Linus Torvaldsの要請によって、新しい
ファイルシステムに改められました。最終的に、driverfsと改名され、さらなる開発を経てsysfsとして定着しました。2.5開発の翌年には、その基盤技術の有用性が認識され、kobjectというオブジェクト管理メカニズムが導入されたことが必要でした。
技術的概観
sysfsの中では、個々のオブジェクト(ドライバ、デバイス)に対してディレクトリが生成されます。これにより、親子関係が物理的な配置に基づいて表示されます。具体的には、`/sys/devices/`以下のサブディレクトリにデバイス情報が反映され、`/sys/block/`がブロックデバイスを、`/sys/class/`がネットワークなどのクラス別に分類されたデバイスを示します。
各ドライバやデバイスに対しては、単純なファイルである属性を作成できます。これらのファイルは、デバイスドライバのサブディレクトリに現れ、属性グループを使うことで、整理されたサブディレクトリも作成が可能です。
バスの種類
様々なバスがsysfsでサポートされています。これには次のものが含まれています:
- - PCI: PCIデバイス情報をエクスポートします。
- - USB: USBデバイスとホスト情報を提供します。
- - S/390バス: S/390アーキテクチャ用のデバイスを含んでいます。特定のサブバスが存在し、特定のデバイス管理が行われます。
また、I/Oサブチャンネル向けのドライバや、CCW駆動のデバイスを含むccwやccwgroupなど、特定のニーズに応じたバスも存在します。
sysfsとユーザ空間
sysfsは、udevやHALのようなユーティリティを通じてハードウェアやドライバに関する情報にアクセスするために利用されます。以前はprocfsを介して取得されていた情報を元にしたスクリプトもあり、これを通じてデバイスドライバの設定が行われるようになりました。
まとめ
sysfsは、Linux環境におけるハードウェア管理とドライバの情報提供を円滑に進める重要な役割を果たします。その機能は、開発者にとってだけでなく一般ユーザにとっても、デバイス管理を容易にし、システムの柔軟性を向上させています。