tty(二)(imx serial)

基于linux-3.14.16
基于imx分析

一、串口设备注册

注册了一个uart设备驱动,和一个平台设备驱动
在这里插入图片描述
先一个一个看

1、serial_imx_driver平台设备驱动

在这里插入图片描述
在这里插入图片描述
看看匹配的设备树,imx6qdl.dtsi定义了很多,我们只看一个
在这里插入图片描述
如上图,设备树描述了寄存器地址,中断,使用时钟,使用dma等信息。
接着看probe干了什么,

serial_imx_probe

在这里插入图片描述
首先分配和一块空间作为struct imx_port
serial_imx_probe_dt拿了一些设备树的属性,初始化到创建的struct imx_port,但是这些属性在设备树我没有找到,先忽略。

接着获取寄存器地址,并映射出来,接着继续初始化struct imx_port
在这里插入图片描述
其他的先不管,我们先注意到imx_pops和一个定时器,先记着,,在struct imx_port中有一个操作集合定时器
在这里插入图片描述
这个是定时器的超时函数
在这里插入图片描述
接下来获取时钟,,猜uartclk是什么????
在这里插入图片描述
最后这里有一个全局变量imx_ports是个数组,以line为下标保存了创建的struct imx_port,,line在哪里初始化的,是什么内容现在我们还不清楚。

补充:在probe开始解析设备树的时候,看到port的line来自对serial的解析,应该是串口的序号(我们暂且这么理解)
在这里插入图片描述

在这里插入图片描述
然后看到一个注册port的接口uart_add_one_port,注册其实是struct uart_port,我们在上一节研究了uart的核心和api。

至此,通过对这个平台驱动的注册,以及匹配到设备树的uart节点,完成一个struct imx_port(struct uart_port)的创建,并且注册到serial核心

接下来返回去看uart_register_driver

uart_register_driver注册一个uart驱动

uart_register_driver注册的驱动imx_reg,上一节在注册port的时候就已经看到了,,最终是对imx_reg注册了一个port。
在这里插入图片描述

总结

总的来说,imx的串口驱动做了什么呢??,首先定义了一个struct uart_driver,调用serial核心的api uart_register_driver注册了这个struct uart_driver,,,然后匹配设备树,对每个uart(x)创建了一个struct uart_port,并调用uart_add_one_port将其添加到struct uart_driver。

二、对串口的操作

此时我们需要关注之前介绍过的操作集。
struct uart_ops是serial核心层定义的操作集,实现urat驱动需要实现,和uart_port关联。
在这里插入图片描述
Linux驱动开发杂记(0x12) - uart_ops结构体

三、修改485收发配置引脚

1、注册uart_port时初始化gpio为使能接收
2、当串口发送数据时,会调用start_tx(imx_start_tx)

linux驱动 内核层适配485驱动控制引脚

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值