USB总线驱动(二)设备驱动ch341以及serial

我们以一个usb设备(ch341)驱动例子来看下用法。

一、ch341设备驱动

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如上,注册了一个ch341的驱动,根据指定的产品号和设备号,这个驱动将会适配3个类型的usb转串口设备。
module_usb_serial_driver最终转开成
标准的驱动入口,所有的转开定义在serial.h(serial层)定义。

注册 usb_serial_driver 的接口 usb_serial_register_drivers也是在serial层。

二、usb总线驱动的serial层

注册usb转串口设备驱动,最终调用到usb_serial_register_drivers
属于对usb设备驱动的其中一个封装
最终这个接口会将一个usb设备驱动注册到usb总线
如下

在这里插入图片描述

1、分配一个usb_driver结构体
在这里插入图片描述
2、上面看到注册ch341驱动 reset_resume 有给赋值,
这里不会重新赋值为 usb_serial_reset_resume
在这里插入图片描述

3、注册usb设备驱动usb_register,
usb_register 将会最终调用到 usb总线封装的驱动注册接口,usb_register_driver 在分析usb总线时有分析。
在这里插入图片描述
4、usb_serial_driver 和 usb_driver 关联
usb_serial_register 注册 usb_serial_driver 到serial层
usb_serial_register 涉及到serial层的内容,后面再分析
在这里插入图片描述

5、driver_attach
匹配总线驱动和总线设备,前面有分析过 driver_attach
主要是遍历所有的总线上的设备,对注册的驱动,
执行总线的 match
如果匹配了将会执行总线的probe 或者 总线驱动的probe
driver_attach
在这里插入图片描述

三、usb_serial_driver注册到总线

在这里插入图片描述

1、对 usb_serial_driver 的回调做初始化(如果外面没有初始化的话,给serial层默认实现的回调)
ch341在定义 usb_serial_driver 驱动的是后有一些是初始化了的。

2、将 usb_serial_driver 放入 serial层的全局链表

3、注册 usb_serial_driver 到 seria层的总线
可以看到,调用了 driver_register ,注册到总线 usb_serial_bus_type,不再赘述。
在这里插入图片描述

四、serial层的入口

在这里插入图片描述
1、创建了一个 tty_driver

2、注册 serial 总线

3、注册 tty_driver

4、注册 usb_driver,是serial层自带的 usb_driver

5、注册 usb_serial_driver ,是serial层自带的 usb_serial_driver

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257017.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式详细讲解

目录 一、正则表达式概念 二、八元素 1、普通字符: 2、元字符: 3、通配符 .: 4、字符类 []: 5、量词: 6、锚点 ^ 和 $: 7、捕获组 (): 8、转义字符 \: 三、日常使用的正则…

算法 最小生成树

算法选择 稠密图:朴素版普利姆算法【因为代码短】 稀疏图:克鲁斯卡尔算法【因为思路简单】 普利姆(Prim) 朴素 Prim 时间复杂度 O(n^2) 适用情况 稠密图 算法流程 集合:当前已经在连通块中的所有点 初始化距…

水平自动扩容和缩容HPA;API资源对象NetworkPolicy;Kubernetes用户安全控制;Kubernetes创建普通用户示例

水平自动扩容和缩容HPA;API资源对象NetworkPolicy;Kubernetes用户安全控制;Kubernetes创建普通用户示例 水平自动扩容和缩容HPA(本部分操作适合K8s版本>1.23.x) HPA全称是Horizontal Pod Autoscaler,翻译成中文是…

Windows 系统彻底卸载 SQL Server 通用方法

Windows 系统彻底卸载 SQL Server 通用方法 无论什么时候,SQL Server 的安装和卸载都是一件让我们头疼的事情。因为不管是 SQL Server 还是 MySQL 的数据库,当我们在使用数据库时因为未知原因出现问题,想要卸载重装时,如果数据库…

[LeetCode]-283. 移动零-1089. 复写零

目录 283. 移动零 描述 解析 代码 1089. 复写零 描述 解析 代码 283. 移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 &…

【Linux--基础IO】

目录 一、系统文件接口1.1 open1.2 write1.3 read1.4 close 二、文件描述符三、文件描述符的分配规则四、重定向4.1输出重定向的原理4.2dup2函数的系统调用 五、缓冲区5.1代码及现象5.2原理解释5.3C语言FILE 六、文件系统6.1磁盘的介绍6.1磁盘的分区管理 7、软硬连接7.1软连接7…

Windows本地如何添加域名映射?(修改hosts文件)

1. DNS(域名系统) Domain Name System(域名系统):为了加快定位IP地址的速度, 将域名映射进行层层缓存的系统. 目的:互联网通过IP(10.223.146.45)定位浏览器建立连接,但是我们不易区别IP,为了方便用户辨识I…

使用cmake构建的工程的编译方法

1、克隆项目工程 2、进入到工程目录 3、执行 mkdir build && cd build 4、执行 cmake .. 5、执行 make 执行以上步骤即可完成对cmake编写的工程进行编译 ,后面只需执行你的编译结果即可 $ git clone 你想要克隆的代码路径 $ cd 代码文件夹 $ mkdir bu…

【GAMES101】三维变换

games101的第四节课讲了三维变换和观察变换,我们这里先记录一下三维变换的知识,后面再讲观察变换 齐次坐标下的三维变换 类似于解决之前二维变换平移的问题,三维变换下用齐次坐标通过增加一个维度来表示,第四个维度为1表示这是个…

【计算机网络学习之路】HTTP请求

目录 前言 HTTP请求报文格式 一. 请求行 HTTP请求方法 GET和POST的区别 URL 二. 请求头 常见的Header 常见的额请求体数据类型 三. 请求体 结束语 前言 HTTP是应用层的一个协议。实际我们访问一个网页,都会像该网页的服务器发送HTTP请求,服务…

Verilog学习 | 用initial语句写出固定的波形

initial beginia 0;ib 1;clk 0;#10ia 1; #20ib 0;#20ia 0; endalways #5 clk ~clk; 或者 initial clk 0;initial beginia 0;#10ia 1; #40ia 0; endinitial beginib 1;#30 ib 0; endalways #5 clk ~clk;

Linux Component概述和高通V4l2驱动模型

1 Linux为什么要引入Component框架? 为了让subsystem按照一定顺序初始化设备才提出来的。 subsystem中由很多设备模块,内核加载这些模块的时间不确定。子系统内有些模块是需要依赖其它模块先初始化才能进行自己初始化工作(例如v4l2 subdev和v4l2 video …