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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux驅(qū)動(dòng)開發(fā)的學(xué)習(xí)方法

涼白不開 ? 來源:涼白不開 ? 作者:涼白不開 ? 2022-04-22 09:52 ? 次閱讀

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

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

01要知道將來要做什么

學(xué)習(xí),都是有目的性的,要么是興趣使然,要么就是剛性需求,為了找一份好的工作。在這里先和大家聊聊做設(shè)備驅(qū)動(dòng)將來可以做哪些方面。

我把linux設(shè)備驅(qū)動(dòng)開發(fā)工作分為兩大類,一類是做BSP級(jí)的開發(fā),另外一類是做外設(shè)驅(qū)動(dòng)的開發(fā)。

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

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

外設(shè)驅(qū)動(dòng)開發(fā)就相對(duì)簡(jiǎn)單一些,都是和特定的外設(shè)硬件打交道。

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

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

02用面向?qū)ο蟮乃枷肴ニ伎?/p>

面向?qū)ο?,即OO思想,大家應(yīng)該非常熟悉。linux的內(nèi)核雖然用面向過程的C語言實(shí)現(xiàn),但是仍然是通過面向?qū)ο蟮乃枷肴ピO(shè)計(jì)的。

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

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

03從各驅(qū)動(dòng)框架入手

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

幾個(gè)比較重要和常用的框架有:

GPIO:這個(gè)就不用多說了,剛開始接觸驅(qū)動(dòng)的基本會(huì)練習(xí)通過GPIO點(diǎn)亮LED的操作,linux封裝了相關(guān)的gpio操作接口。

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

I2C:學(xué)會(huì)i2c device/driver的用法,和學(xué)習(xí)SPI的套路一樣。

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

V4L2:一個(gè)非常復(fù)雜的視頻采集框架,具體可以參考相關(guān)的文檔。驅(qū)動(dòng)里面有很多例子可供參考,同時(shí)提供了模板vivi.c

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

DMA Engine: 把DMA操作進(jìn)行封裝,目前驅(qū)動(dòng)代碼中關(guān)于DMA的操作很多是使用私有的BSP包中的DMA接口,如果支持DMA Engine的話,建議使用DMA Engine。

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

USB框架:USB框架比較復(fù)雜,API較多,可以通過讀已有的代碼進(jìn)行學(xué)習(xí)。

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

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

審核編輯:湯梓紅

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

    關(guān)注

    87

    文章

    11342

    瀏覽量

    210216
  • 驅(qū)動(dòng)開發(fā)

    關(guān)注

    0

    文章

    130

    瀏覽量

    12101
  • 驅(qū)動(dòng)框架
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    4071
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    迅為RK3568開發(fā)驅(qū)動(dòng)指南Linux中通用SPI設(shè)備驅(qū)動(dòng)

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

    Linux系統(tǒng)更換開機(jī)logo方法教程,觸覺智能RK3562開發(fā)板演示

    本文介紹Linux系統(tǒng)更換開機(jī)logo方法教程,通用RK3566、RK3568、RK3588、RK3576等開發(fā)板,觸覺智能RK3562開發(fā)板演示
    的頭像 發(fā)表于 01-06 10:53 ?213次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng)更換開機(jī)logo<b class='flag-5'>方法</b>教程,觸覺智能RK3562<b class='flag-5'>開發(fā)</b>板演示

    傳統(tǒng)機(jī)器學(xué)習(xí)方法和應(yīng)用指導(dǎo)

    用于開發(fā)生物學(xué)數(shù)據(jù)的機(jī)器學(xué)習(xí)方法。盡管深度學(xué)習(xí)(一般指神經(jīng)網(wǎng)絡(luò)算法)是一個(gè)強(qiáng)大的工具,目前也非常流行,但它的應(yīng)用領(lǐng)域仍然有限。與深度學(xué)習(xí)相比,傳統(tǒng)
    的頭像 發(fā)表于 12-30 09:16 ?359次閱讀
    傳統(tǒng)機(jī)器<b class='flag-5'>學(xué)習(xí)方法</b>和應(yīng)用指導(dǎo)

    什么是機(jī)器學(xué)習(xí)?通過機(jī)器學(xué)習(xí)方法能解決哪些問題?

    來源:Master編程樹“機(jī)器學(xué)習(xí)”最初的研究動(dòng)機(jī)是讓計(jì)算機(jī)系統(tǒng)具有人的學(xué)習(xí)能力以便實(shí)現(xiàn)人工智能。因?yàn)闆]有學(xué)習(xí)能力的系統(tǒng)很難被認(rèn)為是具有智能的。目前被廣泛采用的機(jī)器學(xué)習(xí)的定義是“利用經(jīng)
    的頭像 發(fā)表于 11-16 01:07 ?491次閱讀
    什么是機(jī)器<b class='flag-5'>學(xué)習(xí)</b>?通過機(jī)器<b class='flag-5'>學(xué)習(xí)方法</b>能解決哪些問題?

    Linux開發(fā)怎么學(xué)?

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

    北京迅為RK3568開發(fā)板嵌入式學(xué)習(xí)Linux驅(qū)動(dòng)全新更新-CAN+

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

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

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

    linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核

    Linux系統(tǒng)中,驅(qū)動(dòng)程序是內(nèi)核與硬件設(shè)備之間的橋梁。它們?cè)试S內(nèi)核與硬件設(shè)備進(jìn)行通信,從而實(shí)現(xiàn)對(duì)硬件設(shè)備的控制和管理。 驅(qū)動(dòng)程序的編寫 驅(qū)動(dòng)程序的編寫是
    的頭像 發(fā)表于 08-30 15:02 ?566次閱讀

    linux驅(qū)動(dòng)程序的編譯方法是什么

    Linux驅(qū)動(dòng)程序的編譯方法主要包括兩種: 與內(nèi)核一起編譯 和 編譯成獨(dú)立的內(nèi)核模塊 。以下是對(duì)這兩種方法的介紹: 一、與內(nèi)核一起編譯 與內(nèi)核一起編譯意味著將
    的頭像 發(fā)表于 08-30 14:46 ?745次閱讀

    linux驅(qū)動(dòng)程序的編譯方法有哪兩種

    Collection)或其他C/C++編譯器來編譯源代碼文件。這種方法較為原始,需要開發(fā)者手動(dòng)指定編譯器選項(xiàng)、包含路徑、庫文件等。然而,在Linux驅(qū)動(dòng)
    的頭像 發(fā)表于 08-30 14:39 ?887次閱讀

    Linux 驅(qū)動(dòng)開發(fā)與應(yīng)用開發(fā),你知道多少?

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

    《DNK210使用指南 -CanMV版 V1.0》第一章本書學(xué)習(xí)方法

    第一章 本書學(xué)習(xí)方法 為了讓讀者更好地學(xué)習(xí)和使用本書,本章將為讀者介紹本書的學(xué)習(xí)方法,包括:本書的學(xué)習(xí)順序、編寫規(guī)范、代碼規(guī)范、資料查找和學(xué)習(xí)
    發(fā)表于 08-28 17:57

    深度學(xué)習(xí)中的無監(jiān)督學(xué)習(xí)方法綜述

    應(yīng)用中往往難以實(shí)現(xiàn)。因此,無監(jiān)督學(xué)習(xí)在深度學(xué)習(xí)中扮演著越來越重要的角色。本文旨在綜述深度學(xué)習(xí)中的無監(jiān)督學(xué)習(xí)方法,包括自編碼器、生成對(duì)抗網(wǎng)絡(luò)、聚類算法等,并分析它們的原理、應(yīng)用場(chǎng)景以及優(yōu)
    的頭像 發(fā)表于 07-09 10:50 ?906次閱讀

    ArmSoM系列板卡 嵌入式Linux驅(qū)動(dòng)開發(fā)實(shí)戰(zhàn)指南 之 字符設(shè)備驅(qū)動(dòng)

    字符設(shè)備驅(qū)動(dòng) 本章,我們將學(xué)習(xí)字符設(shè)備使用、字符設(shè)備驅(qū)動(dòng)相關(guān)的概念,理解字符設(shè)備驅(qū)動(dòng)程序的基本框架,并從源碼上分析字符設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)和管理等。
    的頭像 發(fā)表于 04-10 09:53 ?1117次閱讀
    ArmSoM系列板卡 嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>實(shí)戰(zhàn)指南 之 字符設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>

    盤點(diǎn)那些硬件+項(xiàng)目學(xué)習(xí)套件:STM32MP157 Linux開發(fā)板及入門常見問題解答

    驅(qū)動(dòng)開發(fā)ARM Cortex-A7開發(fā)、Linux系統(tǒng)移植,全體系學(xué)習(xí); ? STM32單片機(jī)學(xué)習(xí)
    發(fā)表于 02-01 14:25