高端娱乐网站建设,沈阳seo专业培训,运营培训班有用吗,前端可以做网站吗区分不同的终端类型
串行端口终端#xff08;/dev/ttySn#xff09;
串行端口终端#xff08;Serial Port Terminal#xff09;是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。
有段时间这些串行端口设备通常被称为终端设备#xff0…区分不同的终端类型
串行端口终端/dev/ttySn
串行端口终端Serial Port Terminal是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。
有段时间这些串行端口设备通常被称为终端设备因为 那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0或/dev/ttyS0、/dev/tts/1或/dev /ttyS1等设备号分别是4,0、4,1等分别对应于DOS系统下的COM1、COM2等。
若要向一个端口发送数据可以在命令行上把标 准输出重定向到这些特殊文件名上即可。例如在命令行提示符下键入echo test /dev/ttyS1会把单词”test”发送到连接在ttyS1COM2端口的设备上。
伪终端/dev/pty/
伪终端 /dev/pts是远程登陆(telnet,ssh等)后创建的控制台设备文件所在的目录。
由于可能有好几千个用户登陆所以/dev/pts其实是动态生成的不象其他设备文件是构建系统时就已经产生的硬盘节点(如果未使用devfs) 。
第一个用户登陆console的设备文件为/dev/pts/0第二个为/dev/pts/1以此类推。这里的0、1、2、3不是具体的标准输入或输出而是整个控制台。你可尝试 echo aaaaaa /dev/pts0、1、2……。
控制终端/dev/tty
控制终端 /dev/tty指的是当前所处的终端输出到此的内容只会显示在当前工作的终端显示器上。
如果当前进程有控制终端Controlling Terminal的话那么/dev/tty就是当前进程的控制终端的设备特殊文件。可以使用命令”ps –ax”来查看进程与哪个控制终端相连。对于你登录的shell/dev/tty就是你使用的终端设备号是5,0。
使用命令”tty”可以查看它具体对应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。这个终端文件可以由各个用户共享
控制台终端/dev/ttyn, /dev/console
控制台终端/dev/ttyn n(0到6) tty1tty2就是不同的虚拟终端virtual console.
/dev/console 就是tty0 tty0则是当前所使用虚拟终端即激活的虚拟终端的一个别名系统所产生的信息会发送到该终端上实际上机器只有一个屏幕也就是我们看到的这个屏幕可以理解为console指向激活的那个tty准确地说是激活的那个tty才将输出显示到console。
历史上console指主机本身的屏幕键盘而tty指用电缆链接的其它位置的控制台仅包含屏幕和键盘。tty0是系统自动打开的但不用于用户登录。
总结
其实上古时期都有实体理解完全不是难事。
这个IBM的广告美女左手是terminal右手是console terminal 相对的是console terminal是终端不在主机上远端控制console是主机上的面板开关本机控制 terminal是一个设备最早借用了teletypewriter的产品形态简称tty 长得像台打字机其实输入输出确实都打印在纸上后来进化出一个crt显示器所以上古时期terminal包含ttytty就是terminal的一种 shell相对的是kernel 那个时候有shell嘛可能还没有出现
实体terminal时代的逻辑流程图如下 到了PC时代本机自带了键盘鼠标于是混乱就开始了
实体的terminal设备已经消失了没有打字机形态的tty也不存在video tty但是基因被传承了下来还是有terminaltty这样的名称存在并且逻辑上一以贯之shell作为kernel的中间层也发明了出来搞不清打开的是terminal还是shell
来看一张图其实会解决这个混乱 我们平时打开的iterm2之类的实际上是terminal应用 并不直接与shell交互更不与kernel交互它是一个带显示器的远程对讲机或者说是facetime和虚拟master交互 实体tty不存在了但是虚拟出一个伪终端pseudo tty简称pty 这个pty虚拟出来一个master你可以理解成一个坐在实体终端机前面的小人pty又虚拟出一个slave你可以理解成上古时代的终端机 为什么要这样做呢 好比把之前主机的实体外设在主机内部模拟了一下老的传统被传承了下来设定有一个人在敲终端机保持了系统的一贯性只是各种名称带来了混乱 master与外部terminal应用交互slave与shell交互shell与kernel交互
现代tty架构 串口驱动框架
串口驱动内核启动的时候便初始化完成后期应用层用到的时候访问设备节点便获取串口设备的 fd 句柄然后设置相关的参数波特率停止位校验位等等便可以使用串口进行数据收发。
Linux Kernel 的 UART 串口分为几层tty 核心层tty 线路规程串行驱动核心层以及下面对接具体芯片的 ops 整个流程走下来有太多的数据结构和 ops要分析清楚整个流程有两种方式
1、至上而下即从用户空间调用串口配置以及串口读写的角度来分析
2、从底层注册开始分析
本文先从底层注册开始分析根据内核已知提供的接口逐步打开魔盒力求扩散到每一个常用的地方。
tty core
tty core主要实现如下三类功能
将串口设备有关的物理对象及其操作方法封装成一个一个的数据结构以达到用软件语言描述硬件的目的。向底层driver提供串口驱动的编程接口。基于TTY framework所提供的TTY driver的编写规则将底层driver看到的serial driver转换为TTY driver并将所有的serial操作转换为对应的tty操作。
线路规程
负责在串口设备之间进行上下文切换以实现多任务调度。当有数据需要从串口设备发送或接收时线程调度器会将任务切换到适当的设备上。
串口硬件驱动层
这个层次主要负责和具体的串口硬件进行通信实现了对硬件的控制和访问。在内核中串口驱动模块通常被实现为字符设备通过字符设备接口与串口核心模块进行交互。它通过注册到串口核心层实现了对上层的透明。
小结
tty core 和串口硬件驱动层是串口驱动框架的核心部分。在使用串口设备时用户通常只需要与tty core模块进行交互而不需要直接操作串口驱动模块和平台驱动模块。下一节我们将深入到串口驱动内部分析tty core的框架体系结构。
本文参考
https://blog.csdn.net/liusaoyue/article/details/5075745
https://www.zhihu.com/question/21711307?sortcreated
https://blog.csdn.net/awks4002/article/details/102360209