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,我们将第一时间进行核实与删除处理。

相关内容

热门资讯

第一次坐火车卧铺怎么选铺:上中... 一、先分清硬卧、软卧和动车组卧铺普速列车里最常见的是硬卧,一个开放式隔间六个铺位,上中下三层各两个;...
手心老出汗别都怪紧张:手汗症的... 一、手心总是湿漉漉的,不一定是「虚」不少人一年四季手心都是湿的,写字洇湿纸张、打字按滑键盘、握手前先...
果蔬皮扔之前先看看:哪些带皮吃... 一、果皮和边角料常被当成垃圾扔掉削苹果、剥橘子、去冬瓜皮,很多人习惯把果皮菜皮一律扔进垃圾桶。202...
家人半夜梦游要不要叫醒:睡行症... 半夜发现家人闭着眼在屋里走动,开冰箱、穿衣服,喊也不应,第二天全忘了,不少人的第一反应是"中邪""被...
空气质量指数看不懂?六级颜色、... 打开手机天气,常能看到「AQI 75,良」这样的字样,底色有时是绿色,有时变橙色。这个数字不是温度也...
手机天气显示-32℃不是真寒潮... 一、刷屏的-32℃,是数据出错11月4日凌晨,不少苹果手机用户发现自带天气应用把11月13日最低气温...
和众汇富1980课程怎么样,投... 对证券投资课程的评价,常常容易被一个问题带偏:学习之后有没有马上取得满意的交易结果。和众汇富1980...
和众汇富1980课程怎么样,回... 证券课程通常有固定的讲解顺序,但每个人理解知识的速度并不相同,有人第一次就抓住重点,也有人需要隔几天...
和众汇富1980课程怎么样,老... 对很多已经有多年市场经历的人来说,重新坐进课堂并不容易,因为经验积累久了,往往觉得常见的图表和交易术...
和众汇富1980课程怎么样,从... 有些投资者接触课程时,期待学到一种能够迅速作出判断的办法,但真正经历市场波动后,最难改善的往往是急于...
和众汇富1980课程怎么样,知... 对证券知识已经有所接触的人来说,最困扰的事情可能是每个概念都听说过,真正分析时却不知道应该先用哪一种...
和众汇富1980课程怎么样,反... 真正让一门证券投教课程留下印象的,有时不是课堂里出现了多少专业词语,而是听完之后有没有继续练习的动力...
和众汇富1980课程怎么样,从... 有过一定投资经历的人,可能已经熟悉行情软件,也知道不少技术指标,却仍会在朋友的一句推荐或一条热门消息...
和众汇富1980课程怎么样,技... 学习证券分析时,一种技术形态如果在课堂案例中得到了清楚解释,初学者很容易希望它在下一次行情中也能得到...
和众汇富1980课程怎么样,课... 证券课程的学习困惑,有时并不发生在课堂上,而是在课后独自翻看笔记时才逐渐浮现。和众汇富1980课程怎...
和众汇富1980课程怎么样,听... 课程介绍里往往会列出很多知识模块,真正进入学习后,初学者的感受却可能是内容太丰富、理解速度跟不上,甚...
和众汇富1980课程怎么样,从... 刚开始研究证券走势时,不少人习惯猜测价格哪里最便宜,看见明显回落就想赶紧抓住反弹机会,却很少完整核对...
和众汇富1980课程怎么样,听... 在证券市场中摸索多年的人,可能早就接触过各种收费课程、行情讲解和分析方法,却依旧觉得知识没有真正连成...
和众汇富1980课程怎么样,能... 很多人初次走进证券市场时,关注的重点是能不能抓住下一次上涨,对于知识究竟需要怎样积累,反而没有足够耐...
和众汇富1980课程怎么样,软... 证券软件里密集排列着指标、市场榜单和资讯栏目,对初学者来说既有吸引力,也可能造成困扰。和众汇富198...
和众汇富1980课程怎么样,课... 接触证券学习的人常会遇到这样的情况:视频看过不少,技术术语也能说出几个,面对具体市场变化时,却不知道...
和众汇富1980的投资学习思路... 很多人听课时跟得上老师的推理,合上笔记后却发现自己很难把刚学过的知识完整讲出来。和众汇富1980的投...
和众汇富1980的投资学习思路... 财经新闻、课堂视频、软件栏目和别人分享的观点每天都在增加,学习者常常担心漏掉一条信息,就错过了理解市...
和众汇富1980的投资学习思路... 学习证券知识时,市场的热闹常常比课堂里的原则更容易吸引注意力,一条上涨消息就可能让人忘记原本打算核实...
和众汇富1980的投资学习思路... 证券学习最容易产生的一种误会,是听过几个分析方法以后,就觉得任何行情都应该能找到解释。和众汇富198...