[[diary/Kojima]]

・sysfs を使ったモジュールドライバ組み込み

最近のカーネルでは,
sysfs という仕組みでカーネルが認識しているデバイスをユーザ領域から見ることができて,
それを使えばモジュールドライバの自動認識も可能になるはずだけどなぁ,,と以前から思っていたのだけど,
たまたま goole であれこれ検索していたら,
[[仙石さんのこのページ:http://blog.gcd.org/archives/51116857.html]]を見かけて,
なるほど,こういう手があったか,とさっそく試してみた.

最近のカーネルでは /proc/sys/kernel/modprobe に /sbin/modprobe を指定しておけば,
起動後の活線挿抜(hotplug)にはカーネル自体が必要なモジュールドライバをロードしてくれるようなんだけど,
起動時の周辺機器の認識(coldplug)ではこの機能が使えないからどうしたものかと思っていたのだけど,
上記ページにあるように,

 /sys/bus/*/devices/*/modalias

に現われているモジュールドライバのエイリアスを元に modprobe してやれば
カーネルが認識している周辺機器用のモジュールドライバは組み込まれる模様.

例えば VMware が使う BusLogic のドライバなどは,

 /sys/bus/pci/devices/0000:00:10.0/modalias

に

 pci:v0000104Bd00001040sv0000104Bsd00001040bc01sc00i00

として現われるのだけど,BusLogic.ko を modinfo で調べると

 bash-3.2# modinfo BusLogic
 filename:       /lib/modules/2.6.24.4-plamoSMP/kernel/drivers/scsi/BusLogic.ko
 license:        GPL
 alias:          pci:v0000104Bd00008130sv*sd*bc*sc*i*
 alias:          pci:v0000104Bd00000140sv*sd*bc*sc*i*
 alias:          pci:v0000104Bd00001040sv*sd*bc*sc*i*
 depends:        
 vermagic:       2.6.24.4-plamoSMP SMP preempt mod_unload 586 
 parm:           BusLogic:charp

となって,前半のベンダーID(v0000104B...)がマッチすることから,
上記 modalias を modprobe で読み込ませれば BusLogic.ko が組み込まれる,
という仕組みになっているらしい.

ただ,sysfs に modalias が現われるのも順番があるようで,
上記 /sys/bus/pci/.. の modalas で PCI バスに接続されているSCSIアダプタ用のモジュールドライバを
読み込むと,そのモジュールドライバを使って SCSI アダプタが見えるようになって,
そのアダプタに接続されているデバイス(HDDとかCD-ROMとか)用のドライバが
/sys/bus/scsi/devices/1:0:0:0/modalias 等に見えるようになって,

 # cat /sys/bus/scsi/devices/1:0:0:0/modalias
 scsi:t-0x05

このエイリアスはsr_mod.ko(SCSI CD ドライブ用モジュール)を指すことになるので,

 bash-3.2# modinfo /mnt/Srcs/L/Linux/Build/modules/lib/modules/2.6.25-plamoSMP/kernel/drivers/scsi/sr_mod.ko 
 filename:       /mnt/Srcs/L/Linux/Build/modules/lib/modules/2.6.25-plamoSMP/kernel/drivers/scsi/sr_mod.ko
 license:        GPL
 alias:          scsi:t-0x04*
 alias:          scsi:t-0x05*
 alias:          block-major-11-*
 license:        GPL
 description:    SCSI cdrom (sr) driver
 depends:        cdrom
 vermagic:       2.6.25-plamoSMP SMP preempt mod_unload 586 
 parm:           xa_test:int

SCSI CD ドライブを使うためには、BusLogic.ko を組み込んでから、再度 modalias を調べて sr_mod.ko を組み込んでやる必要がある模様.

USB 回りは usb-storage が組み込まれない,という報告も来ているのだけど,
もしかしたらホストサイドの USB デバイス(uhci とか)を組み込んで,
usbcore を組み込んで,usblib を組み込んで,
やっと usb-storageに辿り付く,くらいの段階が必要になるのかも知れない.

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS