Sysfs

sysfsはLinuxカーネル2.6によって提供される仮想ファイルシステムである。sysfsはデバイスやドライバについての情報をカーネルモデルからユーザ空間へエクスポートし、設定のためにも使われる。BSDシステムにある 機構に似ているが、分離した機構の代わりにファイルシステムとして実装されている。

 歴史 
2.5開発サイクル中、バージョン2.4における以下のいくつかの欠点を修正するために、Linuxドライバモデルが導入された。
 ドライバとデバイスの関係を表す統一された方法が無かった。
 一般的なホットプラグ機構が無かった
 procfsはたくさんの非プロセス情報で散らかっていた。

sysfsはにある情報をエクスポートするように設計されており、それはもはやprocfsを散らかさないと考えられる。sysfsはPatrick Mochelによって実装された。Maneesh Soniは後に大きなシステム上におけるメモリ使用量を減らすためにsysfsの外部記憶装置パッチを書いた。

sysfsは元々ramfsに基づくインメモリのファイルシステムである。ramfsはLinux 2.4.0が安定化されていた頃に実装された。ramfsは当時新しかった VFSレイヤーを使って単純なファイルシステムを実装することがどれほど易しいのかだけを示したので、簡潔さの見本だった。単純さとVFSの使用のために、良いベースを提供し、他のインメモリベースのファイルシステムがそこから派生した。

sysfsは元々ddfs (Device Driver Filesystem) と呼ばれており、始め、実装されているとき新しいドライバモデルをデバッグするために作成された。以前はデバイスツリーをエクスポートするためにprocfsを使うことでデバッグが行われていたが、リーナス・トーバルズからの強い要請の下で、ramfsに基づく新しいファイルシステムに変えられた。新しいドライバモデルが2.5.1あたりでカーネルにマージされるときまで、少しだけより説明的になるようdriverfsに名前が変えられた。

2.5開発の次の年の間、デバイスモデルとdriverfsの下部構造機能は他のサブシステムに有用であると分かり始めた。kobjectが中心的なオブジェクト管理機構を提供するために開発され、サブシステムにとらわれないということを表すためにdriverfsはsysfsに名前が変更された。

 技術的概観 
ドライバモデルツリーに追加された個々のオブジェクト（ドライバ、クラスドライバを含むデバイス）に対して、sysfs内にディレクトリが作られる。親と子の関係は（物理的な配置を反映して）/sys/devices/の下のサブディレクトリに反映される。サブディレクトリ/sys/bus/はシンボリックリンクが置かれており、どのようにデバイスが異なるバスに所属しているのかを反映している。/sys/block/がブロックデバイスを含む一方で、/sys/class/はネットワークのようなクラスによって分類されたデバイスを表している。

デバイスドライバやデバイスに対して、属性を作ることができる。これらは単純なファイルである。（重いパース処理が必要なprocfs内の一部のファイルとは異なり）それらは単一の値のみを含んだり単一の値を設定したりできるようにすべきであるということになっている。これらのファイルはデバイス個別のデバイスドライバのサブディレクトリに表れる。属性グループを使うことで、属性で満たされたサブディレクトリも作成できる。

 いくつかのバス 
 PCI 
PCIデバイスについての情報をエクスポートする

 USB 
USBデバイスとUSBホストの両方を含む

 S/390 バス 
S/390 アーキテクチャが他に見つからないデバイスを含んでいるとき、特別なバスが作成される。
 css: サブチャンネルを含む（現在、提供される唯一のドライバは I/O サブチャンネル向けである）。
 ccw: チャンネル接続デバイスを含む（CCW によって駆動される）。
 ccwgroup: ユーザによって作られ ccw デバイスを含む、人工的なデバイス。2.4 chandev 機能の一部を置き換える。
 iucv: VM の IUCV インターフェイスを使う netiucv デバイスのような人工的なデバイス。

 sysfsとユーザ空間 
sysfsはudevやHALのようなハードウェアとドライバ（カーネルモジュール）についての情報にアクセスするためのいくつかのユーティリティによって使われる。スクリプトは以前procfsを通して得られた情報にアクセスするために書かれてきており、一部のスクリプトは属性を通してデバイスドライバやデバイスを設定する。

 関連項目 

、BSDシステムで使われる代わりとなる設定のエクスポート方法

 外部リンク 
 LWN の 2.6 への移植シリーズより、ドライバモデル概観
 LWN の 2.6 への移植シリーズより、kobject と sysfs
 Ramfs
 The sysfs Filesystem, OLS'05

Category:Linuxのファイルシステム
Category:システムソフトウェア
Category:オープンソースソフトウェア