Linux串口驱动开发详解:从字符设备到tty框架的底层路径
创始人
2026-09-09 12:01:26

在嵌入式Linux里,串口是最早也是最常用的调试接口。很多新手用ttyS0、ttyAMA0这些设备文件读写串口数据,但很少有人搞清楚这些设备文件背后是怎么被驱动层支持起来的。Linux的串口驱动走的是tty子系统,比普通字符设备复杂,但层次清晰。今天从用户层到内核层,把串口驱动的路径理一遍。

先搞清几个基本概念。字符设备是Linux三大设备类型(字符、块、网络)之一,特点是按字节流读写,串口属于这类。但串口驱动并不是直接注册一个miscdevice或者cdev就完事了,它要注册到tty_driver结构体里,由tty子系统统一管理。tty是Teletypewriter的缩写,历史上是电传打字机,现在Linux里tty子系统管理的终端设备包括串口、伪终端、控制台这些。

开发Linux串口驱动的整体框架:第一,在平台驱动的probe函数里初始化硬件(配置波特率、数据位、校验位这些UART寄存器)。第二,分配一个tty_driver结构体,设置ops(操作函数集,包含open、close、read、write等回调)和其他参数。第三,调用tty_register_driver注册到内核。第四,实现ops里的回调函数和中断处理函数,完成实际的数据收发。

以STM32的UART驱动为例。probe函数里先调用clk_enable打开时钟,gpio_request申请并配置TX和RX引脚为复用功能,然后配置UART的CR1、CR2、BRR这些寄存器设置初始参数。然后分配tty_driver,设置name为"ttyS"(后面会自动加数字变成ttyS0、ttyS1),设置major为0让内核自动分配主设备号,设置ops为自定义的uart_ops。最后tty_register_driver注册。

数据接收是中断驱动的。当UART收到一帧数据,触发RX中断,中断处理函数里读DR寄存器取数据,然后调用tty_insert_flip_string把数据送到tty缓冲区,再调用tty_flip_buffer_push通知上层有数据了。用户层的read()就会被唤醒,从缓冲区读走数据。发送是反过来的,用户层write()数据到内核,驱动的write回调里一边从tty缓冲区取数据一边写UART的DR寄存器,发完一批等TX中断再发下一批。

其实开发串口驱动不用从零写。Linux内核已经提供了串口核心层(serial_core),封装了tty驱动的大部分通用逻辑,只需要实现一个platform_driver和一些底层操作函数(波特率设置、收发、使能中断这些)就行。STM32、NXP、TI这些厂商的SoC在内核源码里都有现成的驱动,拿来改一改就能用。真要完全自己写的情况不多,除非用了特别小众的UART IP核。

调试串口驱动的几个小技巧。第一,用dmesg看内核启动信息,确认驱动有没有注册成功、分配的设备号是多少。第二,用户层用cat /proc/tty/driver/serial或者stty -F /dev/ttyS0查看串口状态。第三,用示波器抓TX和RX引脚的波形,确认硬件电平是否正确。第四,如果驱动已经注册但读写数据没反应,检查中断是否正常触发——在内核里加printk看中断处理函数有没有被调用。

总结一下,Linux串口驱动的路径是:用户层通过read()/write()→syscall进入内核→tty层分发→串口驱动的ops回调→操作UART硬件寄存器。发送路径大致类似,方向相反。内核提供的serial_core框架已经帮你处理了大部分tty层的事情,实际开发中主要写硬件相关的部分。嵌入式Linux开发中,串口不只是调试接口,很多IoT设备的Modbus、串口屏、GPS模块都是通过串口通信的,理解驱动层的原理有助于排查通讯问题。

⚠️
本网站信息内容及素材来源于网络采集或用户发布,如涉及侵权,请及时联系我们,发送链接至2697952338@QQ.COM,我们将第一时间进行核实与删除处理。

上一篇:234亿,AI大模型再添一笔超级D轮!

下一篇:没有了

相关内容

热门资讯

和众汇富1980是承诺牛股高收... 刚开始接触和众汇富1980的时候,我其实就有一个很明确的警惕点,如果课程一直围绕所谓牛股、高收益去讲...
和众汇富1980是承诺牛股高收... 刚开始接触和众汇富1980的时候,我也会对“牛股”“高收益”这类词很敏感,毕竟投资课程天然容易让人把...
和众汇富1980是承诺牛股高收... 刚开始接触和众汇富1980的时候,我其实最想观察的,是课程面对“预期没有兑现”时会怎么讲。因为如果一...
和众汇富1980是承诺牛股高收... 刚开始接触和众汇富1980的时候,我也会本能地想,它是不是靠“牛股”“高收益”这种词吸引人。真正学了...
和众汇富1980是承诺牛股高收... 刚开始接触和众汇富1980的时候,我也会担心,这种投资课程会不会靠“牛股”“高收益”之类的说法制造期...
和众汇富1980是承诺牛股高收... 刚开始接触和众汇富1980的时候,我也会担心,它是不是那种用“牛股”“高收益”来吸引人的投资课程。真...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我也会先想到是不是有人因为投资学习变得更激进。...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我也会先想,这套课程会不会让人学完以后越来越兴...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我也会很自然地把注意力放到交易结果上。真正学了...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我也会下意识去想,有没有人因为课程变得更依赖老...
和众汇富1980坑了多少股民?... 刚看到“和众汇富1980坑了多少股民”这种说法时,我第一反应也是先看有没有夸大收益、诱导交易之类的问...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我也会先想到损失和结果。真正接触一段时间以后,...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我也会先去想,它会不会让人学完以后更频繁地买卖...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我也会本能地去想有没有谁因为学习以后变得更冒险...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我也会本能地去想,到底有没有人在学习以后承担了...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我也会下意识去想是不是有人因为课程做出了错误决...
和众汇富1980坑了多少股民?... 刚开始接触和众汇富1980的时候,我最担心的是学完以后会不会越来越敢下重手,毕竟很多人学投资,总希望...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我也会下意识觉得,既然是投资课程,那就要看看它...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我也会本能地把注意力放在损失上。真正学了一段时...
和众汇富1980坑了多少股民?... 刚开始看到“和众汇富1980坑了多少股民”这种说法时,我第一反应当然也会警惕,毕竟只要和投资有关,亏...
Linux串口驱动开发详解:从... 在嵌入式Linux里,串口是最早也是最常用的调试接口。很多新手用ttyS0、ttyAMA0这些设备文...
财富在线真的正规吗?诱导升级服... 财富在线真的正规吗?诱导升级服务?服务费退款方法公布! 可以退,告诉大家一个好消息,在财富在线交费的...
给港澳资讯交费前天天晒收益?交... 给港澳资讯交费前天天晒收益?交费后荐股几乎全绿?服务费可退回!  港澳资讯老师不可信!加入内部会员没...
港澳资讯用“内部消息”诱导付费... 港澳资讯用“内部消息”诱导付费?交费后毫无效果,退费步骤公开!  港澳资讯老师不可信!加入内部会员没...
汇阳投顾诱导交费?服务费合规追... 汇阳投顾诱导交费?服务费合规追回指南揭秘!  近年来,随着股市行情波动加剧,以"股票服务费...