tft每日頭條

 > 生活

 > 學linux驅動開發

學linux驅動開發

生活 更新时间:2025-02-07 19:44:28

Linux驅動開發,看起來是一份很高大上的職業,畢竟從事上層應用開發人員太多,而且門檻又不是特别高,而内核級開發從業人員要少得多,而且資料又較少。

有許多剛剛接觸到Linux驅動開發的同學會感覺非常困惑,面對複雜的Linux内核有一種無從下手的感覺。今天就和大家分享一下,讓剛剛步入驅動開發的同學少走一些彎路。

一、要知道将來要做什麼?

學習,都是有目的性的,要麼是興趣使然,要麼就是剛性需求,為了找一份好的工作。在這裡先和大家聊聊做設備驅動将來可以做哪些方面。

我把linux設備驅動開發工作分為兩大類,一類是做BSP級的開發,另外一類是做外設驅動的開發。

BSP的開發指的是闆級代碼的開發,和CPU是密切相關的,例如I2C/SPI Adapter的驅動。如果使用通用的芯片,比如三星的Exynos,飛思卡爾的I.MX系列,TI的OMAP或者DaVinci系列,基本都會有現成的BSP包,這部分代碼通常是芯片廠商提供和大型公司貢獻。

大家可以看看linux内核源碼中/arch/arm/mach-omap,内部很多代碼都是諾基亞貢獻。做BSP級的開發需要有較深的功底,首先要十分了解CPU特性,另外要使代碼有良好的擴展性和複用性,方便後續移植。有這樣需求的往往是芯片商或使用專用芯片的設備商。

外設驅動開發就相對簡單一些,都是和特定的外設硬件打交道。

通過利用BSP級代碼提供的API或者linux提供的更高層的抽象接口來操作硬件。實際上和應用層的開發大同小異。

例如操作I2C總線上的EEPROM,實際上的讀和寫操作都有已經封裝好的API來完成.而開發者需要做的是了解外設的特性,通過封裝好的API對外設進行操作。新入門的開發者建議從外設驅動開發入手,循序漸進。當然,一個優秀的開發者是即可以做BSP級代碼的開發,也能做外設驅動的開發的。

二、用面向對象的思想去思考

面向對象,即OO思想,大家應該非常熟悉。linux的内核雖然用面向過程的C語言實現,但是仍然是通過面向對象的思想去設計的。

如果從單片機轉行做linux設備驅動,會發現和單片機的或者裸機的驅動設計有很大區别。設計linux設備驅動不單單是對硬件設備的操作,更多需要考慮的是擴展性和代碼的複用。

所以就出現了platform device/driver,i2c device/driver,spi device/driver,抽象出了設備和驅動兩部分,使設備細節和驅動分離。另外還出現了一些框架,提供了底層接口的封裝,做開發時要習慣用OO思想去設計。當然要記住條條大路通羅馬,不使用這些device/driver也可以實現設備驅動,隻是不太推薦這樣做。

三、從各驅動框架入手

Linux提供了各種框架(子系統),對底層進行封裝,抽象出相同操作的接口,這樣可以更好的實現複用。想入門linux驅動開發,可以先從框架入手,掌握API的使用,再逐漸深入研究,從上到下去學習。不要把驅動開發想象的太複雜,實際和英語的完型填空差不多,框架有了,隻需要自己去填寫操作具體硬件的細節代碼而已。

幾個比較重要和常用的框架有:

  • GPIO:這個就不用多說了,剛開始接觸驅動的基本會練習通過GPIO點亮LED的操作,linux封裝了相關的gpio操作接口。
  • SPI:學會spi device/driver的用法,以及收發消息API,可以參考一些代碼,基本都是相同的套路。
  • I2C:學會i2c device/driver的用法,和學習SPI的套路一樣。
  • PINCTRL:非常重要的一個框架,負責CPU引腳複用,由于現在的CPU都很複雜,一個引腳支持多種複用。
  • V4L2:一個非常複雜的視頻采集框架,具體可以參考相關的文檔。驅動裡面有很多例子可供參考,同時提供了模闆vivi.c
  • Framebuffer:顯示相關的框架,熟悉其中API,而且有模闆skeletonfb.c。
  • DMA Engine: 把DMA操作進行封裝,目前驅動代碼中關于DMA的操作很多是使用私有的BSP包中的DMA接口,如果支持DMA Engine的話,建議使用DMA Engine。
  • 中斷:比較常用的了,接口不多,很少掌握。
  • USB框架:USB框架比較複雜,API較多,可以通過讀已有的代碼進行學習。
  • MTD框架:存儲相關比較重要的框架,網上相關的文檔很多。
  • 設備樹:設備樹是在新的内核裡面引進來的,可以把闆級代碼中的各種device通過設備樹文件去描述,動态創建,這樣更靈活。其實不要把設備樹想象的太複雜,實際和解析JSON,XML一樣,各個節點中記錄設備相關的信息,提供給驅動使用。

文末有學習路線參考!

更多linux内核視頻教程文檔資料免費領取後台私信【内核】自行獲取.

學linux驅動開發(小白該如何學習Linux驅動開發)1

學linux驅動開發(小白該如何學習Linux驅動開發)2

Linux内核源碼/内存調優/文件系統/進程管理/設備驅動/網絡協議棧-學習視頻教程-騰訊課堂

給大家推薦一下驅動開發轉内核大神的學習路線

全方面系統全面的講解底層原理開發技術:

1、五大專題,共計150 個課時

2、20個實戰操作模塊,2w 代碼;

主要從

  • 進程管理專題
  • 内存管理專題
  • 網絡協議棧專題
  • 設備驅動管理專題
  • 文件系統及内核組件專題

全方面系統全面的講解底層原理開發技術:

最新Linux内核大綱

進程管理專題

學linux驅動開發(小白該如何學習Linux驅動開發)3

内存管理專題

學linux驅動開發(小白該如何學習Linux驅動開發)4

網絡協議棧專題

學linux驅動開發(小白該如何學習Linux驅動開發)5

設備驅動管理專題

學linux驅動開發(小白該如何學習Linux驅動開發)6

文件系統及内核組件專題

學linux驅動開發(小白該如何學習Linux驅動開發)7

項目實戰

學linux驅動開發(小白該如何學習Linux驅動開發)8

适合于

  • 1.從事業務開發多年,對底層原理理解不夠深入的在職工程師
  • 2. 從事嵌入式方向開發,想轉入互聯網開發的在職工程師
  • 3. 從事Qt/MFC等桌面開發,薪資多年漲幅不大的在職工程師
  • 4. 從事非開發崗位(算法崗,運維崗,測試崗),想轉後台開發崗位的在職工程師
  • 5. 工作中技術沒有挑戰,工作中接觸不到新技術的在職工程師
  • 6. 自己研究學習速度較慢,不能系統構建知識體系的開發人員
  • 7. 了解很多技術名詞,但是深入細問又不理解的工程師
  • 8. 計算機相關專業想進入大廠的在校生(本科及以上學曆,有c/c 基礎)

學linux驅動開發(小白該如何學習Linux驅動開發)9

學linux驅動開發(小白該如何學習Linux驅動開發)10

學linux驅動開發(小白該如何學習Linux驅動開發)11

學linux驅動開發(小白該如何學習Linux驅動開發)12

學linux驅動開發(小白該如何學習Linux驅動開發)13

學linux驅動開發(小白該如何學習Linux驅動開發)14

等等

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved