ドライバーがロードされたかどうかが分かっても面白くないということで、対象のUSB機器が抜き差しされたら、ログが出力される事を確認することにした。
以前紹介した、DarwinのソースコードのIOUSBFamily-(バージョン番号).tar.gzのExamplesにあるVendorSpecific Driverのプロジェクトを開いて、Info.plistを確認する。
IOProviderClassをIOUSBDeviceにして、bcdDeviceとiDProduct、idVendorを対象機器の値にすれば、抜き差しに反応しそうだ!
以前の開発環境に含まれていたUSB Proberを持っていたら、それを使って、SmartScrollの情報を確認する。
VendorIDが0x056A、ProductIDが0x0050、DeviceVersionNumberが0x0007なので、SmartScrollDriver-Info.plistのIOKitPersonalitiesのSmartScrollDriverにbcdDeviceとidProduct、idVendorを追加して、7と80、1386を入力する。
この内容でビルドしてドライバーを前回の方法でロードする。
$ sudo cp -R SmartScrollDriver.kext /tmp
$ sudo kextutil -v /tmp/SmartScrollDriver.kext
Notice: /tmp/SmartScrollDriver.kext has debug properties set.
/tmp/SmartScrollDriver.kext appears to be loadable (not including linkage for on-disk libraries).
Loading /tmp/SmartScrollDriver.kext.
/tmp/SmartScrollDriver.kext successfully loaded (or already loaded).
kernel.logをtailし、USB機器を差し込んで、抜く。
$ tail -f /var/log/kernel.log
Jul 1 22:30:56 mbc2d kernel[0]: [SmartScrollDriver]Initializing
Jul 1 22:30:56 mbc2d kernel[0]: [SmartScrollDriver]Probing
Jul 1 22:30:56 mbc2d kernel[0]: No interval found for . Using 8000000
Jul 1 22:30:56 mbc2d kernel[0]: [SmartScrollDriver]Starting
Jul 1 22:31:14 mbc2d kernel[0]: No interval found for . Using 8000000
Jul 1 22:31:14 mbc2d kernel[0]: [SmartScrollDriver]Stopping
Jul 1 22:31:14 mbc2d kernel[0]: [SmartScrollDriver]Freeing
アンロード。
$ sudo kextunload -v /tmp/SmartScrollDriver.kext
jp.co.bitz.driver.SmartScrollDriver unloaded and personalities removed.
抜き差しした際に、ログが出力されている事が分かるはずだ。
関連情報
Mac OS X 10.7.5 - Source
Kernel Extension Programming Topics
【Cocoa練習帳】
http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)