【揪包養價格驅動】串口驅動剖析(一)-軟件架構

作者:

區分分歧的終端類型

串行端口終端(/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


留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *