{eval=Array;=+count(Array);}
還沒學(xué)到驅(qū)動(dòng),大致的說一下吧,驅(qū)動(dòng)是建立在內(nèi)核之上來開發(fā)的,比如你寫了一個(gè)驅(qū)動(dòng)的代碼,那就要把驅(qū)動(dòng)加載到內(nèi)核中去,然后內(nèi)核去執(zhí)行,為什么需要內(nèi)核,我個(gè)人的理解就是,內(nèi)核是來管理硬件資源的,你寫的驅(qū)動(dòng)代碼是來驅(qū)動(dòng)硬件的,內(nèi)核不可能去驅(qū)動(dòng)硬件的,當(dāng)然包括管理進(jìn)程,這部分的事情由驅(qū)動(dòng)去做,驅(qū)動(dòng)可以理解為一個(gè)進(jìn)程,內(nèi)核負(fù)責(zé)來管理,結(jié)構(gòu)就是:應(yīng)用程序->內(nèi)核(比如系統(tǒng)調(diào)用write,read等等)->驅(qū)動(dòng)程序(比如write來驅(qū)動(dòng)磁盤來寫)。
換句話說就是對(duì)于驅(qū)動(dòng)開發(fā),不知道樓主是否學(xué)過單片機(jī),可以理解驅(qū)動(dòng)就是一個(gè)驅(qū)動(dòng)硬件的過程,就像單片機(jī)一樣,當(dāng)然再發(fā)過程中還是有很大的區(qū)別的。
內(nèi)核開發(fā),這個(gè)工作還真不是一般的人能開發(fā)的,不然linux內(nèi)核的維護(hù)就不會(huì)給linux之父了,內(nèi)核的開發(fā)就是用一種方法來合理的管理并分配硬件資源,比如內(nèi)存的管理就用到分頁的方法,還有一些磁盤的管理,進(jìn)程的管理,cpu的調(diào)度算法(比如簡(jiǎn)單的FIFO,時(shí)間片)等等,在學(xué)習(xí)內(nèi)核前做好把操作系統(tǒng)原理看一下,這本書還可以:
我學(xué)習(xí)的時(shí)候結(jié)合了國外的操作系統(tǒng)原理第七版,因?yàn)檫@兩本書介紹的側(cè)重點(diǎn)有所不同,上圖的書注重實(shí)踐性(相比后一本),后一本注重算法方面。
額。。說偏了哈,反正總有一天樓主估計(jì)是想開發(fā)內(nèi)核的,所以建議先把原理學(xué)會(huì),還有最基本的計(jì)算機(jī)科學(xué)基礎(chǔ)知識(shí)最好學(xué)的扎實(shí)點(diǎn),到時(shí)學(xué)習(xí)內(nèi)核就不是特別吃力,當(dāng)然是相比什么都不懂的情況下。
Linux設(shè)備驅(qū)動(dòng)需要使用內(nèi)核API來實(shí)現(xiàn),一般被包含在Linux內(nèi)核源碼樹中。驅(qū)動(dòng)可以編譯到內(nèi)核,隨著內(nèi)核一起在系統(tǒng)啟動(dòng)的時(shí)候被加載。也可以編譯成內(nèi)核模塊,在系統(tǒng)運(yùn)行起來之后動(dòng)態(tài)地加載到內(nèi)核中,使得調(diào)試的時(shí)候無需重新編譯內(nèi)核,也無需重啟系統(tǒng),很大程度上方便了驅(qū)動(dòng)代碼的調(diào)試。但并不是只有設(shè)備驅(qū)動(dòng)才能編譯成模塊,有些內(nèi)核功能的實(shí)現(xiàn)也可以,以便在需要的時(shí)候再加載,比如內(nèi)核中文件系統(tǒng)的實(shí)現(xiàn)、加密及校驗(yàn)的實(shí)現(xiàn)、網(wǎng)絡(luò)協(xié)議棧的實(shí)現(xiàn)等等。
平時(shí)你聽到的驅(qū)動(dòng)開發(fā)一般指的是開發(fā)系統(tǒng)外圍設(shè)備的驅(qū)動(dòng),使得設(shè)備能被內(nèi)核操控,如USB主從設(shè)備、Flash設(shè)備驅(qū)動(dòng)、I2C設(shè)備驅(qū)動(dòng)、LCD設(shè)備驅(qū)動(dòng)、網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)。平時(shí)你聽到的內(nèi)核開發(fā)一般就指除了設(shè)備驅(qū)動(dòng)之外的開發(fā)了,比如Linux系統(tǒng)啟動(dòng)流程、進(jìn)程管理、內(nèi)存管理、時(shí)間管理、系統(tǒng)調(diào)用、文件系統(tǒng)等,但這些部分也在很大程度上被所謂的“驅(qū)動(dòng)開發(fā)”所用。
所以,實(shí)際上驅(qū)動(dòng)開發(fā)只是內(nèi)核開發(fā)的一部分。
linux內(nèi)核源碼研習(xí)與項(xiàng)目實(shí)戰(zhàn)學(xué)習(xí)地址:https://ke.qq.com/course/431590?flowToken=1013767
我做過驅(qū)動(dòng)開發(fā),說說我的看法。本質(zhì)上說Linux內(nèi)核開發(fā)和Linux驅(qū)動(dòng)開發(fā)是不一樣的,或者說驅(qū)動(dòng)開發(fā)是內(nèi)核開發(fā)的一部分,因?yàn)?/span>驅(qū)動(dòng)屬于內(nèi)核。目前國內(nèi)驅(qū)動(dòng)開發(fā)和內(nèi)核開發(fā)一般是一樣的。有對(duì)應(yīng)linux內(nèi)核開發(fā)工程師和linux驅(qū)動(dòng)開發(fā)工程師職位。
內(nèi)核開發(fā)指的是形成linux操作系統(tǒng)的過程,也就是內(nèi)核開發(fā)者向內(nèi)核中添加信息使得linux從無到有的過程或者添加新的功能,比如Linux內(nèi)核在2.6版本內(nèi)核之前是沒有設(shè)備驅(qū)動(dòng)模型,內(nèi)核開發(fā)者在2.6版本中增加了設(shè)備驅(qū)動(dòng)模型,這屬于linux內(nèi)核開發(fā)。而linux驅(qū)動(dòng)開發(fā)指的是使用Linux內(nèi)核提供的接口,驅(qū)動(dòng)開發(fā)者根據(jù)實(shí)際情況按照內(nèi)核提供驅(qū)動(dòng)的框架寫相應(yīng)的驅(qū)動(dòng)并注冊(cè)到相應(yīng)的總線上,進(jìn)而驅(qū)使硬件設(shè)備工作,比如I2C設(shè)備就注冊(cè)到i2c總線上,這個(gè)i2c總線是內(nèi)核開發(fā)者為我們提供的接口,我們只需要調(diào)用相應(yīng)接口即可。整個(gè)工作流程是:linux應(yīng)用程序->內(nèi)核->驅(qū)動(dòng)->硬件。如下圖所示:
多說一點(diǎn),要進(jìn)行l(wèi)inux驅(qū)動(dòng)開發(fā),必須學(xué)好C語言、能夠看懂電路圖(因?yàn)轵?qū)動(dòng)開發(fā)需要根據(jù)相應(yīng)的引腳來編寫驅(qū)動(dòng))需要模電和數(shù)電知識(shí),linux操作系統(tǒng)知識(shí),linux應(yīng)用編程知識(shí)(多進(jìn)程、多線程、文件io操作)因?yàn)槲覀円獪y(cè)試寫的驅(qū)動(dòng)能否正常工作需要linux應(yīng)用編程知識(shí)。最好對(duì)數(shù)據(jù)結(jié)構(gòu)中的鏈表有所了解,內(nèi)核中有大量的內(nèi)核鏈表。
感謝評(píng)論,交流,轉(zhuǎn)發(fā)。更多精彩內(nèi)容可關(guān)注本我們:嵌入式軟硬件開發(fā)。感謝大家。相互交流,共同進(jìn)步。
Linux內(nèi)核包括系統(tǒng)調(diào)用接口、進(jìn)程管理、內(nèi)存管理、虛擬文件系統(tǒng)、網(wǎng)絡(luò)堆棧、設(shè)備驅(qū)動(dòng),Linux內(nèi)核開發(fā)就包括上面的每一個(gè)模塊了。
Linux還分為用戶空間和內(nèi)核空間,2者基本關(guān)系如下圖所示:
Linux驅(qū)動(dòng)開發(fā)屬于Linux內(nèi)核開發(fā)的一部分,手機(jī)、平板底層LCD、Camera、G-sensor等硬件驅(qū)動(dòng)都需要Linux驅(qū)動(dòng)開發(fā)來完成。作為驅(qū)動(dòng)工程師需要掌握如下Linxu驅(qū)動(dòng)開發(fā):
3.Linux
系統(tǒng)下的各外設(shè)驅(qū)動(dòng)開發(fā)字符設(shè)備驅(qū)動(dòng)
lcd設(shè)備驅(qū)動(dòng)程序
觸摸屏設(shè)備驅(qū)動(dòng)程序
input輸入子系統(tǒng)驅(qū)動(dòng)
Camear驅(qū)動(dòng)開發(fā)
塊設(shè)備驅(qū)動(dòng)、Audio驅(qū)動(dòng)、USB驅(qū)動(dòng)開發(fā)等
驅(qū)動(dòng)開發(fā)是內(nèi)核開發(fā)的一種,內(nèi)核開發(fā)是指內(nèi)核層應(yīng)用開發(fā),比如常見的硬件驅(qū)動(dòng)、netfilter等等。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答