最近在学习USB协议,对照《Linux 那些事儿之我是USB Core》学习内核代码,从获取设备配置信息的函数usb_get_configuration开始,usb_parse_configuration,usb_parse_interface, usb_parse_endpoint三个函数内部的数据结构组织关系比较复杂,特意花时间把其中到数据结构关系整理了一下,希望有助记忆和理解。
下图中,蓝色部分是驱动中描述USB设备配置(广义配置,包括接口,端点等)的数据结构的指向关系,橙色部分是存放从设备读出来到配置信息的buffer,这几个函数的目的就是对buffer中的数据进行解析,把有用信息记录到驱动中的结构体中。
图中使用的符号说明:
英文句号.表示结构体成员,每一级子成员右缩进两字符
单向箭头表示指针指向或者有关联。
双向箭头表示驱动中的结构体是从buffer中拷贝一块数据直接填充;
起点为圆点的箭头表示是对当前数据结构的放大,表现更详细的信息
省略号表示其左侧的结构体有多个并排,是一个数组。