usb驱动开发5之总线设备与接口】的更多相关文章

Linux设备模型中的总线落实在USB子系统里就是usb_bus_type,它在usb_init的函数bus_register(&usb_bus_type)里注册.usb_bus_type定义如下: struct bus_type usb_bus_type = { .name = "usb", .match = usb_device_match, .uevent = usb_uevent, .suspend = usb_suspend, .resume = usb_resume…
在上文说usb_init函数,却给我们留下了很多岔路口.这次就来好好聊聊关于总线设备驱动模型.这节只讲理论,不讲其中的函数方法,关于函数方法使用参考其他资料. 总线.设备.驱动对应内核结构体分别为bus_type.device.device_driver. 我们会发现,struct bus_type 结构中有成员struct kset drivers 和struct kset devices,同时struct device结构中有两个成员struct bus_type和structdevice_…
HDF(Hardware Driver Foundation)驱动框架是HarmonyOS硬件生态开放的基础,为开发者提供了驱动加载.驱动服务管理和驱动消息机制等驱动能力,让开发者能精准且高效地开发驱动程序. 本期,我们将为大家带来HDF驱动框架中USB DDK的解析与指导. 一.USB DDK介绍 USB(Universal Serial Bus)通用串行总线,用于规范电脑与外部设备的连接和通讯,包含了主机端(Host)和设备端(Device).其中,主机端负责USB总线中的数据传输及端口管理…
前面分析了usb的四大描述符之端点描述符,接口描述符(每一个接口对应一个功能,与之配备相应驱动),配置描述符,最后分析设备如何包括这些描述符.首先记住,在usb的世界里,设备大于配置,配置大于接口,接口包含多个设置,接口也可以理解为功能,所有端点的集合构成一个功能.废话少说,看一下usb设备结构体定义吧! struct usb_tt; /** * struct usb_device - kernel's representation of a USB device * @devnum: devi…
回到struct usb_hcd,继续努力的往下看. kref,usb主机控制器的引用计数.struct usb_hcd也有自己专用的引用计数函数,看hcd.c文件. static void hcd_release (struct kref *kref) { struct usb_hcd *hcd = container_of (kref, struct usb_hcd, kref); kfree(hcd); } struct usb_hcd *usb_get_hcd (struct usb_h…
总算是进入了HCD的片儿区,既然来到一个片区,怎么都要去拜会一下山头几个大哥吧.,先回忆一些我们怎么到这里的?给你列举一个调用函数过程usb_control_msg->usb_internal_control_msg->usb_start_wait_urb->usb_submit_urb->usb_hcd_submit_urb.这个山头儿,王中之王就是drivers/usb/core/hcd.h里定义的struct usb_hcd. /*----------------------…
直接看代码吧. /*-------------------------------------------------------------------*/ /** * usb_submit_urb - issue an asynchronous transfer request for an endpoint * @urb: pointer to the urb describing the request * @mem_flags: the type of memory to alloca…
函数usb_control_msg完成一些初始化后调用了usb_internal_control_msg之后就free urb.剩下的活,全部留给usb_internal_control_msg去做了,那就去了解一下它背后的生活吧. /*-------------------------------------------------------------------*/ // returns status (negative) or length (positive) static int…
暂时先告别媒人,我们去分析各自的生命旅程,最后还会回到usb_device_match函数. 首先当你将usb设备连接在hub的某个端口上,hub检测到有设备连接了进来,它会为设备分配一个struct usb_device结构的对象并初始化,并调用设备模型提供的接口将设备添加到usb总线的设备列表里,然后usb总线会遍历驱动列表里的每个驱动,调用自己的match函数看它们和你的设备或接口是否匹配.hub检测到自己的某个端口有设备连接了进来后,它会调用core里的usb_alloc_dev函数为s…
此系列是http://blog.csdn.net/fudan_abc/博文的整理,同时加入了自己的理解.很敬佩fudan_abc的文章,仔细学习和分析受益很多.注:fundan_abc所分析linux内核代码所用的版本是2.6.22.6. Q:学习linux下的usb通信要怎样进行? 熟悉linux驱动开发,同时需要了解usb协议规范,对照linux下的usb驱动代码慢慢分析和学习 Q:为什么要开发usb? 在usb出现以前,设备接口多样化(有串口.并口等),而usb可以实现这些接口的统一和标准…