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

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值