・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
といったリストを見て,適切なモジュールを読み込んでくれる模様.