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