usb驱动开发8之配置描述符】的更多相关文章

前面分析了usb的四大描述符之端点描述符,接口描述符(每一个接口对应一个功能,与之配备相应驱动),下面是看配置描述符还是看设备描述符呢??我们知道,设备大于配置,配置大于接口,接口可以有多种设置. 我们还是按照从小到大的顺序,继续看配置结构体吧! struct usb_host_config { struct usb_config_descriptor desc; char *string; /* iConfiguration string, if present */ /* the inter…
前面struct usb_interface里表示接口设置的struct usb_host_interface被有意的飘过了,咱们在这节主要讲讲这个结构体,同样在include/linux/usb.h文件里定义. /* host-side wrapper for one interface setting's parsed descriptors */ struct usb_host_interface { struct usb_interface_descriptor desc; /* arr…
学到这里不容易,先说一段故事吧. 二兄弟住一大楼的第80层,某深夜回家忘看通知(内容今夜停电). 兄弟俩背着沉重的大背包,在楼底下商量一下,决定一鼓作气,爬楼梯回家.两人抖擞精神,开始爬楼.爬到20楼的时候,开始觉得背包很重了.两人商量,决定把背包存在20楼,到时候再回过头来取.卸下了背包,两个人觉得很轻松,说说笑笑地继续往上爬. 爬到40楼的时候,两人已经很累了,就开始互相抱怨指责.哥哥说:你为什么不看通知啊?弟弟说:我忘了看通知这件事,你怎么不提醒我昵?两个人就这样吵吵闹闹,一路吵到60层.…
前面分析了usb的四大描述符之端点描述符,接口描述符(每一个接口对应一个功能,与之配备相应驱动),配置描述符,最后分析设备如何包括这些描述符.首先记住,在usb的世界里,设备大于配置,配置大于接口,接口包含多个设置,接口也可以理解为功能,所有端点的集合构成一个功能.废话少说,看一下usb设备结构体定义吧! struct usb_tt; /** * struct usb_device - kernel's representation of a USB device * @devnum: devi…
查了一整天的资料,自己把不懂的全部试了一遍 一下是程序以及注释 /* USB设备描述符*/ const uint8_t CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] = { 0x12, /*bLength 描述符的长度*/ USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType 描述符的类型(设备描述符为0x01)*/ 0x00, /*bcdUSB USB协议的版本*/ 0x02, 0x00, /*…
HDF(Hardware Driver Foundation)驱动框架是HarmonyOS硬件生态开放的基础,为开发者提供了驱动加载.驱动服务管理和驱动消息机制等驱动能力,让开发者能精准且高效地开发驱动程序. 本期,我们将为大家带来HDF驱动框架中USB DDK的解析与指导. 一.USB DDK介绍 USB(Universal Serial Bus)通用串行总线,用于规范电脑与外部设备的连接和通讯,包含了主机端(Host)和设备端(Device).其中,主机端负责USB总线中的数据传输及端口管理…
本文转载自:http://www.360doc.com/content/12/0504/19/8363527_208666082.shtml 编写USB驱动程序步骤:1所有usb驱动都必须创建主要结构体struct usb_driverstruct usb_driver->struct module *owner   (有他可正确对该驱动程序引用计数,应为THIS_MODULE)->const char *name   (驱动名字,运行时可在查看 /sys/bus/usb/drivers/)-…
我们总是很喜欢高潮,不是吗?那就好好对待她哦.我们来看一下linux中的高潮部分设备是怎么从Address进入Configured的. usb_set_configuration函数的代码就不贴了,可以回顾内核去看. usb_disable_device行函数主要意味着如果设备已经在Configured状态了,就得做些清理工作.都清理些什么怎么去清理?别着急,要想学会,得仔细研究下message.c里的usb_disable_device函数. /* * usb_disable_device -…
现在开始就沿着usb_generic_driver的生命线继续往下走.设备的生命线你可以为是从你的usb设备连接到hub的某个端口时开始,而驱动的生命线就必须得回溯到usb子系统的初始化函数usb_init了. if (retval) goto hub_init_failed; retval = usb_register_device_driver(&usb_generic_driver, THIS_MODULE); if (!retval) goto out; 在usb子系统初始化的时候就调用…
现在已经使用GET_DESCRIPTOR请求取到了包含一个配置里所有相关描述符内容的一堆数据,这些数据是raw的,即原始的,所有数据不管是配置描述符.接口描述符还是端点描述符都挤在一起,所以得想办法将它们给分开.,于是usb_parse_configuration()就做这些事. static int usb_parse_configuration(struct device *ddev, int cfgidx, struct usb_host_config *config, unsigned…