linux UART驱动

文章详细介绍了UART驱动的关键结构体,包括uart_driver和uart_port,以及它们在驱动注册和注销过程中的作用。UART驱动是基于platform驱动的,通过设备树配置与硬件匹配。在分析了UART驱动的注册和匹配过程后,文章指出编写UART驱动时可以直接修改设备树配置来实现硬件连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、UART驱动关键结构体

二、UART驱动分析

三、UART驱动编写


一、UART驱动关键结构体

1、uart_driver 结构体

(1) uart_driver 结构体表示 UART 驱动, uart_driver 定义在 include/linux/serial_core.h 文件中,内容如下:

(2) 每个串口驱动都需要定义一个 uart_driver,加载驱动的时候通过 uart_register_driver 函数向
系统注册这个 uart_driver,此函数原型如下:

(3) 注销驱动的时候也需要注销掉前面注册的 uart_driver,需要用到 uart_unregister_driver 函数,
函数原型如下:

 

2、uart_port 结构体

(1) uart_port 表示一个具体的 port, uart_port 定义在 include/linux/serial_core.h 文件,内容如下(有省略):

(2) 每个 UART 都有一个 uart_port,uart_port 通过uart_add_one_port 函数与uart_driver 结合起来:

(3) 卸载 UART 驱动的时候也需要将 uart_port 从相应的 uart_driver 中移除,需要用到
uart_remove_one_port 函数,函数原型如下:

(4)uart_ops 结构体:  ops 包含了针对 UART 具体的驱动函数, Linux 系统收发数据最终调用的都是 ops 中的函数。ops 是 uart_ops类型的结构体指针变量, uart_ops 定义在 include/linux/serial_core.h 文件中,内容如下:

 uart_ops 是最底层的 UART 驱动接口,是实实在在的和 UART 寄存器打交道的。

二、UART驱动分析

1、UART 本质上是一个 platform 驱动;

2、打开 imx6ull.dtsi 文件,找到 UART3 对应的子节点,子节点内容如下所示:

 

3、通过 compatible 属性值找到对应的 UART 驱动文件,此文件为 drivers/tty/serial/imx.c:

(1) imx_serial_init 函数中向 Linux 内核注册了 imx_reg, imx_reg 就是 uart_driver 类型的结
构体变量:

(2) 设备,总线匹配

 (3) probe函数的实现

 

三、UART驱动编写

1、直接修改设备树配置即可

(1) 创建 uart 对应的 pinctrl 子节点

(2) 添加 uart 节点

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值