了解USB调用堆栈

了解USB调用堆栈

我试图了解设备如何在 Linux 中通过 USB 进行通信,特别是移动 Android 设备,这样我就可以通过 USB 将 DIY 项目连接到我的手机。经过一番搜索后,我只找到了一些针对某些设备的 USB 驱动程序的一般解释。

我想知道一些事情:

  1. 如何找到连接到移动设备的特定设备使用的驱动程序?我在哪里可以找到它的代码?
  2. USB 堆栈是什么样子的?找不到好的文档。
  3. 如何开发 USB 设备的驱动程序? (同样适用于安卓)
  4. 如何将这些驱动程序嵌入到内核中或将它们动态加载到我的手机上?

谢谢

答案1

部分答案:USB 驱动程序通常是通过查看供应商/设备 ID 和嵌入模块中的其他模式为特定 USB 设备加载的内核模块。您可以使用以下命令找到现有驱动程序的此信息modinfo,例如

$ sudo modinfo usbhid
filename:       /lib/modules/4.12.13/kernel/drivers/hid/usbhid/usbhid.ko
license:        GPL
description:    USB HID core driver
author:         Jiri Kosina
author:         Vojtech Pavlik
author:         Andreas Gal
alias:          usb:v*p*d*dc*dsc*dp*ic03isc*ip*in*
depends:        hid,usbcore
intree:         Y
vermagic:       4.12.13 SMP preempt mod_unload modversions 686 
parm:           mousepoll:Polling interval of mice (uint)
parm:           jspoll:Polling interval of joysticks (uint)
parm:           ignoreled:Autosuspend with active leds (uint)
parm:           quirks:Add/modify USB HID quirks by specifying  
quirks=vendorID:productID:quirks where vendorID, productID, and quirks are all in 0x-prefixed hex (array of charp)

还有各种工具可以显示现有设备正在使用哪个驱动程序。我相信这些最终都会使用来自层次结构的信息/sys

所以如果你想写一个新的驱动程序,你需要学习如何编写内核模块(google,有教程)。选择一个现有的驱动程序并对其进行修改。

您还可以使用类似的库在用户空间中编写“驱动程序”(或更确切地说应用程序)libusb

内核文档还包含有关USB接口,以及 USB 堆栈如何工作的信息。

相关内容