+ -
当前位置:首页 → 问答吧 → [Linux]請問怎麼知道連接的設備是由哪個module驅動的呢?

[Linux]請問怎麼知道連接的設備是由哪個module驅動的呢?

时间:2010-08-12

来源:互联网

请问我要怎么知道机器所连结的硬体是由哪一个module作控管的?
比如 USB 键盘、萤幕~

我在 Ubuntu 连了个 USB 键盘,但是却没有在 lsmod  看到预期的 usbkbd.ko  让我很纳闷,
而 USB 键盘还是跑的好好的~不知道到底是哪个 module 在提供 USB 键盘的控制?
我修改 usbkbd.c 自己编了一个 kbd_test.ko 安装,结果也是没反应(Used by == 0)

此外,请问 module 间有没有优先权呢?
好奇的是,如果两个 module 都对同一组 device id 支援,只有一个会有 device 的控制权吗?
有办法查知某个设备的 device id 吗?

麻烦学长姐指点一下,谢谢 Thx

(补充:我是在 Vista 运作 VirtualBox 跑 Ubuntu 9.04,希望这不会影响到这个讨论)

作者: id4fox   发布时间: 2010-08-12

引用自: id4fox 於 2010-08-12 21:22
请问我要怎么知道机器所连结的硬体是由哪一个module作控管的?
比如 USB 键盘、萤幕~
我在 Ubuntu 连了个 USB 键盘,但是却没有在 lsmod  看到预期的 usbkbd.ko  让我很纳闷,
而 USB 键盘还是跑的好好的~不知道到底是哪个 module 在提供 USB 键盘的控制?
我修改 usbkbd.c 自己编了一个 kbd_test.ko 安装,结果也是没反应(Used by == 0)
此外,请问 module 间有没有优先权呢?
好奇的是,如果两个 module 都对同一组 device id 支援,只有一个会有 device 的控制权吗?
有办法查知某个设备的 device id 吗?

去找对应的 Ubuntu kernel source,找到 Ununtu kernel 的 config,make xconfig 之后载入设定值,
看看是不是编译到核心里面了。

一些基本的驱动模组会编译到核心里面,避免开机的一些困扰。而且随著记忆体越来越多,预设也会
编入越多的基本模组。

另外,类似 pointer 一类的设备,是会同时拥有控制权的,pointer 指的是滑鼠、touchpad、wacom
绘图板一类。不过键盘我不确定。

作者: harrier   发布时间: 2010-08-13

引用自: harrier 於 2010-08-13 11:45
去找对应的 Ubuntu kernel source,找到 Ununtu kernel 的 config,make xconfig 之后载入设定值,
看看是不是编译到核心里面了。

一些基本的驱动模组会编译到核心里面,避免开机的一些困扰。而且随著记忆体越来越多,预设也会
编入越多的基本模组。

另外,类似 pointer 一类的设备,是会同时拥有控制权的,pointer 指的是滑鼠、touchpad、wacom
绘图板一类。不过键盘我不确定。

谢谢 harrier 回答,我来多跟 make config 认识 认识。

作者: id4fox   发布时间: 2010-08-13

我发觉我的问题可能跟"装置模型"有比较大的关联性,
sysfs、udev、kobject ...
比如一旦我的 usb 键盘 被连结,/sys/bus/usb/devices 下会冒出
2-1、2-1:1.0
翻一翻会找到 /sys/bus/usb/devices/2-1\:1.0/input/input6/id/
里面包含著 vender、product 档,cat 一下可以看到 id。

这也只是乱模的结果,基础不够,学习 学习

作者: id4fox   发布时间: 2010-08-16

针对我的问题,大概整理一下目前我所瞭解的,
Ubuntu 9.04 ,Kernel:2.6.31-22-generic

先由 /proc 下手,
$cat /proc/bus/input/devices
可以列出所有 input 设备的资讯 如:
-------------------------------------------------------
I: Bus=0003 Vendor=413c Product=2003 Version=0110
N: Name="Dell Dell USB Keyboard"
P: Phys=usb-0000:00:06.0-1/input0
S: Sysfs=/devices/pci0000:00/0000:00:06.0/usb2/2-1/2-1:1.0/input/input9
U: Uniq=
H: Handlers=kbd event5
B: EV=120013
B: KEY=10000 7 ff9f207a c14057ff febeffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7
-------------------------------------------------------
这就是我要的USB键盘资讯,其中可以看到 Vender、Product 等各个识别 ID
接下来看 "Sysfs" 后面的资讯代表该设备在 /sys/ 下的路径,也就是
/sys/devices/pci0000:00/0000:00:06.0/usb2/2-1/2-1:1.0/input/input9
其下的 ./device/driver 是一个 symbolic link,指向 /sys/bus/usb/drivers/usbhid/
这个 "usbhid" 便是控制这个 USB 键盘的名称。

这时如果 $rmmod usbhid 则会发现 USB 键盘已经动不了拉~
而把自己编的 kbd_test.ko 来 insmod 进去,USB 键盘就可以动了!

而如果已经有一个 USB 键盘的驱动程式可以运作,那么接下来的 USB 键盘驱动程式并不会得到控制权。
这点 usbhid 与 kbd_test 都一样。

作者: id4fox   发布时间: 2010-08-16

如果有指定 module 的话,就用指定的。
要不然, 在 /lib/modules/<version>/ 目录下应该有个 modules.alias ,可以根据 device ID 找到相应的 module 。

作者: netman   发布时间: 2010-08-17

引用自: netman 於 2010-08-17 10:14
如果有指定 module 的话,就用指定的。
要不然, 在 /lib/modules/<version>/ 目录下应该有个 modules.alias ,可以根据 device ID 找到相应的 module 。

谢谢 netman 大大的指点!
以前没想过从 /lib/modules/<version>/ 作观察,
跟G大神问一问发现有很多可以去瞭解的地方(也比较根本),
多些突破口真不错 Thx!

作者: id4fox   发布时间: 2010-08-17

热门下载

更多