diary/Kojima

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

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

最近のカーネルでは /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に辿り付く,くらいの段階が必要になるのかも知れない.



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:41