Linux 源代码中的哪个位置会识别特定的 USB 设备?

2024-05-06

我有一个特定的 USB 设备,我想检查其 Linux 驱动程序源代码。我的理解是,USB 驱动程序执行的第一步是注册自己能够处理具有特定供应商 ID 和产品 ID 的设备。就我而言,供应商 ID 是0BDA产品 ID 是8187。有了这些信息,有没有一种方法可以找到将自身注册为能够处理该设备的源文件,以便找出哪些其他源文件实际实现了驱动程序详细信息?

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


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

usb:v15A9p0004d0001dc00dsc00dp00icFFiscFFipFF

然后将该字符串传递给 modprobe,modprobe 将其与模块本身中找到的字符串(带有通配符)进行匹配。您可以通过运行来查看特定模块的匹配规则列表modinfo在上面。与这些规则相对应的源代码构造是MODULE_DEVICE_TABLE。设备表中的各个条目通常是用USB_DEVICE宏,所以 grepUSB_DEVICE.*8187而不是仅仅8187应该缩小范围。

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

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

如果您可以构建这些设备描述符字符串之一,您可以要求 modprobe 为您查找驱动程序,而无需通过执行以下操作实际加载它(再次以我的设备为例):

modprobe -v -n 'usb:v15A9p0004d0001dc00dsc00dp00icFFiscFFipFF'

所有数字都可以在输出中找到lsusb -v如果你能得到它。如果没有,请尝试使用零,也许您会得到通配符匹配。确保使用大写字母表示十六进制数字,使用小写字母表示其他所有数字。仅当驱动程序存在时这才有效/lib/modules因此,它对于查找内核编译中遗漏的驱动程序没有好处。

如果其他方法都失败了,那么技术含量较低的方法是从以下位置获取人类可读的设备名称:lsusb,然后在 google 上加上“Linux”一词。

使用上述一些方法,我发现您的设备的驱动程序名为 rtl8187,其供应商和产品 ID 注册自drivers/net/wireless/rtl818x/rtl8187/dev.c.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 源代码中的哪个位置会识别特定的 USB 设备? 的相关文章

  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • Elasticsearch 无法写入日志文件

    我想激活 elasticsearch 的日志 当我运行 elasticsearch 二进制文件时 我意识到我在日志记录方面遇到问题 无法加载配置 这是输出 sudo usr share elasticsearch bin elasticse
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • 如何根据 HTTP 请求使用 Python 和 Flask 执行 shell 命令并流输出?

    下列的这个帖子 https stackoverflow com questions 15092961 how to continuously display python output in a webpage 我能够tail f网页的日志
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https

随机推荐

  • 在什么情况下会在快速测试中使用expectationForNotification

    我有点困惑什么 什么时候做expectationForNotification as opposed to期望与描述 我无法在 swift 中找到任何明确的示例来说明您何时以及如何处理此调用 我假设它可能是为了测试通知 但看起来它可能只是整
  • 文件 ReadAllLines 将外语变成乱码 (�)

    我正在创建一个工具来替换文本文件中的某些文本 我的问题是 File ReadAllLines 将希伯来字符变成乱码 奇怪的问号 有谁知道为什么会发生这种情况 请注意 我在游戏等中确实遇到希伯来语问题 在记事本中 我无法保存希伯来语文档 我可
  • 使用文件名将文件一个文件夹复制到 Google 云端硬盘中的另一个文件夹

    我的谷歌云端硬盘帐户中有两个文件夹 文件夹 1 和 文件夹 2 文件夹1 内有多个文件 假设有一个文件名Test txt我想复制Test txt使用 Driveapp 将文件保存到 文件夹 2 我找到了代码 但它仅适用于 文件唯一 ID 我
  • 在linux x86平台上学习ARM所需的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 x86 linux 机器 在阅读一些关于 ARM 的各种信息时 我很好奇 现在我想花一些时间学
  • 从服务定期更新 AppWidget

    这就是我想要从我的 AppWidget 中得到的 当小部件添加到屏幕时 配置活动就会出现 到目前为止还不错 保存配置后 将启动一个更新小部件的服务 到目前为止一切顺利 定期安排警报以运行更新小部件的服务 这里遇到麻烦了 这已经严重让我的头发
  • 崩溃的 Visual Studio Live 单元测试

    我是新用户堆栈溢出这是我的问题 作为我工作的一部分 我们最近安装了 VS 2017 企业版 一切都很好 直到几周前实时单元测试模块停止工作 有谁能够解决此类问题吗 这是输出控制台 17 26 23 170 Info Live Unit Te
  • 为什么我可以在 Ruby 中使用 Object#send 访问私有/受保护的方法?

    班上 class A private def foo puts foo end public def bar puts bar end private def zim puts zim end protected def dib puts
  • Django:生成 CSV 文件并将其存储到 FileField 中

    在我的 Django 视图文件中 我需要从元组列表生成 CSV 文件 并将 CSV 文件存储到模型的 FileField 中 class Bill models Model billId models IntegerField bill m
  • 如何在IntelliJ中快速输入记录器定义?

    是否有一些实时模板或其他东西可以将记录器定义添加到类中 在 Eclipse 中我有一个模板 private static final Logger log LoggerFactory getLogger enclosing type cla
  • 将元素追加到 Angular QueryList

    有没有办法将新元素追加到 QueryList 中 例如 我有一个像这样的查询列表 ContentChildren SysColumn syscolumns QueryList
  • Ruby 枚举器链接

    在这个例子中 1 2 3 each with index map i j i j gt 0 2 6 我的理解是 既然each with index枚举器链接到map map表现得像each with index通过在块内传递索引 并返回一个
  • Adobe Reader 命令行参考

    有没有official不同版本的命令行 开关 参考Adobe 以前称为 Acrobat Reader 我没有找到任何东西Adobe 开发人员连接 http www adobe com devnet 我特别想 启动 Reader 并打开文件
  • 查找彼此接近的对象边界

    我正在研究一个计算机视觉问题 其中问题的第一步是找到物体彼此靠近的位置 例如 在下图中 我感兴趣的是找到灰色标记的区域 Input Output 我目前的方法是首先反转图像 然后通过侵蚀进行形态梯度跟随 然后删除一些不感兴趣的轮廓 脚本如下
  • Hibernate从数据库获取列表

    在下面的代码中 我尝试获取包含数据库中所有产品的产品列表 public List
  • 如何在iphone中画同心圆?

    我想画一个戒指 环应填充在外圆中 我参考了一个文档http developer apple com library mac documentation GraphicsImaging Conceptual drawingwithquartz
  • 将 xml 转换为 python 字典

    我正在尝试创建一个 dict 类来处理 xml 但陷入困境 我真的没有想法了 如果有人可以指导这个主题 那就太好了 到目前为止开发的代码 class XMLResponse dict def init self xml self resul
  • 使用 Scoop 编程 DEAP

    我在 python 中使用 DEAP 库来解决多目标优化问题 我想使用多个处理器来完成这项任务 但是 我遇到了一些麻烦 为了提供一些背景信息 我将 networkx 与 DEAP 结合使用 我还定义了适应度函数 交叉和变异函数 由于某些原因
  • 从 JDK 1.6 迁移到 JDK 1.7 的 PowerMockito 测试出现约束违规

    我们有一些测试在 JDK 1 6 上运行良好 我们现在正在转向 JDK 1 7 这些测试在 Eclipse 中运行良好 当我们从 Ant 构建运行这些测试时 我们会看到如下错误 junit framework TestListener ad
  • 具有多个滚动方向的颤动列表视图

    我有某种时间表 其中包含小时数和天数 Widget buildSchedule ScheduleLoaded state final List
  • Linux 源代码中的哪个位置会识别特定的 USB 设备?

    我有一个特定的 USB 设备 我想检查其 Linux 驱动程序源代码 我的理解是 USB 驱动程序执行的第一步是注册自己能够处理具有特定供应商 ID 和产品 ID 的设备 就我而言 供应商 ID 是0BDA产品 ID 是8187 有了这些信