目录

一、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 节点

linux UART驱动相关推荐

  1. Linux uart驱动框架

    Linux uart驱动框架 串口驱动框架包括两部分 struct uart_driver int uart_register_driver(struct uart_driver *uart); vo ...

  2. 关于linux UART驱动和tty架构的理解

    关于linux UART驱动和tty架构的理解 最近要开发一个驱动程序,需要用到串口和SPI接口.平台的串口驱动程序本身在开发板中已经被实现了,也可以就这样直接使用,但是这样分开使用的结果就是在串口和 ...

  3. i.MX6ULL驱动开发 | 15 - Linux UART 驱动框架

    Linux UART 驱动框架比较简单,不需要设备驱动,只需要UART设备驱动即可. 一.Linux UART驱动框架 1. uart_driver结构体 Linux将 UART 驱动抽象为 uart ...

  4. Linux UART驱动分析及测试

    1.Linux TTY驱动程序框架 Linux TTY驱动程序代码位于/drivers/tty下面.TTY的层次接口包括TTY应用层.TTY文件层.TTY线路规程层.TTY驱动层.TTY设备驱动层.T ...

  5. Linux uart驱动文件,linux终端设备uart驱动分析

    一:前言 接着前面的终端控制台分析,接下来分析serial的驱动.在linux中,serial也对应着终端,通常被称为串口终端.在shell上,我们看到的/dev/ttyS*就是串口终端所对应的设备节 ...

  6. linux UART驱动_应用程序例程

    系列文章 I.MX6ULL 手册查找使用方法 实战点亮LED(寄存器版) I.MX6ULL 手册查找使用方法 实战点亮LED(固件库版本) linux 字符设备驱动实战 linux LED设备驱动文件 ...

  7. Linux uart 驱动

    一.串口驱动框架简介 Linux 提供了串口驱动框架.串口驱动没有主机端和设备端之分,就只有一个串口驱动,而且这个驱动也是由处理器厂家编写好了. 我们真正要做的就是在设备树中添加所要使用的串口节点信息 ...

  8. Linux设备驱动之UART驱动结构

    一.对于串口驱动Linux系统中UART驱动属于终端设备驱动,应该说是实现串口驱动和终端驱动来实现串口终端设备的驱动.要了解串口终端的驱动在Linux系统的结构就先要了解终端设备驱动在Linux系统中 ...

  9. linux设备驱动之串口移植,Linux设备驱动之UART驱动结构

    一.对于串口驱动Linux系统中UART驱动属于终端设备驱动,应该说是实现串口驱动和终端驱动来实现串口终端设备的驱动.要了解串口终端的驱动在Linux系统的结构就先要了解终端设备驱动在Linux系统中 ...

最新文章

  1. 微课丨华为的18条军规
  2. linux ln 权限不够,每次执行./都会出现权限不够,已经是root了 已解决!
  3. 组件间数据交互——父组件向子组件传值( props属性值类型) 子组件向父组件传值-携带参数 || 非父子组件间传值
  4. 解决TypeError: Tensor is unhashable if Tensor equality is enabled. Instead, use tensor.experimental_re
  5. cf1556A. A Variety of Operations
  6. java quartz 数据库_SpringBoot+Quartz+数据库存储
  7. 配置github的SSH key及GitHub项目上传方式一——使用终端命令行
  8. 常用排序算法(三)直接插入排序
  9. google protobuf_websoket解析protobuf协议
  10. AutoCAD中的Spline曲线算法分析(二)
  11. rtmp直播推流软件推荐
  12. linux操作系统和ucos操作系统,嵌入式操作系统ucos与linux比较
  13. redis雪崩击穿穿透
  14. 《Internet-常见域名后缀大全》
  15. PaddleOCR 识别器数据增强
  16. 关于ajax同步状态及sucess,complete的顺序的理解
  17. 基于微信小程序电子产品商城系统(springboot+ mybatis-plus+mysql+原生微信小程序)
  18. 解决Unknown column ‘xxx‘ in ‘where clause‘问题!!(泪的教训!!)
  19. 「AI芯片公司」比特大陆的路线图上,除了四款TPU还有在这三个产业落地的野心
  20. 视频和PPT已公开 | 第八届中国互联网测试大会·2021 MTSC 上海站

热门文章

  1. 西蒙购物网站学习 2019.12.9
  2. 江苏大学考研计算机专业目录,江苏大学考研专业目录
  3. SSRF 漏洞学习实战
  4. 从“恰当”的项目管理工具中,了解自己的缺点
  5. 解决windbg无法加载ntdll符号的问题
  6. 【知识学习】matlab入门
  7. 运用PS将日光照片转为美丽的日落景象
  8. python实现自动登录软件_python实现自动登录discuz论坛
  9. 微软将删除个人版Win10中的IE11
  10. 风讯DotNetCMS sp5安装笔记