
Ubuntu日本語フォーラム

ログインしていません。
USB機器のカーネルモジュールがデフォルトでロードされるかどうかの判定とblacklistへ登録が必要な場合について
/lib/modules/$(uname -r)/modules.usbmap
で判定できるのではないかと思っているのですが、これは正しいでしょうか。
確かめようとしていることは、
「少なくてもmodules.usbmapにIdVendor,IdProductの組み合わせが載っていなければデフォルトではカーネルモジュールがロードされず動作しない。」
ということです。
(載っていたからといって、うまくいくとは限らないので)
もう一点は
「modules.usbmapにIdVendor,IdProductの組み合わせが同じ行が複数ある場合はblacklistの登録が必要」
ということです。
正しいことが確認できればWikiの方にTipsとして載せようと考えています。
以下、詳細です。
/lib/modules/$(uname -r)/modules.usbmapはdepmodによって作成されます。
元データは各モジュールの'__mod_usb_device_table'のシンボル内容です。
フォーマットはmodule-init-toolsパッケージのソースに含まれるtables.hに
下記のように定義されています。
struct usb_device_id {
/* which fields to match against? */
unsigned short match_flags;
/* Used for product specific matches; range is inclusive */
unsigned short idVendor;
unsigned short idProduct;
unsigned short bcdDevice_lo;
unsigned short bcdDevice_hi;
/* Used for device class matches */
unsigned char bDeviceClass;
unsigned char bDeviceSubClass;
unsigned char bDeviceProtocol;
/* Used for interface class matches */
unsigned char bInterfaceClass;
unsigned char bInterfaceSubClass;
unsigned char bInterfaceProtocol;
};
#define USB_DEVICE_SIZE32 (5 * 2 + 6 * 1 + 4)
#define USB_DEVICE_SIZE64 (5 * 2 + 6 * 1 + 8)modules.usbmapをheadで表示してみると下記の用になっています。
# usb module match_flags idVendor idProduct bcdDevice_lo bcdDevice_hi bDeviceClass bDeviceSubClass bDeviceProtocol bInterfaceClass bInterfaceSubClass bInterfaceProtocol driver_info at76c50x-usb 0x0003 0x03eb 0x7603 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0 at76c50x-usb 0x0003 0x066b 0x2211 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0 at76c50x-usb 0x0003 0x0864 0x4100 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0 at76c50x-usb 0x0003 0x0b3b 0x1612 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0 at76c50x-usb 0x0003 0x03f0 0x011c 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0 at76c50x-usb 0x0003 0x0cde 0x0001 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0 at76c50x-usb 0x0003 0x069a 0x0320 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0 at76c50x-usb 0x0003 0x0d5c 0xa001 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0 at76c50x-usb 0x0003 0x04a5 0x9000 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0
このファイルのidVendor,idProductとlsusbの出力を比較すればそのUSB機器のモジュールがデフォルトでロードされるのではないかと推量しています。
また同一のidVendor,idProductが2行以上含まれている場合、1つのモジュールを除いてblacklistの指定が必要だと推量しています。
これは正しいでしょうか。
カーネルがモジュールをロードする仕組みに関して知識がなく自分では判断できずにいます。
udevが関連していると思い、udevパッケージに含まれている /lib/udev/rule.d/75-net-description.rulesを参照してみたのですが、
ここで使われているコマンドudb_idやusb-dbは"/sys"の下のファイルを読んで/var/log/udevに出力を行うことと、変数を2つほど設定しているだけに見えます。
(usb-dbは/var/lib/usbutils/usb.idsも見ていました。)
結局これがハードウェアの認識からカーネルモジュールのロードに至るプロセスの中でどのような意味があるかわかりませんでした。
若干各論になりますが、rt2870staを動作させるためにrt2800usb,rt2x00usb,rt2x00libをblaklistに指定するという投稿がいくつかあるのですが、
modules.usbmapに記載されているのはrt2800usbだけであり、rt2800usbは下記のモジュールに依存していました。
・rt2x00usb(直接)
・rt2x00lib(直接)
・crc-ccitt(直接)
・led-class(間接)
・mac80211(間接)
・cfg80211(間接)
rt2x00usb,rt2x00libはrt2800usbがこれらに依存しているためにロードされるので、
blacklistの指定に必要なのはrt2800usbだけだと思うのですが、これは正しいでしょうか。
(直接の依存はmodinfo rt2800usbの出力,間接的なものも含める場合は/lib/modules/$(uname -r)/modules.depの内容で確認しました。)
これらのことについてご存知の方がいらっしゃいましたらご教示いただけますでしょうか。
よろしくお願いいたします。
オフライン
MidSpecLowLoad による投稿:
USB機器のカーネルモジュールがデフォルトでロードされるかどうかの判定とblacklistへ登録が必要な場合について
/lib/modules/$(uname -r)/modules.usbmap
で判定できるのではないかと思っているのですが、これは正しいでしょうか。
上記は真ですが、以下の部分と類推に利用する手法は間違っています。
確かめようとしていることは、
「少なくてもmodules.usbmapにIdVendor,IdProductの組み合わせが載っていなければデフォルトではカーネルモジュールがロードされず動作しない。」
ということです。
偽です。match_flagsの指定によってはIdVendor, IdProduct以外のカラムで判定されます。hotplug.txt参照。
「たいていの場合」という前提を組み入れればmatch_flags=0x03なので真になりますが、この理解は大変危険です。
もう一点は
「modules.usbmapにIdVendor,IdProductの組み合わせが同じ行が複数ある場合はblacklistの登録が必要」
ということです。
上記のmatch_flagsの話と同様の理由で偽です。
match_flags==0x03ないし、IdVendor,IdProductを利用するより深いフラグ値がセットされるなら真になります。
正しいことが確認できればWikiの方にTipsとして載せようと考えています。
偶然合っているだけという疑惑があるので、この理解でTipsとして載せるのは大変危ない気がします。
若干各論になりますが、rt2870staを動作させるためにrt2800usb,rt2x00usb,rt2x00libをblaklistに指定するという投稿がいくつかあるのですが、
modules.usbmapに記載されているのはrt2800usbだけであり、rt2800usbは下記のモジュールに依存していました。
・rt2x00usb(直接)
・rt2x00lib(直接)
・crc-ccitt(直接)
・led-class(間接)
・mac80211(間接)
・cfg80211(間接)
rt2x00usb,rt2x00libはrt2800usbがこれらに依存しているためにロードされるので、
blacklistの指定に必要なのはrt2800usbだけだと思うのですが、これは正しいでしょうか。
(直接の依存はmodinfo rt2800usbの出力,間接的なものも含める場合は/lib/modules/$(uname -r)/modules.depの内容で確認しました。)
上記の確認事項が全て正しく、かつ、rt2x00usb,rt2x00libが「rt2800usb以外のモジュール」(他の経路)からloadされない場合は真です。他の経路から関連ドライバがロードされている場合、前提となるハードウェアリソースを食われることでより新しいドライバがロード不能になる可能性があるため、blacklistへの登録が必要になります。rt2800usbの場合は実質的にハードウェア管理を行うのはrt2800usb本体だけだった気がしますが、本来ハードウェアを動作させるべきドライバが依存しているドライバはcase by caseなので推定の材料としては使えません。
オフライン
hitoさん
ご教示ありがとうございます。
生半可な知識が危険であることを改めて認識いたしました。
Wikiへの掲載は、match_flagsを使った照合が下記の通りで正しいと確認できるまで差し控えます。
(下記のmatch_flagsの解釈は正しいでしょうか。)
http://www.mjmwired.net/kernel/Documentation/usb/hotplug.txt
はとても勉強になりました。
(比較すると英語の部分に差がなかったので
http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.6/usb/hotplug.txt.html
の方を読みました。)
(誤訳と思われる箇所が一つありました。英語のほうで30行目にある"dynamically linked"が"直接リンク"となっていました。)
Lucidで確認すると/proc/sys/kernel/hotplugの内容が空で、
/sbin/hotplugが存在しないなど、幾つか使用環境とわない部分がありましたが、
時間のあるときにWebやカーネルのソースを検索して調べてみたいと思います。
(これのソースからmatch_flagsの使用方法を調べようと思ったのですが)
-------------
match_flagsの解釈
modules.usbmapの "idVendor" が linux/mod_devicetable.hに定義されている
"USB_DEVICE_ID_MATCH_VENDOR" に対応し、以下順次
"idProduct"が"USB_DEVICE_ID_MATCH_PRODUCT"に対応という具合に続きます。
照合に使用する属性に対応する値のビットORが "match_flags" の値になっています。
(modules.mapの最後の項目、driver_infoは対応する数値がない)
例えば 0x0013 の場合は idVendor,idProduct, bDeviceClassを照合に使用します。
linux/mod_devicetable.h
/* Some useful macros to use to create struct usb_device_id */ #define USB_DEVICE_ID_MATCH_VENDOR 0x0001 #define USB_DEVICE_ID_MATCH_PRODUCT 0x0002 #define USB_DEVICE_ID_MATCH_DEV_LO 0x0004 #define USB_DEVICE_ID_MATCH_DEV_HI 0x0008 #define USB_DEVICE_ID_MATCH_DEV_CLASS 0x0010 #define USB_DEVICE_ID_MATCH_DEV_SUBCLASS 0x0020 #define USB_DEVICE_ID_MATCH_DEV_PROTOCOL 0x0040 #define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080 #define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100 #define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200
ソースコードで"USB_DEVICE"というマクロが使われている場合、
match_flagsの値は0x0003になります。これは linux/usb.h の記述を確認するとわかります。
linux/usb.h
#define USB_DEVICE_ID_MATCH_DEVICE \
(USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)
- 中略 -
#define USB_DEVICE(vend,prod) \
.match_flags = USB_DEVICE_ID_MATCH_DEVICE, \
.idVendor = (vend), \
.idProduct = (prod)-------------
参考のために調べてみるとlinux-image-2.6.32-22-generic(2.6.32-22.33)の環境では
match_flagsのパターンは下記の18通り存在しました。
$ awk '!/^#/{print $2}' /lib/modules/$(uname -r)/modules.usbmap | sort -u
0x0001
0x0003
0x000f
0x0013
0x0023
0x0070
0x0080
0x0083
0x0180
0x0181
0x0183
0x0193
0x0283
0x0380
0x0381
0x0383
0x038b
0x03f3オフライン
MidSpecLowLoad による投稿:
生半可な知識が危険であることを改めて認識いたしました。
Wikiへの掲載は、match_flagsを使った照合が下記の通りで正しいと確認できるまで差し控えます。
(下記のmatch_flagsの解釈は正しいでしょうか。)
少なくとも大きな間違いはなさそうに見えます。
あとは必要条件と十分条件を誤認していないかを識別すれば載せても良いように思うのですが、
・rt2x00系チップしか見てない旨を明記する
・もう少し調べて、「blacklistに載せる必要がある = hotplugのIDがかぶっている」というケースを収集する
というあたりかなぁと思いますが、過度に一般化してしまうよりは、チップごとに個別にページ作る方が良くないかなぁと個人的には思います。
オフライン
ご確認ありがとうございます。
とりあえず、個別のデバイスに関して具体的に何をblaklistに指定するかは
記載しないつもりでいます。(rt2800usbの例はTipsとして載せない)
間違っていると非常によろしくない性質の情報だと思いますので、
いったん自分のwikiホームページの下に下書きして、またこちらに書込みをします。
作業予定は週末です。
必要条件と十分条件についての私の認識ですが、下記の通りです。
-----------------------------------------------------------------------
A .対象とするデバイスの属性に対してmatch_flagsを考慮したうえで
modules.usbmapに一致する行が存在することがデフォルト
でカーネルモジュールがロードされる必要十分条件である。
-----------------------------------------------------------------------
*** A.の注意点 ***
1.「デフォルトで」とは/etc/modulesなどに追加の設定を行わないということ。
当然modprobeやinsmodによる手動ロードは「デフォルトで」はない。
2.Aはロードされることの必要十分条件。
デフォルトでデバイスが期待する動作を行うかに関してAは必要条件。
(A.は複数行がマッチしても真、この場合は動作しない。一行のみが一致する場合でも動作するとは限らない)
-----------------------------------------------------------------------
B.対象とするデバイスの属性に対してmatch_flagsを考慮したうえで
modules.usbmapに一致する行が N 行( N > 1 )存在する場合、
ロードされるモジュールが1つになるようにblacklistにN-1個のモジュールを
記述することはデバイスが正常に動作することの必要条件である。
-----------------------------------------------------------------------
*** B.の注意点 ***
1.対象とするデバイスに対してマッチするモジュール(M)、モジュール(X)が存在し、
モジュール(M)がデバイスを正常に駆動できるとする。(X)は正常に駆動できない。
(X)がモジュール(Y)に依存していて、(Y)の使用リソースが(M)と衝突しているとする。
上記に加えてモジュール(Z)が別のデバイスのためにロードされていて、
(Z)は(Y)に依存している
この場合、(X)をblacklistに指定するだけでは不十分で(ゆえにBは必要条件)、
(Y)もblacklistに指定する必要がある。(しかしこれでもまだ必要条件)
あれ...(Y)がロードされないと(Z)も動作しなくなるような気がしますが....
rt2800usbの例でいくと、rt2870staとバッティングするのがrt2800usbだけであっても、
rt2x00usb,rt2x00libをblacklist指定するとそれに依存しているモジュールは結局動作できなくなるような。
/lib/modules/2.6.32-22-generic$ grep -e ':.*rt2x00usb' -e ':.*rt2x00lib' modules.dep | sed -e 's#:.*##;' kernel/drivers/net/wireless/rt2x00/rt2x00pci.ko kernel/drivers/net/wireless/rt2x00/rt2x00usb.ko kernel/drivers/net/wireless/rt2x00/rt2400pci.ko kernel/drivers/net/wireless/rt2x00/rt2500pci.ko kernel/drivers/net/wireless/rt2x00/rt61pci.ko kernel/drivers/net/wireless/rt2x00/rt2500usb.ko kernel/drivers/net/wireless/rt2x00/rt73usb.ko kernel/drivers/net/wireless/rt2x00/rt2800usb.ko
オフライン
A .対象とするデバイスの属性に対してmatch_flagsを考慮したうえで
modules.usbmapに一致する行が存在することがデフォルト
でカーネルモジュールがロードされる必要十分条件である。
偽。必要条件です。十分条件ではありません。厳密に言えば必要条件ですらない(/etc/modprobe.conf, /etc/modprobe.d/に直値指定でも可)です。
-----------------------------------------------------------------------
B.対象とするデバイスの属性に対してmatch_flagsを考慮したうえで
modules.usbmapに一致する行が N 行( N > 1 )存在する場合、
ロードされるモジュールが1つになるようにblacklistにN-1個のモジュールを
記述することはデバイスが正常に動作することの必要条件である。
偽。過度な一般化です。必要条件でも十分条件でもありません。トリガは「複数行あること」ではなく、「望ましくないドライバがマッチし、ロードされること」です。
また、「ドライバが動作するように調整する目的でblacklistにモジュールを記載すべき状況」もカバーしていませんので、
もう少し多くのケースを収集する必要があるでしょう。
あれ...(Y)がロードされないと(Z)も動作しなくなるような気がしますが....
rt2800usbの例でいくと、 rt2870staとバッティングするのがrt2800usbだけであっても、
rt2x00usb,rt2x00libをblacklist指定するとそれに依存しているモジュールは結局動作できなくなるような。
上記の理解は正しいですが、そこに疑問を感じるのはなにか前提知識が抜けている予感がします。
オフライン
重ね重ね、ご教示ありがとうございます。
最後の部分のご指摘の通り、私には根本的に知識が不足しております。
この件についてWikiへTipsを書くのは控えたほうがよさそうです。
いくら誰にでも修正ができると言ってもベースがまずすぎては。
一点異議がございます。
偽。必要条件です。十分条件ではありません。厳密に言えば必要条件ですらない(/etc/modprobe.conf, /etc/modprobe.d/に直値指定でも可)です。
/etc/modprobe.conf, /etc/modprobe.d/への指定追加は「デフォルトでは」の記述に反するという認識でおります。
偽。過度な一般化です。必要条件でも十分条件でもありません。トリガは「複数行あること」ではなく、「望ましくないドライバがマッチし、ロードされること」です。
この部分に関しましては、
c. 「複数行がマッチ」=「制御するリソースが競合する」
d. cが真であるならばドライバは正常に動作しない
というふうに考えていたのですが、cが必ずしも真でなく、その場合は正常に動作するという理解でよろしいでしょうか。
ご教示いただければ幸いです。
オフライン
すいません。「指定追加」でなく、もともと記述してある場合の考慮が抜けていました。
下記引用部分は取り消させてください。
一点異議がございます。
偽。必要条件です。十分条件ではありません。厳密に言えば必要条件ですらない(/etc/modprobe.conf, /etc/modprobe.d/に直値指定でも可)です。
/etc/modprobe.conf, /etc/modprobe.d/への指定追加は「デフォルトでは」の記述に反するという認識でおります。
オフライン
MidSpecLowLoad による投稿:
偽。過度な一般化です。必要条件でも十分条件でもありません。トリガは「複数行あること」ではなく、「望ましくないドライバがマッチし、ロードされること」です。
この部分に関しましては、
c. 「複数行がマッチ」=「制御するリソースが競合する」
d. cが真であるならばドライバは正常に動作しない
というふうに考えていたのですが、cが必ずしも真でなく、その場合は正常に動作するという理解でよろしいでしょうか。
先にロードされたドライバが排他的に動作するケースがある(というか、後からロードされたドライバが自主的に落ちることがある)ため、Cは必ずしも真になるものではありません。
オフライン
hitoさん
ご教示ありがとうございます。
後からロードされたドライバが自主的に落ちることがあるとは、まったく想定できませんでした。
私の拙い推量にお付き合いいただきありがとうございました。
興味は尽きないのですが、しばらく自分でコツコツやっていこうと思います。
一つだけ(と言いながら分量は多いのですが)、#1の補足を。
udevがどのようにモジュールをロードするか調べようと思い、
/lib/udev/rules.d/80-drivers.rulesに下記のような変更をして
/ver/log/udevを見てみました。
udevがmodprobeを呼んでいること、その際に
(私の環境でGW-USMicroNを使った場合)
/sbin/modprobe -b usb:v2019pED14d0101dc00dsc00dp00icFFiscFFipFF
というコマンドラインを使用していることが分かりました。
/lib/modules/$(uname -r)/modules.alias(.bin)には下記の記述があります。
alias usb:v2019pED14d*dc*dsc*dp*ic*isc*ip* rt2870sta
/lib/udev/rules.d/80-drivers.rulesの変更
@@ -1,6 +1,7 @@
# do not edit this file, it will be overwritten on update
ACTION!="add", GOTO="drivers_end"
+IMPORT{program}="/bin/echo 80-drivers driver=$driver MODALIAS=$env{MODALIAS}"
DRIVER!="?*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe -b $env{MODALIAS}"
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN+="/sbin/modprobe -b tifm_sd"/ver/log/udevの抜粋
(書き方が不味かったのか$driverとその後ろの空白が出ていません。)
DEVPATH=/devices/platform/i8042/serio1 SUBSYSTEM=serio SERIO_TYPE=01 SERIO_PROTO=00 SERIO_ID=00 SERIO_EXTRA=00 MODALIAS=serio:ty01pr00id00ex00 SEQNUM=1254 80-drivers driver=MODALIAS=serio:ty01pr00id00ex00 KERNEL[1275554569.784261] add /module/rt2870sta (module) UDEV_LOG=3 ACTION=add DEVPATH=/module/rt2870sta SUBSYSTEM=module SEQNUM=1462 KERNEL[1275554569.785066] add /devices/pci0000:00/0000:00:1d.7/usb2/2-4/net/wlan0 (net) UDEV_LOG=3 ACTION=add DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb2/2-4/net/wlan0 SUBSYSTEM=net INTERFACE=wlan0 IFINDEX=2 SEQNUM=1463 KERNEL[1275554569.785758] add /bus/usb/drivers/rt2870 (drivers) UDEV_LOG=3 ACTION=add DEVPATH=/bus/usb/drivers/rt2870 SUBSYSTEM=drivers SEQNUM=1464 UDEV [1275554569.786180] add /devices/pci0000:00/0000:00:1d.7/usb2/2-4/2-4:1.0 (usb) UDEV_LOG=3 ACTION=add DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb2/2-4/2-4:1.0 SUBSYSTEM=usb DEVTYPE=usb_interface PRODUCT=2019/ed14/101 TYPE=0/0/0 INTERFACE=255/255/255 MODALIAS=usb:v2019pED14d0101dc00dsc00dp00icFFiscFFipFF SEQNUM=1203 80-drivers driver=MODALIAS=usb:v2019pED14d0101dc00dsc00dp00icFFiscFFipFF UDEV [1275554569.791527] add /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:04/device:08/device:09 (acpi) UDEV_LOG=3 ACTION=add DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:04/device:08/device:09 SUBSYSTEM=acpi MODALIAS=acpi:device: SEQNUM=1103 80-drivers driver=MODALIAS=acpi:device:
これだけを見るとmodprobeの前にすでに /sys/module/rt2870sta が存在するように見えるのが謎です。
RUNとIMPORT{program}の実行タイミングの問題かもしれませんが、
IMPORT{program}="/bin/echo ...."の代わりにRUN+="/bin/echo ..."とすると
/var/log/udevには何も出力されませんでした。
オフライン
#10で記述した/lib/udev/rules.d/80-drivers.rulesの変更で追加した/bin/echoは条件が抜けていて
その下のmodprobeが実行されない状況でも/bin/echoが実行されるる場合が存在します。
訂正版
変更点
・/bin/echo が実行される条件をmodprobeの行と同一に変更。
・RUNで指定したechoが出力されるか確認するため、RUN+=によるechoの指定を追加
=> やはり/bin/echoの出力が/var/log/udevに存在しない
・出力されなかった$driverを${driver}に変更。
=> そのまま ${driver} と出力されます。
@@ -1,6 +1,8 @@
# do not edit this file, it will be overwritten on update
ACTION!="add", GOTO="drivers_end"
+DRIVER!="?*", ENV{MODALIAS}=="?*", IMPORT{program}="/bin/echo IMPORT 80-drivers driver=${driver} MODALIAS=$env{MODALIAS}"
+DRIVER!="?*", ENV{MODALIAS}=="?*", RUN+="/bin/echo RUN 80-drivers driver=${driver} MODALIAS=$env{MODALIAS}"
DRIVER!="?*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe -b $env{MODALIAS}"
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN+="/sbin/modprobe -b tifm_sd"/var/log/udevの一部
UDEV [1275569226.676076] add /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0b/device:0f/device:11 (acpi)
UDEV_LOG=3
ACTION=add
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0b/device:0f/device:11
SUBSYSTEM=acpi
MODALIAS=acpi:device:
SEQNUM=1111
IMPORT 80-drivers driver=${driver} MODALIAS=acpi:device:
KERNEL[1275569226.682248] add /module/drm_kms_helper (module)
UDEV_LOG=3
ACTION=add
DEVPATH=/module/drm_kms_helper
SUBSYSTEM=module
SEQNUM=1464
UDEV [1275569226.682418] add /module/drm_kms_helper (module)
UDEV_LOG=3
ACTION=add
DEVPATH=/module/drm_kms_helper
SUBSYSTEM=module
SEQNUM=1464
UDEV [1275569226.682629] add /devices/pci0000:00/0000:00:1d.7/usb2/2-4/2-4:1.0 (usb)
UDEV_LOG=3
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb2/2-4/2-4:1.0
SUBSYSTEM=usb
DEVTYPE=usb_interface
PRODUCT=2019/ed14/101
TYPE=0/0/0
INTERFACE=255/255/255
MODALIAS=usb:v2019pED14d0101dc00dsc00dp00icFFiscFFipFF
SEQNUM=1203
IMPORT 80-drivers driver=${driver} MODALIAS=usb:v2019pED14d0101dc00dsc00dp00icFFiscFFipFF
UDEV [1275569226.688018] add /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0b/device:0c/device:0e (acpi)
UDEV_LOG=3
ACTION=add
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0b/device:0c/device:0e
SUBSYSTEM=acpi
MODALIAS=acpi:device:
SEQNUM=1108
IMPORT 80-drivers driver=${driver} MODALIAS=acpi:device:オフライン