嵌入式学习-驱动开发-lesson6.1-TTY驱动架构分析

2019-07-12 16:48发布

一、TTY驱动架构

1).TTY概念解析

在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。 • 串口终端(/dev/ttyS*)
串口终端是使用计算机串口连接的终端设备。Linux把每个串行端口都看作是一个字符设备。这些串行端口所对应的设备名称是 /dev/ttySAC0;/dev/ttySAC1…… • 控制台终端(/dev/console)
在Linux系统中,计算机的输出设备通常被称为控制台终端(Console),这里特指printk信息输出到的设备。/dev/console是一个虚拟的设备,它需要映射到真正的tty上,比如通过内核启动参数” console=ttySAC0”就把console映射到了串口0,是一种虚拟的设备,可以和屏幕或者串口关联
在串口打印信息中,有如下信息:
这里写图片描述 • 虚拟终端(/dev/tty*)
当用户登录时,使用的是虚拟终端。使用Ctcl+Alt+[F1—F6]组合键时,我们就可以切换到tty1、tty2、tty3等上面去。tty1–tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名.

2)TTY架构分析

这里写图片描述
Linux tty子系统包含:tty核心,tty线路规程和tty驱动。tty核心是对整个tty设备的抽象,对用户提供统一的接口,tty线路规程是对传输数据的格式化,tty驱动则是面向tty设备的硬件驱动。
下图详细的描述了tty子系统之间的互相调用关系,即用户应用层 –> 线路规划层 –> TTY层 –> 底层驱动层 –> 物理硬件层。
这里写图片描述

3)串口驱动调用关系分析

我们通过对串口write系统调用,进行分析,以此来判断上图是否正确,
我们通过回溯的方式,来查看系统之间的互相调用关系。
在/drivers/tty/serial/samsung.c中
这里写图片描述
回溯信息如下所示:
这里写图片描述 当我们向串口输出数据的时候,首先调用sys_write系统调用接口,sys_write又调用了vfs_write,vfs_write又调用redirected_tty_write,redirected_tty_write又调用tty_write,tty_write又调用n_tty_write,n_tty_write又调用uart_write,uart_write又调用uart_start.
uart_start又调用s3c24xx_serial_start_tx。
这里写图片描述
这里写图片描述
上图可以看到,在tty_write函数中,使用了线路规程中的write函数,这个就是n_tty_write,
这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述
将上面的流程,整理如下,从而可以清晰地看出他们之间的调用关系。 这里写图片描述 菜鸟一枚,如有错误,多多指教。。。