当前位置: 首页 > news >正文

南山区网站建设公司站长之家素材网站

南山区网站建设公司,站长之家素材网站,做网站算新媒体运营吗,企业手机网站建设提升用户体验的三个点往期内容 本专栏往期内容:Uart子系统 UART串口硬件介绍 interrupt子系统专栏: 专栏地址:interrupt子系统Linux 链式与层级中断控制器讲解:原理与驱动开发 – 末片,有专栏内容观看顺序 pinctrl和gpio子系统专栏&#xf…

往期内容

本专栏往期内容:Uart子系统

  1. UART串口硬件介绍

interrupt子系统专栏:

  1. 专栏地址:interrupt子系统
  2. Linux 链式与层级中断控制器讲解:原理与驱动开发
    – 末片,有专栏内容观看顺序

pinctrl和gpio子系统专栏:

  1. 专栏地址:pinctrl和gpio子系统

  2. 编写虚拟的GPIO控制器的驱动程序:和pinctrl的交互使用

    – 末片,有专栏内容观看顺序

input子系统专栏:

  1. 专栏地址:input子系统
  2. input角度:I2C触摸屏驱动分析和编写一个简单的I2C驱动程序
    – 末片,有专栏内容观看顺序

I2C子系统专栏:

  1. 专栏地址:IIC子系统
  2. 具体芯片的IIC控制器驱动程序分析:i2c-imx.c-CSDN博客
    – 末篇,有专栏内容观看顺序

总线和设备树专栏:

  1. 专栏地址:总线和设备树
  2. 设备树与 Linux 内核设备驱动模型的整合-CSDN博客
    – 末篇,有专栏内容观看顺序

img

目录

  • 往期内容
  • 1.TTY体系中设备节点的差别
    • 1.1 节点和术语
    • 1.2 演变
      • 1.2.1 电传机teletype
      • 1.2.2 计算机与tty
        • A.使用teletype
        • B.替换电传机
        • C.个人电脑和虚拟终端
    • 1.3 在ubuntu上实验
      • 1.3.1 各类设备节点的差别
      • 1.3.2 /dev/ttyN(N=1,2,3,...)
      • 1.3.3 /dev/tty0
      • 1.3.4 /dev/tty
      • 1.3.5 Terminal和Console的差别
      • 1.3.6 /dev/console
  • 2.TTY驱动程序框架
    • 2.1 行程规的引入
    • 2.2 TTY驱动程序框架

1.TTY体系中设备节点的差别

1.1 节点和术语

/dev/ttyS0、/dev/ttySAC0、/dev/tty、/dev/tty0、/dev/tty1、/dev/console,

它们有什么差别?

设备节点含义
/dev/ttyS0、/dev/ttySAC0串口
/dev/tty1、/dev/tty2、/dev/tty3、……虚拟终端设备节点
/dev/tty0前台终端
/dev/tty程序自己的终端,可能是串口、也可能是虚拟终端不知道当前所处的中断说tty几,可以直接使用/dev/tty来指代自己
/dev/console控制台,由内核的cmdline参数确定默认的情况下,当前是处于哪个ttyx,其就是console当然也可以通过设置cmdline来指定

TTY/Terminal/Console/UART,

它们有什么差别?

术语含义
TTY来自teletype,最古老的输入输出设备,现在用来表示内核的一套驱动系统
Terminal终端,暗含远端之意,也是一个输入输出设备,可能是真实设备,也可能是虚拟设备
Console控制台,含控制之意,也是一种Terminal,权限更大,可以查看内核打印信息
UART串口,它的驱动程序包含在TTY驱动体系之内
  1. 控制台终端(console)

这类终端的输入设备通常是键盘,输出设备通常是显示器;

输入、输出设备通过各类总线直接和计算机相连;

“终端”其实是这些设备的一个逻辑抽象。

  1. 虚拟终端(VT)

控制台终端的输出设备(显示器)一般只有一个,同一时刻由一个应用程序独占;

但在多任务的操作环境中,有时需要在将终端切换给另一个应用程序之前,保留当前应用在终端上的输出,以方便后面查看;

因此Unix/Linux系统在控制台终端的基础上,又虚拟出来6个终端----称作虚拟终端,不同的应用程序可以在这些虚拟终端上独立的输出,在需要的时候,可以通过键盘的组合键(CTRL+ALT+
F1~F6)将某一个虚拟终端调出来在屏幕上显示。

  1. 串口终端(TTY)

这是正牌的TTY设备:

输入设备和输出设备集成在一个独立的硬件上(称作TTY设备),这个硬件和计算机通过串口连接;

输入设备(键盘)的输入动作,将会转换为串口上的RX数据包(以计算机为视角),发送给计算机;

计算机的输出会以TX数据包的形式发送给TTY设备,TTY设备转换后在输出设备(屏幕)上显示。

  1. 软件终端

这是我们现在最常用的终端:

既然人机交互的数据流可以封装后经过串口传输,那么终端设备的形式就不再受限了,只要可以接收用户的输入并打包通过串口发送给计算机,以及接收计算机从串口发来的输出并显示出来,任何设备都可以变成终端设备,例如另一台计算机;

当另一台计算机被当作终端设备时,通常不会把它的所有资源都用来和对端进行人机交互,常用的方法是,在这个计算机上利用软件,模拟出来一个“终端设备”。该软件就像一个中间商:从键盘接收用户输入,然后控制串口发送给对端;从串口接收对端的输出,然后在软件界面上显示出来;

平时大家经常使用的PuTTY、SecureCRT、Windows超级终端、等等,都是“软件终端”。

  1. USB、网络等终端

既然串口可以作为人机交互数据的传说媒介,其它通信接口一样可以,例如USB、Ethernet、等等,其原理和串口终端完全一样,这里不再过多说明。

  1. 图形终端

前面所介绍的那些终端,人机交互的输出界面都是字符界面,随着计算机技术的发展,GUI界面慢慢出现并成为主流,这些通过GUI交互的形式,也可以称作图形终端。不过这已经超出了TTY
framework系列文章的讨论范围了,因为TTY的势力范围只涵盖字符界面。

1.2 演变

1.2.1 电传机teletype

teletype,更准确地说是teleprinter,是一种通信设备,可以用来发送、接收文本信息。

teletype是一家公司的名字,它生产的teleprinter实在太有名,结果公司名变成了这类产品的名字:teleprinter都被称为teletype了。

imgteletype被用来传输商业电报,想像一下:

  • 把两台teletype的线缆接在一起,或者使用无线技术连接两台teletype
  • 这边打字,另一边就可以接收到信息并通过纸张打印出来
  • 注意:这两台teletype可以离得很远

1.2.2 计算机与tty

A.使用teletype

teletype的简称就是TTY。

最古老的计算机支持的是批处理模型:

  • 怎么编程?卡片打孔,然后喂给计算机。
  • 怎么得到输出信息?计算机根据结果在卡片上打孔,需要专人翻译这些卡片。

通过使用teletype电传机与计算机相连接,可以即时输入指令、即时看到结果。于是teletype变成了计算机的终端、Terminal,远端之意。teletype和计算机可以放在一个房间里,也可以放在很远很远的地方。

img

img

B.替换电传机

1960年代,CRT显示器+键盘,替代了teletype:

  • 显示器替代了纸张
  • 速度更快
  • 成本更低
  • 它仍然只是一个终端(terminal),通过线缆连接到计算机
  • 虽然不再是teletype,但是它的驱动程序仍然叫做TTY

它仍然是和计算机相连,其实就是现在台式机使用时配备的键盘以及显示器。

C.个人电脑和虚拟终端

img

像现在的电脑,虽然只有一个显示器和键盘,也就是一个物理终端,但是其打开多个命令行程序(terminal、shell),可以显示多个终端(虚拟终端),并不需要说多少个终端就需要多少个显示器。

1.3 在ubuntu上实验

1.3.1 各类设备节点的差别

img

1.3.2 /dev/ttyN(N=1,2,3,…)

/dev/tty3、/dev/tty4:表示某个程序使用的虚拟终端

// 在tty3、tty4终端来回切换,执行命令echo hello > /dev/tty3
echo hi    > /dev/tty4

虚拟终端是虚拟出来的一个终端,不对应具体的设备(屏幕和键盘)。应用程序可以打开某一个虚拟终端,以便和人进行交互。

对应用程序而言,这个终端和具体的物理终端,没有任何区别(应用程序也无法区分)。而对整个系统来说,由于物理资源(键盘和屏幕)只有一套,因此同一时刻只能和某一个虚拟终端对接。从另一个角度看,各个虚拟终端轮流使用物理资源和人进行交互,如下所示:

img

1.3.3 /dev/tty0

/dev/tty0:表示前台程序的虚拟终端

  • 你正在操作的界面,就是前台程序
  • 其他后台程序访问/dev/tty0的话,就是访问前台程序的终端,切换前台程序时,/dev/tty0是变化的
// 1. 在tty3终端执行如下命令
// 2. 然后在tty3、tty4来回切换while [ 1 ]; do echo msg_from_tty3 > /dev/tty0; sleep 5; done

1.3.4 /dev/tty

/dev/tty表示本程序的终端,可能是虚拟终端,也可能是真实的中断。

程序A在前台、后台间切换,它自己的/dev/tty都不会变。

// 1. 在tty3终端执行如下命令
// 2. 然后在tty3、tty4来回切换while [ 1 ]; do echo msg_from_tty3 > /dev/tty; sleep 5; done

1)通常情况下,Linux启动后,终端(以后都用TTY指代)的控制权会交给shell(一种应用程序)。所谓的控制权,就是指shell程序可以通过TTY读取终端的输入,以及通过TTY向终端输出。

2)通过shell,可以启动其它的应用程序,相应地,应用程序在需要的时候也会获得TTY的控制权。

3)同一时刻,只能有一个应用可以占有TTY,即只有一个应用可以通过TTY输入、输出。

4)那个占有TTY、可以进行输入输出的应用,称作前台应用。相应的,不能进行输入输出的应用,称作后台应用。因此,shell中只有一个前台应用,可以有多个后台应用。

5)然后,问题就来了:如果某个后台应用,就是想输入输出,怎么办?有一个办法,就是通过控制终端(control terminal)。

6)控制终端在Linux中的名称固定为/dev/tty, 设备号为(5, 0),作用和/dev/console类似,进程可以通过TTY core提供的ioctl,选择控制终端所对应的实际的终端设备。

7)暂且抛开前台应用不谈(因为人家有TTY设备),对于那些后台应用,如果想输入输出,可以读取或者写入控制终端。此时,一般情况下,TTY core会向后台应用发送SIGTTIN(读取控制终端时) 或者 SIGTTOU(写入控制终端时)信号,这会终止该后台应用。

8)不过,shell会重设收到 SIGTTOU信号时的行为,于是,后台应用写入的内容,可以通过控制终端显示出来。

(不一定准确,只帮助理解)

1.3.5 Terminal和Console的差别

Terminal含有远端的意思,中文为:终端。Console翻译为控制台,可以理解为权限更大、能查看更多信息。

比如我们可以在Console上看到内核的打印信息,从这个角度上看:

  • Console是某一个Terminal
  • Terminal并不都是Console。
  • 可以从多个Terminal中选择某一个作为Console
  • 很多时候,两个概念混用,并无明确的、官方的定义

1.3.6 /dev/console

选哪个?内核的打印信息从哪个设备上显示出来?
可以通过内核的cmdline来指定,
比如: console=ttyS0 console=tty
我不想去分辨这个设备是串口还是虚拟终端,
有没有办法得到这个设备?
有!通过/dev/console!
console=ttyS0时:/dev/console就是ttyS0
console=tty时:/dev/console就是前台程序的虚拟终端
console=tty0时:/dev/console就是前台程序的虚拟终端
console=ttyN时:/dev/console就是/dev/ttyN
console有多个取值时,使用最后一个取值来判断

img

kernel启动的后期,会在kernel_init线程(最后会退化为init进程)中打开控制台终端。但是由上面3.1小节的介绍可知,控制台终端的类型、名称是五花八门的,怎么让kernel的核心代码无视这些差异呢?这就是“/dev/console”的存在意义:

  • 在linux knerl 3.XX中,/dev/console的设备号固定为(5, 1) ,当init线程打开该设备的时候,TTY core会问system console core:喂,哪一个终端适合做控制台终端啊?

因此,最终打开的是那个具体的、可以当作控制台终端的设备,而“/dev/console”,仅仅是一个占位坑,如下图所示:

img

回到Unix系统支持多用户的时代,此时的PC有一个自带的、昂贵的终端(自身的键盘、显示器等),另外为了支持多用户,可以通过串口线连接多个TTY终端(Teletype)。为了彰显自带终端崇高的江湖地位,人们称它为console。

当然,“江湖地位”之说,纯属玩笑,不过从console的中文翻译-----控制台,可以看出,自带终端(console)有别于TTY终端的地方如下:

1)控制台(console)是昂贵的。

2)控制台(console)比TTY终端拥有更多的权限,例如用户建立、密码更改、权限分配等等,这也是“控制”的意义所在。

3)系统的运行日志、出错信息等内容,通常只会输出到控制台(console)终端中,以方便管理员进行“控制”和“管理”。

不过,随着计算机技术的发展、操作系统的改进,控制台(console)终端和普通TTY终端的界限越来越模糊,console能做的事情,普通终端也都能做了。因此,console逐渐退化,以至于在当前的Linux系统中,它仅仅保留了第三点“日志输出”的功能,这就是Linux TTY framework中console的概念

2.TTY驱动程序框架

2.1 行程规的引入

img

下文来自:解密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.2 TTY驱动程序框架

img

键盘输入信息后通过键盘驱动程序保留在某个buff当中(vitual console/terminal)

假设想在终端上输入ls,结果输成了la -> del -> l -> s -> ls

img

PC的UART收到返回 l 后,会将其通过别的串口给显示到屏幕终端上

删除a输入s后确认为ls,PC终端上再点击回车确认,发送enter给开发板后,ls就会上报给开发板内的相关程序显示出结果,再重新通过开发板的串口返回给PC的UART

删除等操作其实都是行规程line discipline 来实现的,行规程可以根据实际想要使用的情况进行修改的,比如如果需要接入GPS模块,那么开发板的行规程就需要设置为原始的模式(RAM模式)


文章转载自:
http://dinncochelsea.ssfq.cn
http://dinncohorniness.ssfq.cn
http://dinncosnuffers.ssfq.cn
http://dinncorhinogenic.ssfq.cn
http://dinncostatesmen.ssfq.cn
http://dinncoblueness.ssfq.cn
http://dinncototipalmate.ssfq.cn
http://dinncohinduism.ssfq.cn
http://dinncointersexual.ssfq.cn
http://dinncoabortion.ssfq.cn
http://dinncodial.ssfq.cn
http://dinncobackproject.ssfq.cn
http://dinncomissilery.ssfq.cn
http://dinncobelmopan.ssfq.cn
http://dinncowood.ssfq.cn
http://dinncodownthrow.ssfq.cn
http://dinncohellbent.ssfq.cn
http://dinncolrl.ssfq.cn
http://dinncogleeman.ssfq.cn
http://dinncopropulsory.ssfq.cn
http://dinncogravettian.ssfq.cn
http://dinncosandor.ssfq.cn
http://dinncochiastic.ssfq.cn
http://dinncomandatary.ssfq.cn
http://dinncogorm.ssfq.cn
http://dinncoself.ssfq.cn
http://dinncoauspicial.ssfq.cn
http://dinncotriboluminescence.ssfq.cn
http://dinncosadu.ssfq.cn
http://dinnconaupliiform.ssfq.cn
http://dinncoviolative.ssfq.cn
http://dinncointerposal.ssfq.cn
http://dinncotibial.ssfq.cn
http://dinncomycelium.ssfq.cn
http://dinncoconvoke.ssfq.cn
http://dinncosubsidence.ssfq.cn
http://dinncodesolation.ssfq.cn
http://dinncomicroanalyser.ssfq.cn
http://dinncoperidental.ssfq.cn
http://dinncowifedom.ssfq.cn
http://dinncoridiculousness.ssfq.cn
http://dinncofahlband.ssfq.cn
http://dinncostatute.ssfq.cn
http://dinncoincompetence.ssfq.cn
http://dinncobanshie.ssfq.cn
http://dinnconuclei.ssfq.cn
http://dinncohaematimeter.ssfq.cn
http://dinncosowens.ssfq.cn
http://dinncopersistence.ssfq.cn
http://dinncointranasal.ssfq.cn
http://dinncoacataleptic.ssfq.cn
http://dinncoclaudette.ssfq.cn
http://dinncolives.ssfq.cn
http://dinncoprobabilism.ssfq.cn
http://dinncocerebrotomy.ssfq.cn
http://dinncoautomatization.ssfq.cn
http://dinncoeucalytus.ssfq.cn
http://dinncosatirize.ssfq.cn
http://dinncoretake.ssfq.cn
http://dinncoglaringly.ssfq.cn
http://dinncochicom.ssfq.cn
http://dinncosprain.ssfq.cn
http://dinncohypercalcaemia.ssfq.cn
http://dinncoblackcoat.ssfq.cn
http://dinncoguardhouse.ssfq.cn
http://dinncoisosceles.ssfq.cn
http://dinncodoek.ssfq.cn
http://dinncowashland.ssfq.cn
http://dinncomonochromate.ssfq.cn
http://dinncobiotope.ssfq.cn
http://dinncooverparted.ssfq.cn
http://dinncomicromachining.ssfq.cn
http://dinncorectificative.ssfq.cn
http://dinncoscrofulosis.ssfq.cn
http://dinncohawaiian.ssfq.cn
http://dinncomolehill.ssfq.cn
http://dinncocortin.ssfq.cn
http://dinncohexadecimal.ssfq.cn
http://dinncoscorn.ssfq.cn
http://dinncotucket.ssfq.cn
http://dinncocrossway.ssfq.cn
http://dinncojimmy.ssfq.cn
http://dinncofaradize.ssfq.cn
http://dinncosempiternal.ssfq.cn
http://dinncopaludament.ssfq.cn
http://dinncophlebotomy.ssfq.cn
http://dinncoresurge.ssfq.cn
http://dinncounfillable.ssfq.cn
http://dinncofieldpiece.ssfq.cn
http://dinncopersonal.ssfq.cn
http://dinncowindowman.ssfq.cn
http://dinncopinitol.ssfq.cn
http://dinncoplainness.ssfq.cn
http://dinncotilsiter.ssfq.cn
http://dinncoaforethought.ssfq.cn
http://dinncofurthest.ssfq.cn
http://dinncoarquebus.ssfq.cn
http://dinncofixing.ssfq.cn
http://dinncobrevet.ssfq.cn
http://dinncowearproof.ssfq.cn
http://www.dinnco.com/news/157206.html

相关文章:

  • 淘宝做链接的网站seo北京优化
  • 网站建设与网页制作技术湖北seo
  • 什么网站可以做自考试题百度竞价价格查询
  • 网站建设手机app开发做一个网站需要多少钱
  • 蓝色脚手架织梦企业网站模板网络培训平台有哪些
  • 网站建设应遵守的原则人民网舆情数据中心官网
  • 帝国cms网站建设专业做网站
  • 网站备案网站建设方案书网站搜索引擎优化案例
  • app网站设计制作网站建站系统
  • 东莞企石网站设计seo赚钱培训课程
  • 怎么做网站认证优化推广关键词
  • wordpress 链接 排序网络营销推广优化
  • 在域名做网站百度指数首页
  • 强的网站建设公北京百度关键词排名
  • 《网站建设教程如何在百度上营销
  • 网站后台内容不更新国内最新新闻事件今天
  • 长沙专业网站建设.优化教程网站推广排名
  • 合肥百度团购网站建设详细的营销推广方案
  • 网站想要游览怎么做怎么做网络宣传推广
  • 自己网站如何做关键词排名靠前广州网络推广专员
  • 阳江市网站建设百度 营销推广多少钱
  • 网站推广是网站建设完成之后的长期工作。南宁 百度网盘
  • 东营政府网站建设seo排名工具
  • seo在线短视频发布页企业网站优化哪家好
  • 抢先注册网站域名卖掉seo服务外包客服
  • 做网页网站怎么样seo规则
  • 咸宁网站建设公司资源优化网站排名
  • 有什么做数据的网站搜索引擎营销怎么做
  • 电子业网站建设舆情管理
  • 网站建设是属于软件开发费吗东莞关键词排名优化