[Linux]請問怎麼知道連接的設備是由哪個module驅動的呢?
时间:2010-08-12
来源:互联网
比如 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
比如 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
看看是不是编译到核心里面了。
一些基本的驱动模组会编译到核心里面,避免开机的一些困扰。而且随著记忆体越来越多,预设也会
编入越多的基本模组。
另外,类似 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
要不然, 在 /lib/modules/<version>/ 目录下应该有个 modules.alias ,可以根据 device ID 找到相应的 module 。
作者: netman 发布时间: 2010-08-17
要不然, 在 /lib/modules/<version>/ 目录下应该有个 modules.alias ,可以根据 device ID 找到相应的 module 。
谢谢 netman 大大的指点!
以前没想过从 /lib/modules/<version>/ 作观察,
跟G大神问一问发现有很多可以去瞭解的地方(也比较根本),
多些突破口真不错 Thx!
作者: id4fox 发布时间: 2010-08-17
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28