最終更新:2015-10-22 (木) 06:03:28 (3071d)
sysfs
Top / sysfs
Linux 2.6 によって提供される仮想ファイルシステム
sysfsは/sysにマウントされた仮想的なファイルシステムで,動作中のカーネルの内部構造がファイルシステムの構造に投影されて表示され,ユーザ領域のアプリケーションから参照したり変更したりできる
ドキュメント
- kernel.org/doc/Documentation/filesystems/sysfs.txt
- kernel.org/doc/Documentation/kobject.txt
- kernel.org/doc/Documentation/sysfs-rules.txt?
- https://www.kernel.org/pub/linux/kernel/people/mochel/doc/papers/ols-2005/mochel.pdf
LFS
マウント
- Linux/initの中で行われる
初期化
メモ
- 内部的にはdevtmpfs
- sysfs ファイルシステムが (/sys に) マウントされると、ドライバーによって sysfs に登録されたデータは、ユーザー空間のプロセスと (デバイスノードの修正を含む) さまざまな処理を行うudevdにて利用可能となります。
- http://lfsbookja.sourceforge.jp/7.6.ja/chapter07/udev.html
Linux/sys
- Linux/sys/block - カーネルが認識しているブロックデバイスの一覧
- Linux/sys/bus - バス別
- バス名/devices - そのバスのデバイスのLinux/sys/devicesへのシンボリックリンク
- バス名/drivers - そのバスタイプに登録されたドライバ(Linux/sys/module)へのシンボリックリンク
- Linux/sys/class - contains representations of every device class that is registered with the kernel.
- Linux/sys/dev
- Linux/sys/devices - 物理的な配置を反映したデバイスツリー
- Linux/sys/firmware - ファームウェア関連のインターフェイス
- Linux/sys/fs?
- Linux/sys/hypervisor?
- Linux/sys/kernel
- Linux/sys/module - ロードされたカーネルモジュール別
- Linux/sys/power?
ディレクトリ構造
- sysfsのディレクトリファイルはkobjectというデータ構造で表現され、各kobjectに属性 (attribute)情報がぶら下がり、これがファイルという形でユーザに提供されている
- http://dev.ariel-networks.com/Members/ohyama/i-o-30b930b130e530fc30e9306e-sysfs-30a830f330c830ea306b306430443066306e307e30683081/
ディレクトリの追加
- kobject_create_and_add("ディレクトリ名", 親);
ファイルの追加
- struct kobj_attribute?
- kobj_attribute構造体をまとめたattr_group?構造体を引数として、sysfs_create_group関数をコール
- attr_group?構造体にnameを設定すると、そのディレクトリが作成されその配下に属性ファイルが作られる
USB
- Linux/sys/bus/usb/devices -> Linux/sys/devices/pcixxxxx?にマッピング
- usb2/2-1/2-1:1.0
- ルートハブ2/ルートのハブ番号-ポート番号/root_hub-hub_port-hub_port:config.interface
.config
ソースコード
- fs/sysfs?
関数
- device_create - creates a device and registers it with sysfs
- device_create_vargs? -> device_create_groups_vargs? -> device_add -> device_create_file
- device_create_file - create sysfs attribute file for device.
USBのドライバ
- usb_register -> usb_register_driver -> usb_create_newid_files -> driver_create_file -> sysfs_create_file
mount
mount -t sysfs sysfs /sys
関連
参考
- http://gihyo.jp/dev/serial/01/sc-literacy/0015
- http://archive.linux.or.jp/JF/JFdocs/kernel-docs-2.6/filesystems/sysfs.txt.html
- http://lwn.net/Articles/31511/
- http://www.kernel.org/pub/linux/kernel/people/mochel/doc/papers/ols-2005/mochel.pdf
- http://lfsbookja.sourceforge.jp/7.6.ja/chapter07/udev.html