UART子系统(四) TTY驱动程序框架

简介: UART子系统(四) TTY驱动程序框架

TTY驱动程序框架


参考资料


解密TTY

彻底理解Linux的各种终端类型以及概念

Linux终端和Line discipline图解

What Are Teletypes, and Why Were They Used with Computers?


1. 行规程的引入

1670935851955.jpg

以下文字引用自参考资料解密TTY:


大多数用户都会在输入时犯错,所以退格键会很有用。这当然可以由应用程序本身来实现,但是根据UNIX设计“哲学”,应用程序应尽可能保持简单。为了方便起见,操作系统提供了一个编辑缓冲区和一些基本的编辑命令(退格,清除单个单词,清除行,重新打印),这些命令在行规范(line discipline)内默认启用。高级应用程序可以通过将行规范设置为原始模式(raw mode)而不是默认的成熟或准则模式(cooked and canonical)来禁用这些功能。大多数交互程序(编辑器,邮件客户端,shell,及所有依赖curses或readline的程序)均以原始模式运行,并自行处理所有的行编辑命令。行规范还包含字符回显和回车换行(译者注:\r\n和 \n)间自动转换的选项。如果你喜欢,可以把它看作是一个原始的内核级sed(1)。


另外,内核提供了几种不同的行规范。一次只能将其中一个连接到给定的串行设备。行规范的默认规则称为N_TTY(drivers/char/n_tty.c,如果你想继续探索的话)。其他的规则被用于其他目的,例如管理数据包交换(ppp,IrDA,串行鼠标),但这不在本文的讨论范围之内。


2. TTY驱动程序框架


TTY驱动框架如下图所示,并引用一个例子去讲解驱动

1670935869492.jpg

2.1 举一个例子 键盘输入和显示是如何协同的(回显)


观察上面的驱动框架,分三层,分别是应用层,内核驱动层,以及物理层

1670935883234.jpg

注意绿色的两个框里面,我为什么这么画,其实1为了更清晰。整个回显的过程只应用到了下面这些。

1670935893513.jpg

keyborad 输入“l”,通过串口发送给驱动,驱动发送给line,在line中的buffer储存起来。然后通过line返回驱动在返回给终端。

1670935904528.jpg

最后输入enter,就是把buffer中的命令传给app执行,然后app将得到的命令结果返回给行规程。行规程在返回给驱动,再返回给终端

应用程序通过open/read/write等标准接口访问硬件。引入行规程之后还要设置行规程,通过/ioctl或者其他封装好的函数去设置行规程。如下图:

1670935835592.jpg

相关文章
|
2月前
|
Linux API 芯片
Linux GPIO 和 Pinctrl 子系统的使用(十四)
Linux GPIO 和 Pinctrl 子系统的使用(十四)
25 1
|
2月前
|
Linux
【Linux驱动学习(1)】USB与input子系统,linux统一设备模型,枚举,USB描述符深入剖析
【Linux驱动学习(1)】USB与input子系统,linux统一设备模型,枚举,USB描述符深入剖析
|
3月前
|
消息中间件 存储 Linux
嵌入式Linux系统中SPI 子系统基本实现
嵌入式Linux系统中SPI 子系统基本实现
95 0
|
3月前
|
缓存 监控 Linux
Linux系统的tty架构及UART驱动详解
Linux系统的tty架构及UART驱动详解
352 0
|
Linux 数据安全/隐私保护 开发者
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
284 0
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
|
Ubuntu Linux Shell
UART子系统(三) UART属于TTY体系之一
UART子系统(三) UART属于TTY体系之一
215 1
UART子系统(三) UART属于TTY体系之一
|
存储 Ubuntu Linux
UART子系统(五) 串口应用编程之回环(下)
UART子系统(五) 串口应用编程之回环
471 1
UART子系统(五) 串口应用编程之回环(下)
|
开发工具 git
UART子系统(七)字符设备驱动程序的另一种注册方法
UART子系统(七)字符设备驱动程序的另一种注册方法
106 0
UART子系统(七)字符设备驱动程序的另一种注册方法
|
开发工具 git
UART子系统(十四)编写虚拟UART驱动程序\_实现uart_ops
UART子系统(十四)编写虚拟UART驱动程序\_实现uart_ops
131 0
UART子系统(十四)编写虚拟UART驱动程序\_实现uart_ops
UART子系统(一)初识
UART子系统(一)初识
131 0
UART子系统(一)初识