為啥Linux內(nèi)核對(duì)驅(qū)動(dòng)調(diào)用要繞這么多彎?
為啥Linux內(nèi)核對(duì)驅(qū)動(dòng)調(diào)用要繞這么多彎?
需要去寫(xiě)驅(qū)動(dòng)的,基本是芯片原廠(chǎng)的人。其他的linux驅(qū)動(dòng)從業(yè)者,只是調(diào)試、改設(shè)備樹(shù)、封裝庫(kù)差不多了。需要“不滿(mǎn)足照搬框架去寫(xiě)驅(qū)動(dòng)”的人,應(yīng)該都是通過(guò)芯片原廠(chǎng)面試的人,不會(huì)來(lái)問(wèn)這問(wèn)題。當(dāng)然要搞清里面的流程還是很有必要的,不能只做api boy,這是值得贊揚(yáng)和學(xué)習(xí)的。
簡(jiǎn)單說(shuō)說(shuō)我自己粗淺的理解,就是關(guān)于造成現(xiàn)在你看到的認(rèn)為的繞那么多彎的,我理解原因主要因?yàn)樗狞c(diǎn):最近很多小伙伴找我,說(shuō)想要一些Linux內(nèi)核學(xué)習(xí)資料,然后我根據(jù)自己從業(yè)十年經(jīng)驗(yàn),熬夜搞了幾個(gè)通宵,精心整理了一份「Linux內(nèi)核入門(mén)到高級(jí)教程+工具包」,點(diǎn)個(gè)關(guān)注,全部無(wú)償共享給大家!??!
評(píng)論區(qū)回復(fù)“888”,關(guān)注我之后私信回復(fù)“666”,即可拿走。
1.需要面向?qū)ο螅?/p>
2.需要分層管理;
3.需要安全;
4.需要考慮現(xiàn)實(shí)中可能會(huì)出現(xiàn)的各種“如果”。
面向?qū)ο螅壕褪前褜?shí)體、虛體都抽象出一個(gè)歸類(lèi),求同存異。設(shè)備有字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備,就字符設(shè)備都有各種不同的成千上萬(wàn)種實(shí)體設(shè)備,每個(gè)字符設(shè)備有除了有字符設(shè)備的共性,還有自己的特性,特性包括傳輸時(shí)序、工作方式等等,這些又決定你采用的總線(xiàn)(IIC?UART?CAN?)是不同的。這些就造就了需要不同的驅(qū)動(dòng)去配合,而匹配的方式也各有不同,設(shè)備、驅(qū)動(dòng)、總線(xiàn)、數(shù)據(jù)、內(nèi)存等等都需要采用面向?qū)ο笠院萌ス芾?,而每個(gè)對(duì)象,都有不同各自的需要定義和操作方式,這管理起來(lái)會(huì)很亂,就需要分層管理;
分層管理:分層管理其實(shí)說(shuō)白了就是把做一件事情涉及到的所有對(duì)象按照功能、目的去劃分步驟,這樣管理起來(lái)就不會(huì)亂,思路會(huì)更清晰。例如一個(gè)“設(shè)備來(lái)了,你要去接應(yīng)它”,看似簡(jiǎn)單的一句話(huà),可是作為一個(gè)好的操作系統(tǒng)內(nèi)核,你要考慮的是:它是什么設(shè)備、從哪里來(lái)的、怎么來(lái)的、為什么要來(lái)、允不允許來(lái)、來(lái)了要怎么做、它來(lái)找誰(shuí)、它有找那個(gè)誰(shuí)的權(quán)限嗎、那個(gè)誰(shuí)有空嗎、它要來(lái)多久、它還帶來(lái)了什么、它會(huì)留下什么、它會(huì)改變什么、它可以離開(kāi)嗎、它要怎么離開(kāi)、它離開(kāi)了我還要干什么。以上這么多事情,怎么安排內(nèi)核或者CPU做呢?