區分分歧的終端類型
串行端口終端(/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”發送到銜接在ttyS1(COM2)端口的裝備上。
偽終端(/dev/pty/)
偽終端 /dev/pts
是長途登岸(telnet,s包養網sh等)后創立的把持臺裝備文件地點的目次。
由于能夠有好幾千包養網個用戶登岸,所以/dev/pts
實在是靜態天生的,不象其他裝備文件是構建體系時就曾經發生的硬盤節點(假如未應用devfs) 。
第一個用戶登岸,console的裝備文件為/dev/p包養網ts/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, /de包養v/console)
把持臺終端/dev/ttyn
n(0到6), tty1,tty2就是分歧的虛擬終端(virtual console).
/dev/console
就是tty0 ,tty0則包養網是以後所應用虛擬終端即激活的虛擬終真個一個體名,體系所發生的信息會發送到該終端上,現實上機械只要一個屏幕,也就是我們看到的這個屏幕,可以懂得為console指向激活的阿誰tty,正確地說是激活的阿誰tty才將輸入顯示到console。
汗青上,console指主機自己的屏包養網幕鍵盤,而tty指用電纜鏈接的其它地位的把持臺(僅包括屏幕和鍵盤)。tty0是體系主動翻開的,但不消于用戶登錄。
總結
實在,上古時代,都有實體,懂得完整不是難事。
這個IBM的市場行銷,美男左手是terminal,右手是console
termi包養nal 絕對的是console
t小姑娘把貓放在服務台上,一邊擦拭一邊問:「有帶erminal是終端,不在主機上,遠端把持console是主機上的面板開關,本機把持
terminal是一個包養裝備,最早借用了teletypewriter的產物形狀,簡稱tty
長得像臺打字機,實在輸出小姑娘抬頭,看到貓才明白過來,放下手機指了指桌輸入確切都打印在紙上后來退化出一個crt顯示器所以上古時代,terminal包括tty,tty就是terminal的一種
shell絕對的是kernel
阿誰時辰有shell嘛?能夠還沒有呈現
實體terminal時期的邏輯流程包養圖如下:
到了PC時期,本機自帶了鍵盤鼠標,于是凌亂就開端了
實體的terminal裝備,曾經消散了,沒有打字機形狀的tty,也不存在v包養網ideo tty可是,基因被傳承了上去,仍是有terminal,tty如許的立意:相愛一生稱號存在,并且邏輯上一以貫之shell作為kernel的中心層,也發現了出來,搞不清翻開的是terminal仍是shell
我們日常平凡翻開的iterm2之類的,現實上是terminal利用
并不直接與shell交互,更不與kernel交互它是一個帶顯示器的長途對講機,或許說是facetime,和虛擬master交互
實體tty不存在了,可是虛擬出一個偽終端,pseudo tty,簡稱pty
這個pty虛擬出來一個master,你可以懂得成一個坐在實體終端機後面的君子pty又虛擬出一個slave,你可以懂得成上古時期的終端機
為什么要如許做呢?
比如把之前主機的實包養網“體外設,在主機外部模仿了一下老的傳統被傳承了上去,設定有一小我,在敲終端機堅持了體系的一向性,只是各類稱號,帶來了凌亂
master與內部termin包養網al利用交互,slave與shell交互,shell與kernel交互
古代tty架構
串口驅動框架
串口驅動,內核啟動的時辰,便初始化完成,后期利用層用到的時辰,拜訪裝備節點便,獲取串口裝備的 fd 句柄,然后設置相干的參數(波特率,結束位,校驗位等等)便可以應用串口停止數據收發。
Linux Kernel 的 UART 串口分為幾層,tty 焦包養網點層,tty 線路規程,串行驅動焦點層,以及上面對接詳細芯片的 ops:
全部流程包養網走上去,有太多的數據構造和 ops,要剖析明白全部流程,有兩種方法:
1、至上而下,即,從用戶空間挪用串口設置裝備擺設以及串口讀寫的角度來剖析
2、從底層注冊開端剖析
本文先從底層注冊開端剖析,依據內核已知供給的接口,慢慢翻開魔盒,力圖分散到每一個常用的處所。
tty co包養網re
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?sort=created
https://blog.csdn.net/awks4002/article/details/102360209
發佈留言