串行设备驱动模型
1、TTY概念解析
a) 串口终端(/dev/ttyS*)
串口终端是使用计算机串口连接的终端设备;Linux以字符设备来处理这种串行端口;这些端口所对应的设备名称是/dev/ttySAC0-N
b) 控制台终端(/dev/console )
计算机的输出设备通常被称为控制台终端,特指printk信息输出到的设备;/dev/console是一个虚拟设备;它需要映射到真正的tty上,这可以在内核启动参数中配置
c) 虚拟终端(/dev/tty*)
用户登录时,使用的是虚拟终端 ,tty0是当前使用虚拟终端的别名
2、TTY子系统架构
a) tty 核心:为tty驱动提供接口,隔离上层应用与底层硬件
b) tty线路规程:加工与tty驱动交互的数据(数据的格式化等),勾勒串行层的行为,有助于复用底层的代码来支持不同的技术
i. N_TTY -----> /dev/ttySX (终端)
ii. N_IRDA----> /dev/ircommX (红外)
iii. N_PPP -----> ppp0
c) tty驱动:关注uart或者其他底层串行硬件特征的驱动程序
d) 串行子系统有提供一些内核API
e) 架构图
3、回溯函数:dump_stack(); 使用方法:将该函数加入到要回溯的函数中去,之后内核启动会自动串口打印回溯信息
4、串口驱动重要数据结构:
struct uart_driver:一个结构表示一个驱动;驱动能支持多个串口
struct uart_port:一个结构表示一个实在的串口:如串口0,串口1
struct uart_ops:串口操作集合