在Linux源代码中,对特定USB设备的识别是在哪里进行的?

在Linux源代码中,对特定USB设备的识别是在哪里进行的?,第1张

概述在Linux源代码中,对特定USB设备的识别是在哪里进行的?

我有一个特定的USB设备的linux驱动程序源代码,我想检查。 我的理解是,USB驱动程序的第一步是注册自己,能够处理具有特定供应商ID和产品ID的设备。 在我的情况下,供应商ID是0BDA ,产品ID是8187 。 鉴于这些信息,有没有一种方法可以find注册自己能够处理该设备的源文件,然后查看其他源文件实际执行的驱动程序详细信息?

作为参考,我在内核3.2.0-26 。 我试过了一个grep -rl 8187 /usr/src ,但是这列出了一大堆文件,我不知道从哪里开始。

确保唤醒后cpu时间 – linux调度程序

linux内核 – 哪些端口号是随机select的源码?

内核模块:hrtimer_start“模块中的未知符号”

linux内核中的主要页面error handling程序

linux内核模块通过USB读取GPS设备

除了供应商和产品ID之外,还有很多其他参数可以影响选择哪个驱动程序。 有一个版本号,设备类,子类和协议,以及接口类,子类和协议。 内核从设备读取所有这些信息,并生成一个包含所有这些字符串的字符串(例如,我的设备之一,而不是你的设备):

usb:v15A9p0004d0001dc00dsc00dp00icFFiscFFipFF

然后该字符串被传递给modprobe,modprobe将其与模块自身中的字符串(通配符)进行匹配。 您可以通过运行modinfo来查看特定模块的匹配规则列表。 与这些规则对应的源代码构造是MODulE_DEVICE_table 。 器件表中的各个条目通常使用USB_DEVICE宏来构建,所以使用USB_DEVICE.*8187而不是8187应该将其缩小。

如果您有一个设备插入并工作,您可以通过查看它的sysfs条目来找出与哪个驱动程序相关联的驱动程序:

ls -l /sys/bus/usb/devices/*/driver

如果你可以建立其中一个设备描述符字符串,你可以让modprobe为你查找驱动程序,而不用通过这个实际加载它(我的设备再次作为例子):

modprobe -v -n 'usb:v15A9p0004d0001dc00dsc00dp00icFFiscFFipFF'

如果可以的话,所有的数字都可以在lsusb -v的输出中找到。 如果没有,请尝试零,也许你会得到一个通配符匹配。 请确保您使用大写字母作为十六进制数字,小写字母表示其他所有内容。 这只有在驱动程序存在于/lib/modules时才有效,所以找不到内核编译的驱动程序是不好的。

如果一切都失败了,那么低技术的方法就是从lsusb取出人类可读的设备名称,并将它加上“linux”这个词。

使用上面的一些方法,我发现你的设备的驱动程序叫做rtl8187,在drivers/net/wireless/rtl818x/rtl8187/dev.c注册了供应商和产品ID。

总结

以上是内存溢出为你收集整理的在Linux源代码中,对特定USB设备的识别是在哪里进行的?全部内容,希望文章能够帮你解决在Linux源代码中,对特定USB设备的识别是在哪里进行的?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1235378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存