You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux内核5.14 TTY串口源码求助:梳理从顶层到硬件的实现路径

Linux 5.14 串口RAW模式链路梳理及核心文件说明

需重点关注的源码文件

drivers/tty 目录

  • tty_core.c:TTY子系统核心实现,是用户态操作的总入口,负责设备注册、文件操作回调分发、核心数据结构管理
  • tty_ioctl.c:TTY相关ioctl请求的处理逻辑,raw模式的参数配置(关闭行缓冲、回显、特殊字符处理等)的内核实现都在这里
  • tty_ldisc.c:行规程调度核心,负责将上层读写请求分发到对应行规程处理,raw模式下的透传逻辑也在这里控制
  • n_tty.c:默认行规程的完整实现,raw模式就是停用该文件中几乎所有行处理逻辑,你可以通过对比普通模式和raw模式的代码分支,快速定位透传逻辑

drivers/tty/serial 目录

  • serial_core.c:串口驱动抽象层,统一了不同硬件串口驱动的上层接口,是行规程和具体硬件驱动之间的适配层
  • 对应硬件的串口驱动文件:比如x86平台常用的8250系列串口对应8250/8250_core.c、8250/8250_port.c,ARM平台常用的PL011串口对应amba-pl011.c,这些文件包含了底层硬件寄存器读写、中断处理等硬件相关实现

Raw模式完整调用链路

注意:raw模式本质不是完全移除行规程,而是在启用默认N_TTY行规程的前提下,关闭所有行缓冲、特殊字符解析、回显等处理逻辑,实现用户态和硬件之间的数据透传

配置链路

用户态调用tcsetattr设置RAW模式参数 -> 内核进入tty_ioctl.c的对应ioctl处理逻辑 -> 调用tty_ldisc.c的行规程配置接口 -> 清空N_TTY行规程的行处理标志位,设置透传模式

读数据链路

串口硬件收到数据触发中断 -> 底层硬件驱动读取寄存器数据 -> 上报给serial_core.c的通用接收逻辑 -> 调用tty_ldisc.c的接收接口 -> raw模式下跳过n_tty.c的行处理逻辑,直接将数据放入TTY读缓冲 -> 用户态read调用直接获取缓冲内数据

写数据链路

用户态write调用进入tty_core.c的写接口 -> 调用tty_ldisc.c的写接口 -> raw模式下跳过行规程处理,直接下发到serial_core.c的通用发送逻辑 -> 调用底层硬件驱动的发送接口 -> 写硬件寄存器完成数据发送

内容的提问来源于stack exchange,提问作者keith bradley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:06:00