当前位置: 首页 > 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://www.mmbaike.com/news/90353.html

相关文章:

  • 做特卖的网站爱库存全国防疫大数据平台
  • 做起点说网站的服务器多少钱文件外链网站
  • 网站语音转写怎么做网上网络推广
  • 哈尔滨最新出入规定seo网站排名优化软件
  • 网站空间是啥亚马逊关键词排名提升
  • 东莞网站建设 手袋厂seo全网营销的方式
  • 代理公司名字取什么名seo网站排名优化公司哪家好
  • 自己怎么在网上做网站外贸独立站建站
  • jsp网站部署怎么做企业如何开展网络营销
  • 南安网站开发天气预报最新天气预报
  • 贵阳网站开发培训学费友情链接检测659292
  • 做网站开发的有外快嘛红河网站建设
  • 全球电子商务网站排名微营销平台
  • 镇江网站搜索优化搜索优化的培训免费咨询
  • 连云港网站建设网站建站cms
  • 做网站页面google搜索引擎
  • 福田网站建设运营费用产品线上营销有哪些方式
  • 华资源网站建设ui设计
  • 怎么建造个人网站seoul是什么意思
  • 视频分享网站建设百度广告代运营
  • 江苏省建设厅政务网站怎么做营销推广
  • python做网站部署seo优化的常用手法
  • 怎么做百度seo网站网络营销现状分析
  • 无锡政府门户网站建设的调查报告百度官方网平台
  • 大连做网站的科技公司网站外包
  • 网上卖东西怎么才能卖得好扬州seo
  • 茂名专业网站建设公司自媒体平台哪个收益高
  • 一个域名可以做中英文两个网站吗互联网十大企业
  • 2023年最火的电商平台附子seo教程
  • 哪个网站的前台背景墙做的好真实有效的优化排名