一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何學習Linux驅動開發(fā)?

信盈達 ? 2022-01-06 16:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

01要知道將來要做什么

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

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

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

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

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

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

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

02用面向對象的思想去思考

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

如果從單片機轉行做linux設備驅動,會發(fā)現(xiàn)和單片機的或者裸機的驅動設計有很大區(qū)別。設計linux設備驅動不單單是對硬件設備的操作,更多需要考慮的是擴展性和代碼的復用。

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

03從各驅動框架入手

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

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

GPIO:這個就不用多說了,剛開始接觸驅動的基本會練習通過GPIO點亮LED的操作,linux封裝了相關的gpio操作接口。

SPI:學會spi device/driver的用法,以及收發(fā)消息API,可以參考一些代碼,基本都是相同的套路。

I2C:學會i2c device/driver的用法,和學習SPI的套路一樣。

PINCTRL:非常重要的一個框架,負責CPU引腳復用,由于現(xiàn)在的CPU都很復雜,一個引腳支持多種復用。

V4L2:一個非常復雜的視頻采集框架,具體可以參考相關的文檔。驅動里面有很多例子可供參考,同時提供了模板vivi.c

Framebuffer:顯示相關的框架,熟悉其中API,而且有模板skeletonfb.c。

DMA Engine: 把DMA操作進行封裝,目前驅動代碼中關于DMA的操作很多是使用私有的BSP包中的DMA接口,如果支持DMA Engine的話,建議使用DMA Engine。

中斷:比較常用的了,接口不多,很少掌握。

USB框架:USB框架比較復雜,API較多,可以通過讀已有的代碼進行學習。

MTD框架:存儲相關比較重要的框架,網(wǎng)上相關的文檔很多。

設備樹:設備樹是在新的內核里面引進來的,可以把板級代碼中的各種device通過設備樹文件去描述,動態(tài)創(chuàng)建,這樣更靈活。其實不要把設備樹想象的太復雜,實際和解析JSON,XML一樣,各個節(jié)點中記錄設備相關的信息,提供給驅動使用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 驅動器
    +關注

    關注

    54

    文章

    8689

    瀏覽量

    149910
  • Linux
    +關注

    關注

    87

    文章

    11509

    瀏覽量

    213724
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式開發(fā)入門指南:從零開始學習嵌入式

    基礎 3. 學習路徑推薦第一階段:熟悉開發(fā)環(huán)境(如Keil、IAR、STM32)第二階段:掌握裸機編程與驅動開發(fā)第三階段:學習RTOS(實時
    發(fā)表于 05-15 09:29

    硬核升級!華清遠見STM32MP157驅動開發(fā)課程助力嵌入式Linux底層開發(fā)入門進階

    在嵌入式Linux系統(tǒng)開發(fā)中,驅動程序開發(fā)是一項關鍵技術,它作為硬件與軟件之間的橋梁,實現(xiàn)了操作系統(tǒng)對硬件設備的控制。相較于嵌入式Linux
    的頭像 發(fā)表于 04-03 16:40 ?418次閱讀
    硬核升級!華清遠見STM32MP157<b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>課程助力嵌入式<b class='flag-5'>Linux</b>底層<b class='flag-5'>開發(fā)</b>入門進階

    [迅為]Linux開發(fā)小技巧:Remote - SSH插件

    [迅為]Linux開發(fā)小技巧:Remote - SSH插件
    的頭像 發(fā)表于 04-01 15:46 ?532次閱讀
    [迅為]<b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)</b>小技巧:Remote - SSH插件

    迅為RK3568開發(fā)驅動指南Linux中通用SPI設備驅動

    迅為RK3568開發(fā)驅動指南Linux中通用SPI設備驅動
    的頭像 發(fā)表于 01-23 11:02 ?2820次閱讀
    迅為RK3568<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>驅動</b>指南<b class='flag-5'>Linux</b>中通用SPI設備<b class='flag-5'>驅動</b>

    Linux開發(fā)怎么學?

    Linux開發(fā)怎么學? 學習 Linux 是一個循序漸進、持續(xù)不斷的過程。我們可以從以下幾個方面開始 1.了解 Linux 的歷史和發(fā)展:
    發(fā)表于 10-10 14:34

    北京迅為RK3568開發(fā)板嵌入式學習Linux驅動全新更新-CAN+

    北京迅為RK3568開發(fā)板嵌入式學習Linux驅動全新更新-CAN+
    的頭像 發(fā)表于 09-04 15:29 ?1039次閱讀
    北京迅為RK3568<b class='flag-5'>開發(fā)</b>板嵌入式<b class='flag-5'>學習</b>之<b class='flag-5'>Linux</b><b class='flag-5'>驅動</b>全新更新-CAN+

    嵌入式linux開發(fā)的基本步驟有哪些?

    嵌入式Linux開發(fā)是一個復雜的過程,涉及到硬件選擇、操作系統(tǒng)移植、驅動開發(fā)、應用程序開發(fā)等多個方面。以下是嵌入式
    的頭像 發(fā)表于 09-02 09:11 ?1233次閱讀

    嵌入式linux開發(fā)板芯片的工作原理

    嵌入式Linux開發(fā)板是一種基于Linux操作系統(tǒng)的嵌入式系統(tǒng)開發(fā)平臺,它廣泛應用于工業(yè)控制、智能家居、智能交通、醫(yī)療設備等領域。 嵌入式Linux
    的頭像 發(fā)表于 09-02 09:07 ?815次閱讀

    linux開發(fā)板與樹莓派的區(qū)別

    定義和用途 Linux開發(fā)板:Linux開發(fā)板是一種基于Linux操作系統(tǒng)的嵌入式開發(fā)板,通常用
    的頭像 發(fā)表于 08-30 15:34 ?1959次閱讀

    linux開發(fā)板和單片機開發(fā)的區(qū)別

    硬件架構 Linux開發(fā)板和單片機開發(fā)在硬件架構上有很大的區(qū)別。Linux開發(fā)板通?;贏RM、x86或其他處理器架構,具有較高的處理能力和
    的頭像 發(fā)表于 08-30 15:30 ?2150次閱讀

    linux系統(tǒng)的設備驅動一般分幾類

    Linux系統(tǒng)的設備驅動是操作系統(tǒng)與硬件設備之間的橋梁,負責實現(xiàn)操作系統(tǒng)與硬件設備之間的通信和控制。Linux系統(tǒng)的設備驅動可以分為以下幾類: 字符設備
    的頭像 發(fā)表于 08-30 15:13 ?1010次閱讀

    Linux設備驅動程序分類有哪些

    Linux設備驅動程序是操作系統(tǒng)與硬件設備之間的橋梁,負責實現(xiàn)硬件設備與操作系統(tǒng)之間的通信和控制。Linux設備驅動程序的分類繁多,可以根據(jù)不同的標準進行分類。 按硬件類型分類
    的頭像 發(fā)表于 08-30 15:11 ?1232次閱讀

    linux驅動程序如何加載進內核

    Linux系統(tǒng)中,驅動程序是內核與硬件設備之間的橋梁。它們允許內核與硬件設備進行通信,從而實現(xiàn)對硬件設備的控制和管理。 驅動程序的編寫 驅動程序的編寫是
    的頭像 發(fā)表于 08-30 15:02 ?1097次閱讀

    linux驅動程序的編譯方法是什么

    Linux驅動程序的編譯方法主要包括兩種: 與內核一起編譯 和 編譯成獨立的內核模塊 。以下是對這兩種方法的介紹: 一、與內核一起編譯 與內核一起編譯意味著將驅動程序的源代碼直接集成到Linu
    的頭像 發(fā)表于 08-30 14:46 ?1246次閱讀

    Linux 驅動開發(fā)與應用開發(fā),你知道多少?

    一、Linux驅動開發(fā)與應用開發(fā)的區(qū)別開發(fā)層次不同:Linux
    的頭像 發(fā)表于 08-30 12:16 ?1592次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>與應用<b class='flag-5'>開發(fā)</b>,你知道多少?