linux UART驱动

UART驱动学习一(UART硬件介绍) 以上不同的UART芯片代表了串口通信技术从早期8250到现代NS16850的演变过程,随着技术的发展,它们在数据处理能力、缓冲区大小和支持的波特率等方面逐步得到了增强。这使得现代的串口通信能够在更高的速度和更复杂的环境中工作。例如,现代操作系统和硬件往往使用NS16550A或NS16850,因为它们提供了优良的性能和功能。如果需要在特定应用中选择合适的串口芯片,可以根据上述特性进行参考。本文章参考了韦东山老师驱动大全部分笔记,其余内容为自己整理总结而来。水平有限,欢迎各位在评论区指导交流!!!😁😁😁。 阅读详情

目录

一、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 kernel】linux 的uart驱动框架分析 本文分析linux的uart框架 阅读详情

相关推荐

linux UART(RS232/485)驱动实验

文章目录一、linux下的UART驱动框架1. uart_driver 注册与注销2. uart_port 的添加与移除3. uart_ops 实现二、6u UART驱动分析1. UART 的 的 platform 驱动框架2. uart_driver 初始化3. uart_port 初始化与添加4. imx_pops 结构体变量三、原理图分析四、RS232驱动编写1. UART3 IO 节点创建2. 添加 uart3 节点五、移植minicom1. 移植ncurses2. 移植 minicom六、RS

lengyuefeng212的博客 6553

Linux内核UART串口子系统驱动框架详解

具体看函数内部,申请了imx_uart结构体之后,显示解析了设备树获取了寄存器信息,然后设置这个uart_port结构体,然后uart_port结构体里面的ops操作结构体对应的是uart_ops结构体,这个uart_ops结构体里面对应的就是一些imx6ull自己的一些操作函数了,这就具体到底层硬件操作函数了,设置完这些东西之后就开始调用uart_add_one_port(&imx_reg, &sport->port)函数去添加一个port。

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 1万+

Linux tty驱动学习 - UART驱动注册

8250/16550系列芯片为常见的UART芯片,该类芯片的驱动文件为8250.c,位于内核源码的/drivers/serial/目录下面。serial8250_init为该驱动的入口函数,nr_uarts和UART_NR在内核配置中定义,跟具体的平台相关,通常定义为4。由于CONFIG_SPARC没有被定义,所以做的第一件事情就是注册一个名为serial_8250_reg的UART驱动。stat

sbctsp的博客 1788

UART驱动程序详解(基于Linux)——注册过程

“uart是基于tty字符设备框架的一种封装”,注册uart驱动的过程实质上是注册tty设备驱动的过程,故很多资料上都有说明,串口就是tty设备的一种。让我们来解开uart的神秘面纱吧。

weixin_43479651的博客 2024

Linux应用编程(三)UART串口

首先,我们就先来使用命令行基本调试一下我们的串口,来确保串口的可用性。在开始实验前,请一定要检查测试好所需硬件是否使用正常,不然调试过程中出现的问题,会让你很烦恼。函数的作用是获取指定文件描述符(fd)所关联的终端设备的当前属性,并将这些属性存储到指定的 termios 结构体(termios_p)中。这里我将不再展示参数的宏定义,因为太多了,很多也用不到,有需要的自己去查看其他博客来学习。波特率,常用 B2400,B4800,B9600,B115200,B460800。(4)设置终端设备参数,激活配置。

qq_1033275663的博客 4154

红米12C刷机避坑指南:NV数据损坏的修复与系统版本选择

本文提供了红米12C刷机过程中避免NV数据损坏的详细指南,涵盖系统版本选择、SP刷机工具使用和fastboot命令修复。重点分析了NV数据损坏的原因与表现,并给出通过工程固件和深度修复技巧解决基带未知、IMEI丢失等问题的实操方案,帮助用户安全完成刷机。

cuda7parallel的博客 1075

Linux驱动学习day24(UART子系统)

摘要:本文系统介绍了UART串口通信原理及Linux系统中的TTY框架。首先阐述了UART的硬件特性,包括波特率计算、数据传输流程和电平转换;其次分析了Linux TTY子系统架构,解释终端设备节点差异;然后详细讲解了串口应用编程方法,包括行规程设置和GPS数据解析实例;最后深入剖析了UART驱动框架,包括注册过程、数据收发流程及调试方法。全文通过理论分析与代码实例相结合的方式,全面呈现了Linux环境下串口通信的完整技术体系。

weixin_71568456的博客 1324

【CODESYS】-软件Bug与处理方法(20240710更)

【CODESYS】-软件Bug与处理方法(不定期更新)

qq_35316470的博客 5186

linux的最新uart驱动,Linux下的UART驱动框架详解

Linux下的 UART驱动框架53.1.1 uart_driver结构体在 Linux 中 uart 和 I2C、SPI 一样,提供了串口驱动框架,只需要按照提供的串口框架函数编译驱动即可。一般来说串口驱动都已经实现好了,我们需要做的就是在设备树文件中,添加相应的设备节点。当设备和驱动匹配成功后,串口就能够正常工作。在 Linux 中,用 uart_driver 结构体来描述串口,u...

weixin_33711871的博客 876

Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建

本文介绍Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建方法。

无线通信实验室 1万+

Ansys Zemax导入CAD文件避坑指南:STL/STEP/IGES格式选择与性能优化

本文深度解析了在Ansys Zemax中导入CAD文件的核心要点与性能优化策略。针对STL、STEP、IGES等主流格式,详细对比了其几何表示、精度与适用场景差异,并提供了基于模型特征的格式选择决策树。文章重点分享了体元、弦公差等高级参数的调优技巧,以及处理复杂装配体和避免精度陷阱的实战指南,旨在帮助光学工程师提升仿真效率与结果可靠性。

weixin_29202687的博客 437

47.Linux UART 驱动

本文介绍了Linux系统中UART串口驱动的开发要点,重点分析了I.MX6U开发板上的UART3接口驱动实现。主要内容包括: Linux UART驱动框架核心结构体uart_driver和uart_port的作用与定义 驱动注册与注销的API函数uart_register_driver/uart_unregister_driver uart_port的添加与移除方法uart_add_one_port/uart_remove_one_port 关键操作集uart_ops的结构与功能,包含串口底层操作函数 以I

m0_57852920的博客 771

从零构建MAVLink通信:PX4飞控与QGC的协议握手全解析

本文详细解析了PX4飞控与QGC地面站通过MAVLink协议进行通信的全过程,重点介绍了航点传输协议的状态机设计、INT类型消息的优化优势以及异常处理与调试技巧。通过实战案例和性能优化建议,帮助开发者高效构建无人机通信系统,提升数据传输效率与稳定性。

weixin_29209805的博客 505

Linux驱动分析之Uart驱动架构

Uart体系结构 UART设备驱动可以使用tty驱动的框架来实现,但是因为串口之间有共性,所以Linux在tty接口上封装了一层(serial core)。后面我...

嵌入式软件开发交流 1万+

研一脑电小白日记 之 EEGLAB预处理实战指南

本文为脑电研究新手提供了一份详尽的EEGLAB预处理实战指南。从MATLAB与EEGLAB环境搭建、使用NeuracleEEGFileReader插件导入BDF格式数据开始,逐步讲解了电极定位、滤波、降采样、ICA去伪迹等核心步骤,旨在帮助初学者高效完成脑电数据预处理,为后续分析奠定坚实基础。

weixin_29230649的博客 559

主成分分析(PCA)简洁高效MATLAB实现详解

本文介绍了一个简洁高效的PCA算法实现。该实现通过SVD分解计算主成分,避免了显式协方差矩阵计算,支持两种降维方式:固定维度或按能量比例自动选择。核心步骤包括数据中心化、SVD分解和维度选择,代码量少但功能完整,适用于数据预处理、降维和特征提取等任务。实现中考虑了稀疏矩阵转换、默认参数处理等细节,可直接应用于MATLAB环境。

m0_62153576的博客 64

Linux的tty架构及UART驱动详解

Linux的tty架构及UART驱动详解 一、模块硬件学习 1.1. Uart介绍 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称为UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。 作为把并行输入信号转成串行输出信号的芯片,UART 通常被集成于其他通讯接口的连上。 UART 是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设备中,

ListQ的博客 4649

clock min pulse width检查

高电平脉宽 = clock fall edge到达FF/CK的时间 - clock rise edge到达FF/CK的时间;低电平脉宽 = 下一T clock rise edge到达FF/CK的时间 - clock fall edge到达FF/CK的时间。而required pulse width是根据FF/CK处的transition,根据查找表计算得到的。为什么clock transition越大,会导致required pulse width越大呢?5、 降低clock上的串扰。

芯冰乐 578

Linux UART 驱动实验

学习笔记

weixin_45598837的博客 922

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Linux UART驱动分析及测试

1.Linux TTY驱动程序框架 Linux TTY驱动程序代码位于/drivers/tty下面。TTY的层次接口包括TTY应用层、TTY文件层、TTY线路规程层、TTY驱动层、TTY设备驱动层。TTY应用层负责应用逻辑,TTY文件层负责文件接口,TTY线路规程负责串行通信协议处理,包括特定协议的封装与解封,TTY驱动层对各种TTY设备进行分类和抽象。TTY设备驱动层实现具体的TTY设备(芯片或者控制器)驱动,即设备配置与数据收发。具体的TTY设备有串口、USB串口、VT设备、PTY设备等,最常见的是串口

非专业业余程序员 2048

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Linux驱动分析之Uart驱动

前言 之前对Uart驱动的整体架构做了介绍,现在来分析具体的驱动程序。我们以NXP 的 IMX6来进行分析。Uart驱动分析内核:4.20芯片:NXP IMX6...

嵌入式软件开发交流 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux UART 驱动 Part-1 (底层对接)

目录 1、底层对接 1.1、uart_driver 结构 1.2、注册uart_driver 1.2.1、uart_state 结构 1.3、增加 uart_port 1.3.1、uart_port 结构 1.3.2、uart_ops 结构 1.4、小结 1.5、注意 串口驱动,内核启动的时候,便初始化完成,后期i应用层用到的时候,访问设备节点便,获取串口设备的 fd ...

StephenZhou 7320

Linux uart驱动框架

【代码】Linux uart驱动框架。

jzjhome的博客 960

Linux UART 驱动开发全解析:从原理到实战

UART 是一种异步串行通信协议,通过 TX(发送)和 RX(接收)两根数据线进行数据传输。波特率(Baud Rate):如 9600、115200 等,代表每秒传输的符号数;数据位(Data Bits):常为 8 位;校验位(Parity Bit):可选,支持奇偶校验;停止位(Stop Bit):通常为 1 位或 2 位。| 起始位(Start Bit) | 数据位(8位) | 校验位 | 停止位 |UART 通信无需时钟同步,适用于点对点、低速通信,具有电路简单、开销低的特点。

Interview_TC的博客 2587

Linux 虚拟 UART 驱动框架

本文介绍了Linux虚拟UART驱动的开发过程,主要包含以下内容: 驱动整体结构:基于uart_driver、uart_port、uart_ops三大核心模块构建,通过platform_driver和设备树匹配实现。 关键实现细节: 使用环形缓冲区(txbuf/rxbuf)处理数据传输 通过中断模拟机制实现接收功能 提供console支持以接入内核打印输出 创建proc接口用于调试和测试 测试验证方法: 通过proc接口模拟数据收发 支持/dev/ttyVIRT0设备节点 可接收内核printk输出 该驱动

A344567的博客 2023

Linux uart 驱动

linux uart 驱动简介

gdut_liujiangyi的专栏 1190
上一篇: linux SPI驱动
下一篇: RTT打印log
Can!
博客等级 码龄5年 342粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值