gadget驱动框架(一)
之前在linux移植udc驱动的时候,没有深入的理解整个gadget驱动框架,现在重新再屡屡gadget驱动,以便后期再次学习。本系列的文章以虚拟串口进行分析,相关源码均是基于linux4.19.123。
gadget驱动框架
gadget源码主要在:drivers/usb/gadget,以虚拟串口为例,对源文件做简单说明:
drivers/usb/gadget/function/*.c:实现具体的usb功能,有serial、video、audio等
drivers/usb/gadget/legacy/*.c:注册usb class驱动,往上与function衔接,往下与composite
drivers/usb/gadget/udc/*.c:usb device conctrl,与各IC相关,需各自实现;
drivers/usb/gadget/composite.c:复合设备,与硬件无关,往下与udc驱动衔接
Linux USB Gadget分三层架构,层次关系从上到下:
一层:USB Gadget功能层。BSP/Driver开发者通常是要实现这一层,从而实现一个具体的设备驱动,如Linux在此层实现了serial,mtp,mass_storage等。浏览参考关注此层代码时,会发现“composite”是此层的关键字,此层中关键的数据结构是:struct usb_composite_driver。这一层的驱动文件一般为:drivers/usb/gadget/function/*.c或drivers/usb/gadget/f_serial.c(传统Linux实现的USB转串口)。
二层:USB设备层。这一层是Linux内核开发维护者实现的,与我们没太大关系,不用我们操心,我们只关心其的一些接口就行。浏览参考关注此层时,会发现“gadget”是此层的关键字,此层的关键数据结构是:usb_gadget_driver,usb_composite_dev。这层主要的一个驱动文件为:driver/usb/gadget/composite.c
三层:USB设备控制器驱动层。这一层主要是与CPU、CPU USB控制器有关,与硬件紧密相关,这一层也比较头痛,主要它和USB控制器牵扯在一起,涉及有寄存器、时钟、DMA等等。但是这一层往往是由芯片厂商去实现。我们一般仅需在板级文件中处理好所需要的USB接口即可。这层的关键字就是“UDC”,主要驱动文件命名含“udc”关键字,一般与CPU或芯片厂商有关,如driver/usb/gadget/xxx_udc.c。
gadget驱动架构图
gadget驱动架构
gadget相关数据结构体关系
gadget驱动框架文章系列
主要结构体介绍相关文章:
1)gadget之composite
2)gadget之udc
3)gadget之usb_gadget
4)gadget之usb_function
驱动架构分析文章:
1)gadget驱动框架(一):本文章,主要介绍gadget基本框架、配置、系列文章的划分;
2)gadget驱动框架(二):主要介绍usb_gadget_driver、usb_composite_driver、usb_gadget、usb_udc等几个核心结构体的创建及注册。
3)gadget驱动框架(三):主要介绍usb_udc、usb_gadget_driver的绑定过程,及usb_function的匹配过程。
4)gadget驱动框架(四):主要介绍usb_function的注册、创建的过程。
5)gadget驱动框架(五):主要介绍虚拟串口的tty设备的注册、创建/dev/ttyGSx设备节点、tty相关接口的实现。
6)gadget驱动框架(六):主要介绍udc驱动枚举过程。
gadget驱动之serial内核配置
gadget驱动框架(一)的更多相关文章
- Linux下USB驱动框架分析【转】
转自:http://blog.csdn.net/brucexu1978/article/details/17583407 版权声明:本文为博主原创文章,未经博主允许不得转载. http://www.c ...
- Linux USB ECM Gadget 驱动介绍
1 USB ECM介绍 USB ECM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Ethernet Networking Control Mo ...
- Linux驱动框架之framebuffer驱动框架
1.什么是framebuffer? (1)framebuffer帧缓冲(一屏幕数据)(简称fb)是linux内核中虚拟出的一个设备,framebuffer向应用层提供一个统一标准接口的显示设备.帧缓冲 ...
- 基于Mongodb的轻量级领域驱动框架(序)
混园子也有些年头了,从各个大牛那儿学了很多东西.技术这东西和中国的料理一样,其中技巧和经验,代代相传(这不是舌尖上的中国广告).转身回头一望,几年来自己也积累了一些东西,五花八门涉猎到各种方向,今日开 ...
- [置顶] 自娱自乐6之Linux gadget驱动5(自编gadget驱动,包涵与之通讯的主机usb驱动,已调试通过)
这个代码调试,你首先要保证你的udc驱动没用问题,这个有些矛盾,应为我本来要用gadget驱动来调试udc驱动,结果反过来了. 这是在zero基础改的,大概的改动 1. 去掉loop. 2. sink ...
- 基于Linux 3.0.8 Samsung FIMC(S5PV210) 的摄像头驱动框架解读(一)
作者:咕唧咕唧liukun321 来自:http://blog.csdn.net/liukun321 FIMC这个名字应该是从S5PC1x0開始出现的.在s5pv210里面的定义是摄像头接口.可是它相 ...
- 跟着内核学框架-从misc子系统到3+2+1设备识别驱动框架
misc子系统在Linux中是一个非常简单的子系统,但是其清晰的框架结构非常适合用来研究设备识别模型.本文从misc子系统的使用出发,通过了解其机制来总结一套的设备识别的驱动框架,即使用使用同一个驱动 ...
- Linux Framebuffer驱动剖析之二—驱动框架、接口实现和使用
深入分析LinuxFramebuffer子系统的驱动框架.接口实现和使用. 一.LinuxFramebuffer的软件需求 上一篇文章详细阐述了LinuxFramebuffer的软件需求(请先理解第一 ...
- Linux设备驱动框架设计
引子 Linux操作系统的一大优势就是支持数以万计的芯片设备,大大小小的芯片厂商工程师都在积极地向Linux kernel提交设备驱动代码.能让这个目标得以实现,这背后隐藏着一个看不见的技术优势:Li ...
- lcd驱动框架
目录 lcd驱动框架 框图 程序分析 入口 打开open 读read 初始化registered_fb 注册 小结 程序设计 测试 方式一操作fb0 方式二操作tty 方式三操作终端 完整程序 tit ...
随机推荐
- ThinkPHP一对一关联模型的运用(ORM)
一.序言 最近在写ThinkPHP关联模型的时候一些用法总忘,我就想通过写博客的方式复习和整理下一些用法. 具体版本: topthink/framework:6.1.4 topthink/think- ...
- 题解 CF741E Arpa’s abnormal DNA and Mehrdad’s deep interest
CF741E Arpa's abnormal DNA and Mehrdad's deep interest 记 \(R_{i}\) 表示把 \(T\) 插入在 \(S\) 的第 \(i\) 位后组成 ...
- 【Vue】可编辑表格与三级联动下拉
需求是给员工分配岗位,设计上是一人多岗的存在... 单位 -- 部门 -- 岗位 这样的层级 功能效果: 因为员工可以在不同的单位下任职岗位,所以这个每一个岗位都是一个独立 查询单位列表是固定的,但是 ...
- 在分布式nvidia cuda-pytorch中同时使用MPI和NCCL会造成死锁——分布式pytorch的backend不能同时使用MPI和NCCL
参考原文: https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/mpi.html#inter-gpu-communication-wit ...
- 神奇的发现——所有的aarch64架构的CPU平台下的深度学习框架均不原生支持CUDA
一个记录: 神奇的发型--所有的aarch64架构的CPU平台下的深度学习框架均不原生支持CUDA 不论是mindspore.pytorch.TensorFlow框架只要是aarch64架构的CPU下 ...
- 华为超算平台git、cmake、wget、curl报错:SSLv3_client_method version OPENSSL_1_1_0 not defined in file libssl.so.1.1 with link time reference——解决方法
最近在使用超算平台时报错,不管是git.cmake.wget.curl中的哪个都报错,大致错误: /usr/bin/cmake3: relocation error: /usr/lib64/libcu ...
- 面试题:写一个遍历ArrayList的时候,删除一个元素的例子?并说说原理。
代码实现 方法一:for循环 public static void main(String[] args) { ArrayList<String> list = new ArrayList ...
- 09-canvas绘制坐标系
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- grpc报错合集以及解决方案
这里介绍下grpc各种报错以及解决方案 io.grpc.StatusRuntimeException: UNIMPLEMENTED 这个错误网上很多,大部分情况下 是由于方法找不到,即客户端与服务端p ...
- CF Pinely Round 4
https://codeforces.com/contest/1991 \(-122=2019\) D \(1,3,4,6\) 构成团,所以答案下界为 \(4\) 按模 \(4\) 染色.同色的二进制 ...