【usb】设备的生命线
移动开发
2023-04-16 16:31:24
阅读次数: 0
创建设备 usb_alloc_dev
- HUB检测到自己的某个端口有设备连接进来之后,它会调用core里的
usb_alloc_dev
函数,为struct usb_device
结构的对象申请内存,这个函数在 rivers/usb/core/usb.c
文件中定义。
- usb_alloc_dev 函数就相当于 USB 设备的构造函数,在参数中, parent 是设备连接的 Hub,
bus 是设备连接的总线, port1 就是设备连接在 Hub 上的端口。
- 可以通过函数
kzalloc
完成内存分配和初始化0,两个动作。
- 在USB的世界里,一个主机控制器对应着一条总线。主机控制器驱动用
struct usb_hcd
结构表示,一条总线用 struct usb_bus
结构表示。
- 函数 usb_get_hcd 只是将得到的 usb_hcd 结构对象的引用计数加 1。
dev->dev.dma_mask = bus->controller->dma_mask;
就是与 DMA 传输相关的了,设备能不能进行 DMA 传输,得看主机控制器的脸色, 主机控制器不支持设备也没法使用。 所以这里 dma_mask
被设置为主机控制器的 dma_mask.
dev->state = USB_STATE_ATTACHED;
将 USB 设备的状态设置为 ATTACHED
,表示设备已经连接到 USB 接口上了,是Hub 检测到设备时的初始状态.
- ep_in[0]和 ep_out[0]本来表示的就是端点 0.
- 272 行到 291 行整个的代码就是首先判断你的设备是不是直接连到 Root Hub 上的, 如果是,
将 dev->devpath[0]赋值为 0,以示特殊,然后父设备设为 controller,同时把 dev->bus_id[]设置
为如 usb1/usb2/usb3/usb4 这样的字符串。如果你的设备不是直接连到 Root Hub 上的,分两种情
况:如果你的设备连接的 Hub 是直接连到 Root Hub 上的,则 dev->devpath 就等于端口号,否则
dev->devpath 就等于在父 Hub 的 devpath 基础上加一个“”再加一个端口号,最后把 bus_id[]设置
成 1-/2-/3-/4-这样的字符串后面连接上 devpath。
转载自blog.csdn.net/C2681595858/article/details/128177480