之前在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驱动框架(一)的更多相关文章

  1. Linux下USB驱动框架分析【转】

    转自:http://blog.csdn.net/brucexu1978/article/details/17583407 版权声明:本文为博主原创文章,未经博主允许不得转载. http://www.c ...

  2. Linux USB ECM Gadget 驱动介绍

    ​1 USB ECM介绍 USB ECM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Ethernet Networking Control Mo ...

  3. Linux驱动框架之framebuffer驱动框架

    1.什么是framebuffer? (1)framebuffer帧缓冲(一屏幕数据)(简称fb)是linux内核中虚拟出的一个设备,framebuffer向应用层提供一个统一标准接口的显示设备.帧缓冲 ...

  4. 基于Mongodb的轻量级领域驱动框架(序)

    混园子也有些年头了,从各个大牛那儿学了很多东西.技术这东西和中国的料理一样,其中技巧和经验,代代相传(这不是舌尖上的中国广告).转身回头一望,几年来自己也积累了一些东西,五花八门涉猎到各种方向,今日开 ...

  5. [置顶] 自娱自乐6之Linux gadget驱动5(自编gadget驱动,包涵与之通讯的主机usb驱动,已调试通过)

    这个代码调试,你首先要保证你的udc驱动没用问题,这个有些矛盾,应为我本来要用gadget驱动来调试udc驱动,结果反过来了. 这是在zero基础改的,大概的改动 1. 去掉loop. 2. sink ...

  6. 基于Linux 3.0.8 Samsung FIMC(S5PV210) 的摄像头驱动框架解读(一)

    作者:咕唧咕唧liukun321 来自:http://blog.csdn.net/liukun321 FIMC这个名字应该是从S5PC1x0開始出现的.在s5pv210里面的定义是摄像头接口.可是它相 ...

  7. 跟着内核学框架-从misc子系统到3+2+1设备识别驱动框架

    misc子系统在Linux中是一个非常简单的子系统,但是其清晰的框架结构非常适合用来研究设备识别模型.本文从misc子系统的使用出发,通过了解其机制来总结一套的设备识别的驱动框架,即使用使用同一个驱动 ...

  8. Linux Framebuffer驱动剖析之二—驱动框架、接口实现和使用

    深入分析LinuxFramebuffer子系统的驱动框架.接口实现和使用. 一.LinuxFramebuffer的软件需求 上一篇文章详细阐述了LinuxFramebuffer的软件需求(请先理解第一 ...

  9. Linux设备驱动框架设计

    引子 Linux操作系统的一大优势就是支持数以万计的芯片设备,大大小小的芯片厂商工程师都在积极地向Linux kernel提交设备驱动代码.能让这个目标得以实现,这背后隐藏着一个看不见的技术优势:Li ...

  10. lcd驱动框架

    目录 lcd驱动框架 框图 程序分析 入口 打开open 读read 初始化registered_fb 注册 小结 程序设计 测试 方式一操作fb0 方式二操作tty 方式三操作终端 完整程序 tit ...

随机推荐

  1. java面试一日一题:讲下mysql中的锁

    问题:请讲下在mysql中的锁 分析:该问题主要考察对中锁的掌握,主要考察的是读.写锁.行锁.间隙锁.next-key,其他还有表锁.意向锁 回答要点: 主要从以下几点去考虑, 1.mysql中的锁有 ...

  2. 很呆的一个问题:我的新项目又找不到mapper这个bean了

    1.选springboot版本 <properties> <java.version>8</java.version> <project.build.sour ...

  3. java实现二维码登录功能

    本文采用Springboot工程进行开发,使用Google的zxing生成二维码,直接放代码: <?xml version="1.0" encoding="UTF- ...

  4. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-59 - 判断元素是否显示 - 上篇

    1.简介 有些页面元素的生命周期如同流星一闪,昙花一现.我们也不知道这个元素在没在页面中出现过,为了捕获这一美好瞬间,让其成为永恒.我们就来判断元素是否显示出现过. 在操作元素之前,可以先判断元素的状 ...

  5. IDL根据Landsat QA波段去云处理【代码】

    IDL根据Landsat QA波段去云处理[代码] ​ landsat QA波段(质量评估波段)是Landsat卫星影像数据中的一个特殊波段,他在Landsat5-9的每个产品中都存在.虽然我们常用的 ...

  6. web3 产品介绍:硬件钱包Ledger 离线管理私钥更安全

    Ledger是一款硬件钱包,可以安全地存储用户的加密资产,并在需要时进行交易.作为一种离线存储设备,Ledger钱包比在线钱包更加安全,因为它能够保护用户的私钥和交易信息,使其免受黑客攻击和网络病毒的 ...

  7. 机器人操作系统ROS (学习视频)—— 学习ROS,安装Ubuntu,虚拟机和双系统如何选择

    分享一个ROS入门视频: https://www.bilibili.com/video/BV1BP4y1o7pw/

  8. 清华镜像源、阿里镜像源全部失效后怎么办 —— conda 服务器代理配置 —— Jax框架的安装

    相关: conda 服务器代理配置 最近在用anaconda安装Jax框架,发现直接使用官方源下载的速度十分的慢,估计要需20个小时才能下载完成,对于这种情况第一个感觉就是使用镜像源来进行下载. 但是 ...

  9. 国产计算框架mindspore在gpu环境下编译分支r1.3,使用suod权限成功编译并安装,成功运行——(修复部分bug,给出具体编译和安装过程)—— 第二部分:源码编译及编译后文件安装、运行

    前文: 国产计算框架mindspore在gpu环境下编译分支r1.3,使用suod权限成功编译并安装,成功运行--(修复部分bug,给出具体编译和安装过程)-- 第一部分:依赖环境的安装 我们已经进行 ...

  10. 【转载】 使用Python的ctypes查看内存

    =================================================================== 原文地址: https://zhuanlan.zhihu.com ...