/etc/murasaki/murasaki.usbmap の モジュール定義行は、ファイルの冒頭にもあるように以下の 13 個の変数を空白で区切って記述します。
モジュール名
利用するモジュールを決定するためにどの変数を調べるかを決定する変数。
表 D.1. フラグの一覧
フラグ名 | 値 | 調べる変数 |
---|---|---|
USB_DEVICE_ID_MATCH_VENDOR | 0x0001 | idVendor |
USB_DEVICE_ID_MATCH_PRODUCT | 0x0002 | idProduct |
USB_DEVICE_ID_MATCH_DEV_LO | 0x0004 | bcdDevice_lo |
USB_DEVICE_ID_MATCH_DEV_HI | 0x0008 | bcdDevice_hi |
USB_DEVICE_ID_MATCH_DEV_CLASS | 0x0010 | bDeviceClass |
USB_DEVICE_ID_MATCH_DEV_SUBCLASS | 0x0020 | bDeviceSubClass |
USB_DEVICE_ID_MATCH_DEV_PROTOCOL | 0x0040 | bDeviceProtocol |
USB_DEVICE_ID_MATCH_INT_CLASS | 0x0080 | bInterfaceClass |
USB_DEVICE_ID_MATCH_INT_SUBCLASS | 0x0100 | bInterfaceSubClass |
USB_DEVICE_ID_MATCH_INT_PROTOCOL | 0x0200 | bInterfaceProtocol |
調べる変数に応じたフラグの OR を取った結果が、変数の値となる。
例 D.1. match_flags の分析
Aug 6 19:30:23 localhost murasaki.usb[751]: MODULE 0x0073 0x46d 0x870 0 0 0xff 0xff 0xff 0x0 0x0 0x0 0x00000000
これはmatchフラグが0x0073なので、
USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT | USB_DEVICE_ID_MATCH_DEV_CLASS | USB_DEVICE_ID_MATCH_DEV_SUBCLASS | USB_DEVICE_ID_MATCH_DEV_PROTOCOL
ということで、この5つの値が一致することでドライバが決定されます。ただし、bDeviceClass、bDeviceSubClass、bDeviceProtocolの値が0xffであり、これは any matching を意味しますので実際にはidVendor, idProductの値で決定されます。
ビット演算子 | は 2 進数で数値を考えたときの各桁(ビット。0か1で表現される。)のORを取ります。ORは、両方のビットが0でない限り必ず1になります。
例えば、USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCTの計算は次のようになります。
00000001 (0x0001) OR)00000010 (0x0002) -------------------- 00000011 (0x0003)
ベンダーID(各ベンダーに割り当てられた固有のID)
プロダクトID(各ベンダー毎、製品に割り当てる固有のID)
ドライバが対応している製品バージョンの下限の Binary Coded Decimal 表記(ほとんど使われない)
ドライバが対応している製品バージョンの上限の Binary Coded Decimal表記(ほとんど使われない)
Deviceクラス
Deviceサブクラス
Deviceプロトコル
インターフェースのクラス
インターフェースのサブクラス
インターフェースのプロトコル
ドライバが使用する情報。特に何が指定されるかは決まっていない。通常使われない。