[[diary/Kojima]]
・sys-fs 関連のメモ
ここしばらく,時間があるときに調べている sys-fs(/sys)関連の備忘録代わりのメモ.
手元の環境だと /sys 以下にはこういうディレクトリがある.
kojima@xeon[~]% ls /sys/
block/ bus/ class/ devices/ firmware/ fs/ kernel/ module/ power/
block/ はカーネルが認識している各種ブロックデバイスの情報,bus/ は
PCI や USB といったバス関連の情報,class/ はカーネルのサブシステムごとの情報(?),
module/ はロードしている各種モジュールの情報,firmware/ と fs/, kernel/, power/ は
よく分からない(苦笑)
面白そうなのは,/sys/bus/pci/ あたりで,/sys/bus/pci/devices/ にはこういう風に
kojima@xeon[~]% ls /sys/bus/pci/devices
0000:00:00.0@ 0000:00:1d.7@ 0000:00:1f.5@ 0000:05:0b.0@
0000:00:01.0@ 0000:00:1e.0@ 0000:01:00.0@ 0000:05:0c.0@
0000:00:1d.0@ 0000:00:1f.0@ 0000:05:02.0@ 0000:05:0c.1@
0000:00:1d.1@ 0000:00:1f.1@ 0000:05:0a.0@ 0000:05:0e.0@
PCI バスに接続している機器の情報が,PCI のバス ID(というんだっけ?)ごとに
一覧される.この実体は /sys/devicec/pci0000:00 以下にあるらしい.
一方,これらの機器を利用するためのドライバ類の情報は /sys/bus/pci/drivers/
以下に表われる.
kojima@xeon[~]% ls /sys/bus/pci/drivers
AEC62xx_IDE/ PCI_IDE/ ata_generic/ pata_hpt3x3/ pdc_adma/
ALI15x3_IDE/ PIIX_IDE/ ata_piix/ pata_it821x/ sata_mv/
AMD_IDE/ Promise_IDE/ ehci_hcd/ pata_jmicron/ sata_nv/
ATIIXP_IDE/ Promise_Old_IDE/ firewire_ohci/ pata_marvell/ sata_promise/
CMD64x_IDE/ RZ1000_IDE/ ivtv/ pata_mpiix/ sata_qstor/
CS5530 IDE/ SC1200_IDE/ nvidia/ pata_netcell/ sata_sil/
CS5535_IDE/ SIS_IDE/ ohci1394/ pata_oldpiix/ sata_sil24/
Cypress_IDE/ SLC90e66_IDE/ ohci_hcd/ pata_pdc2027x/ sata_sis/
Cyrix_IDE/ Serverworks_IDE/ pata_acpi/ pata_rz1000/ sata_svw/
HPT34x_IDE/ SiI_IDE/ pata_amd/ pata_serverworks/ sata_sx4/
HPT366_IDE/ TC86C001/ pata_artop/ pata_sil680/ sata_uli/
ITE8213_IDE/ TRIFLEX_IDE/ pata_atiixp/ pata_sis/ sata_via/
ITE821x IDE/ TRM290_IDE/ pata_cmd64x/ pata_sl82c105/ sata_vsc/
Intel ICH/ VIA_IDE/ pata_cs5520/ pata_triflex/ sx8/
JMicron IDE/ agpgart-intel/ pata_efar/ pata_via/ tg3/
NS87415_IDE/ ahci/ pata_hpt366/ pcieport-driver/ uhci_hcd/
これはドライバごとになっているようで,Plamo の場合,IDE用のドライバは
全てカーネル組み込みにしているので,AEC62xx_IDE/ とか ALI15x3_IDE/ みたいな
存在しないハードウェア用のドライバも表示されているけど,存在しない
ハードウェアでは
kojima@xeon[~]% ls /sys/bus/pci/drivers/AEC62xx_IDE
bind new_id uevent unbind
このように PCI バスの情報が表示されないのに対して,存在するハードウェアでは
kojima@xeon[~]% ls /sys/bus/pci/drivers/PIIX_IDE
0000:00:1f.1@ bind new_id uevent unbind
みたいに,実際にそのドライバが操作するハードウェアの PCI バス上の位置が
表示される.で,この 0000:00:1f.1 も
/sys/devices/pci0000:00/0000:00:1f.1/ へのリンクになっていて,辿っていくと
kojima@xeon[~]% ls -l /sys/bus/pci/drivers/PIIX_IDE/0000:00:1f.1/
合計 0
-rw-r--r-- 1 root root 4096 2008-05-27 00:26 broken_parity_status
lrwxrwxrwx 1 root root 0 2008-05-27 00:26 bus -> ../../../bus/pci/
-r--r--r-- 1 root root 4096 2008-05-27 00:26 class
-rw-r--r-- 1 root root 256 2008-05-27 00:26 config
-r--r--r-- 1 root root 4096 2008-05-27 00:26 device
lrwxrwxrwx 1 root root 0 2008-05-27 00:26 driver -> ../../../bus/pci/drivers/PIIX_IDE/
-rw------- 1 root root 4096 2008-05-27 00:26 enable
drwxr-xr-x 5 root root 0 2008-05-27 00:35 ide0/
drwxr-xr-x 5 root root 0 2008-05-27 00:35 ide1/
-r--r--r-- 1 root root 4096 2008-05-27 00:26 irq
-r--r--r-- 1 root root 4096 2008-05-27 00:26 local_cpus
-r--r--r-- 1 root root 4096 2008-05-27 00:26 modalias
-rw-r--r-- 1 root root 4096 2008-05-27 00:26 msi_bus
drwxr-xr-x 2 root root 0 2008-05-27 00:35 power/
-r--r--r-- 1 root root 4096 2008-05-27 00:26 resource
-rw------- 1 root root 8 2008-05-27 00:26 resource0
-rw------- 1 root root 1 2008-05-27 00:26 resource1
-rw------- 1 root root 8 2008-05-27 00:26 resource2
-rw------- 1 root root 1 2008-05-27 00:26 resource3
-rw------- 1 root root 16 2008-05-27 00:26 resource4
-rw------- 1 root root 1024 2008-05-27 00:26 resource5
lrwxrwxrwx 1 root root 0 2008-05-27 00:26 subsystem -> ../../../bus/pci/
-r--r--r-- 1 root root 4096 2008-05-27 00:26 subsystem_device
-r--r--r-- 1 root root 4096 2008-05-27 00:26 subsystem_vendor
-rw-r--r-- 1 root root 4096 2008-05-27 00:26 uevent
-r--r--r-- 1 root root 4096 2008-05-27 00:26 vendor
こういう風に,より詳細な情報が得られる.class とか device あたりは
ID番号だけなのでよく分からないのだけど,どこかにリストみたいなものは
あるのだろうか?
とりあえず uevent を見ると必要な情報は手に入りそうではあるが..
kojima@xeon[~]% cat /sys/bus/pci/drivers/PIIX_IDE/0000:00:1f.1/uevent
DRIVER=PIIX_IDE
PHYSDEVBUS=pci
PHYSDEVDRIVER=PIIX_IDE
PCI_CLASS=1018A
PCI_ID=8086:24CB
PCI_SUBSYS_ID=103C:00CC
PCI_SLOT_NAME=0000:00:1f.1
MODALIAS=pci:v00008086d000024CBsv0000103Csd000000CCbc01sc01i8a
最後の MODALIAS はモジュールドライバ用の情報で,単純に PCI 機器に埋め込
まれているベンダーID(v00008086 = Intel), デバイスID(24CB = 82801DB
(ICH4) IDE Controller),サブベンダー ID 等の情報になっているらしい.
この情報は
kojima@xeon[~]% cat /sys/bus/pci/drivers/PIIX_IDE/0000:00:1f.1/modalias
pci:v00008086d000024CBsv0000103Csd000000CCbc01sc01i8a
からも取れて,modprobe `cat cat /sys/bus/pci/drivers/PIIX_IDE/0000:00:1f.1/modalias` とかしてやると,
modprobe が /lib/moduels/2.6.24.5-plamoSMP/modules.pcimap の
# pci module vendor device subvendor subdevice class class_mask driver_data
8250_pci 0x000011b0 0x00000001 0x000012c4 0x00000001 0x00000000 0x00000000 0x0
8250_pci 0x000011b0 0x00000001 0x000012c4 0x00000002 0x00000000 0x00000000 0x0
といったリストを見て,適切なモジュールを読み込んでくれる模様.
#comment