TTY终端
终端
终端是一个电子(或电气)设备,用于向系统输入数据(input),或者将系统接收到的数据显示出来(output),即我们常说的“人机交互设备”。 TTY(Teletypewriter)代表终端设备的概念,它允许用户与系统进行交互,在Linux中,TTY可分为如下几类:
- 物理终端(serial port terminal): 指使用计算机串行端口连接的终端设备,
/dev/ttyS* - 伪终端(pseudo terminal): 通常是通过ssh/telnet 登陆的终端,
/dev/pts/* - 控制终端(controlling terminal): 代表当前tty设备 /dev/tty
- 控制台终端(console): 指计算机的输出设备, 通常是printk信息输出的设备, /dev/ttyn、/dev/console
TTY 设备文件
TTY 设备在 Linux 文件系统 中的表现为设备文件,通常位于 /dev 目录下。常见的 TTY 设备文件包括:
/dev/tty:当前终端的设备文件。/dev/ttyN:虚拟控制台设备文件,其中N是控制台编号(例如,/dev/tty1对应第一个虚拟控制台)。/dev/pts/N:伪终端设备文件,其中N是伪终端编号。/dev/ttyS0:串口设备文件,/dev/ttyS1对应第二个串口设备,以此类推。
使用TTY
串口子系统
串口子系统框架是 Linux 内核中专门用于处理串口设备的模块化框架
graph TD
A[应用层]
B[字符设备]
C[tty_core层]
D[uart_core层]
E[硬件层]
A-->B
B-->C
C-->D
D-->E
应用层:
位于最顶层,应用层包括用户空间的串口应用程序,如串口通信工具 minicom等
字符设备层:
位于应用层的下方,负责将用户空间的串口读写请求传递给内核空间的tty_core 层。字符设备层将串口设备看作一个特殊的字符设备,通过字符设备接口来进行操作。
tty_core层:
位于字符设备层的下方,是串口设备的通用处理层。在 Linux 内核中用于管理串口设备,如数据传输,控制,缓冲管理等
uart_core 层:
位于 tty_core 层的下方,提供了串口设备的底层驱动接口,如负责控制串口数据的发送和接收、中断处理、时钟管理等底层操作。
串口设备节点
串口设备节点命名以tty为前缀。可以通过ls /dev/tty*查看已创建的串口设备节点。

虚拟控制终端
/dev/tty1、/dev/tty2 等是虚拟控制台的编号接口。是否支持虚拟控制台、创建哪些设备节点以及实际分配多少控制台,取决于内核配置与用户空间设备管理,不能假定所有系统启动时都有 63 个已分配控制台。
- /dev/tty0:表示前台程序的虚拟终端
UART串口
/dev/ttyS1、/dev/ttyS2 是串口设备节点,只有通过内核 console 参数等配置选中后才承担串口控制台角色;登录终端通常还需配置 getty。
A1
在
/* 在a1_claf_v12.dts*/
&uart1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart1_pc>;
};
/*a1.dtsi*/
uart1: serial@0x10031000 {
compatible = "ingenic,8250-uart";
reg = <0x10031000 0x1000>;
reg-shift = <2>;
interrupt-parent = <&core_intc>;
interrupts = <IRQ_UART1>;
pinctrl-names = "default";
pinctrl-0 = <&uart1_pc>; /*指向a1-pinctrl.dtsi*/
status = "disabled";
};
/*a1-pinctrl.dtsi*/
uart1_pin: uart1-pin {
uart1_pc: uart1-pc { /*真正的引脚配置节点*/
ingenic,pinmux = <&gpc 6 7>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION0>;
};
};