chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

如何學(xué)習(xí)Linux驅(qū)動(dòng)開(kāi)發(fā)?

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

掃碼添加小助手

加入工程師交流群

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

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

01要知道將來(lái)要做什么

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

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

BSP的開(kāi)發(fā)指的是板級(jí)代碼的開(kāi)發(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í)的開(kāi)發(fā)需要有較深的功底,首先要十分了解CPU特性,另外要使代碼有良好的擴(kuò)展性和復(fù)用性,方便后續(xù)移植。有這樣需求的往往是芯片商或使用專(zhuān)用芯片的設(shè)備商。

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

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

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

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

面向?qū)ο螅碠O思想,大家應(yīng)該非常熟悉。linux的內(nèi)核雖然用面向過(guò)程的C語(yǔ)言實(shí)現(xiàn),但是仍然是通過(guò)面向?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)了一些框架,提供了底層接口的封裝,做開(kāi)發(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ù)用。想入門(mén)linux驅(qū)動(dòng)開(kāi)發(fā),可以先從框架入手,掌握API的使用,再逐漸深入研究,從上到下去學(xué)習(xí)。不要把驅(qū)動(dòng)開(kāi)發(fā)想象的太復(fù)雜,實(shí)際和英語(yǔ)的完型填空差不多,框架有了,只需要自己去填寫(xiě)操作具體硬件的細(xì)節(jié)代碼而已。

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

GPIO:這個(gè)就不用多說(shuō)了,剛開(kāi)始接觸驅(qū)動(dòng)的基本會(huì)練習(xí)通過(guò)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的話(huà),建議使用DMA Engine。

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

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

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

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

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

    關(guān)注

    54

    文章

    8936

    瀏覽量

    152240
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11576

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    學(xué)習(xí)Linux應(yīng)該從哪里開(kāi)始?

    在工業(yè)控制、邊緣計(jì)算、人工智能這些領(lǐng)域,有一句幾乎約定俗成的話(huà): “會(huì)不會(huì) Linux,決定了你能走多遠(yuǎn)?!?但對(duì)很多剛?cè)腴T(mén)的工程師來(lái)說(shuō),Linux 看起來(lái)像個(gè)龐大又神秘的世界——命令行、驅(qū)動(dòng)、內(nèi)核
    的頭像 發(fā)表于 10-16 09:51 ?107次閱讀
    <b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>Linux</b>應(yīng)該從哪里開(kāi)始?

    RK3506開(kāi)發(fā)Linux開(kāi)發(fā)板極致性?xún)r(jià)比之選

    內(nèi)存,256MB存儲(chǔ),裸機(jī)開(kāi)發(fā)Linux開(kāi)發(fā)、QT開(kāi)發(fā)、LVGL開(kāi)發(fā)、快速啟動(dòng)順暢支持!官方售價(jià)到手僅49.9元,性?xún)r(jià)比極高!RK3506
    的頭像 發(fā)表于 09-11 16:26 ?1115次閱讀
    RK3506<b class='flag-5'>開(kāi)發(fā)</b>板<b class='flag-5'>Linux</b><b class='flag-5'>開(kāi)發(fā)</b>板極致性?xún)r(jià)比之選

    Linux 應(yīng)用開(kāi)發(fā)手冊(cè)

    T507linux應(yīng)用開(kāi)發(fā)手冊(cè)
    發(fā)表于 08-22 17:01 ?2次下載

    【「Yocto項(xiàng)目實(shí)戰(zhàn)教程:高效定制嵌入式Linux系統(tǒng)」閱讀體驗(yàn)】+基礎(chǔ)概念學(xué)習(xí)理解

    一、閱讀背景 作為一名擁有十余年經(jīng)驗(yàn)的 MCU 工程師。在過(guò)去的工作中,我主要專(zhuān)注于 MCU 的開(kāi)發(fā),涉及硬件驅(qū)動(dòng)、及實(shí)時(shí)性任務(wù)處理等方面。作為MCU人的一個(gè)追求LINUX才是技術(shù)的一個(gè)珠峰
    發(fā)表于 08-04 22:29

    開(kāi)源電機(jī)驅(qū)動(dòng),免費(fèi)直播學(xué)習(xí)!

    開(kāi)源電機(jī)驅(qū)動(dòng),免費(fèi)直播學(xué)習(xí)!
    的頭像 發(fā)表于 06-13 10:07 ?1017次閱讀
    開(kāi)源電機(jī)<b class='flag-5'>驅(qū)動(dòng)</b>,免費(fèi)直播<b class='flag-5'>學(xué)習(xí)</b>!

    嵌入式開(kāi)發(fā)入門(mén)指南:從零開(kāi)始學(xué)習(xí)嵌入式

    基礎(chǔ) 3. 學(xué)習(xí)路徑推薦第一階段:熟悉開(kāi)發(fā)環(huán)境(如Keil、IAR、STM32)第二階段:掌握裸機(jī)編程與驅(qū)動(dòng)開(kāi)發(fā)第三階段:學(xué)習(xí)RTOS(實(shí)時(shí)
    發(fā)表于 05-15 09:29

    Linux的作用

    工具和環(huán)境,支持多種編程語(yǔ)言和開(kāi)發(fā)框架。許多開(kāi)發(fā)人員使用Linux作為開(kāi)發(fā)平臺(tái),進(jìn)行軟件開(kāi)發(fā)、系統(tǒng)管理和網(wǎng)絡(luò)管理等工作。 5、
    發(fā)表于 04-04 01:57

    硬核升級(jí)!華清遠(yuǎn)見(jiàn)STM32MP157驅(qū)動(dòng)開(kāi)發(fā)課程助力嵌入式Linux底層開(kāi)發(fā)入門(mén)進(jìn)階

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

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

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

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Linux驅(qū)動(dòng)模塊之helloworld驅(qū)動(dòng)

    例程代碼路徑:ELF 1開(kāi)發(fā)板資料包\\03-例程源碼\\03-2 驅(qū)動(dòng)例程源碼\\01_helloworld\\hello 本章節(jié)先寫(xiě)一個(gè)helloworld驅(qū)動(dòng),不涉及對(duì)硬件的操作,它的目的
    發(fā)表于 03-12 10:35

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

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

    嵌入式開(kāi)發(fā)必備-RK3562演示Linux常用系統(tǒng)查詢(xún)命令(上)觸覺(jué)智能出品

    實(shí)用干貨!嵌入式開(kāi)發(fā)學(xué)習(xí)必備-RK3562演示Linux常用系統(tǒng)查詢(xún)命令(上)關(guān)注觸覺(jué)智能持續(xù)為大家?guī)?lái)更多嵌入式開(kāi)發(fā)內(nèi)容
    的頭像 發(fā)表于 12-31 10:51 ?117次閱讀
    嵌入式<b class='flag-5'>開(kāi)發(fā)</b>必備-RK3562演示<b class='flag-5'>Linux</b>常用系統(tǒng)查詢(xún)命令(上)觸覺(jué)智能出品

    Linux驅(qū)動(dòng)程序程序員指南

    電子發(fā)燒友網(wǎng)站提供《Linux驅(qū)動(dòng)程序程序員指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-22 15:53 ?0次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動(dòng)</b>程序程序員指南

    linux內(nèi)核中通用HID觸摸驅(qū)動(dòng)

    linux內(nèi)核中,為HID觸摸面板實(shí)現(xiàn)了一個(gè)通用的驅(qū)動(dòng)程序,位于/drivers/hid/hid-multitouch.c文件中。hid觸摸驅(qū)動(dòng)是以struct hid_driver實(shí)現(xiàn),首先定義一個(gè)描述hid觸摸
    的頭像 發(fā)表于 10-29 10:55 ?3120次閱讀
    <b class='flag-5'>linux</b>內(nèi)核中通用HID觸摸<b class='flag-5'>驅(qū)動(dòng)</b>

    零基礎(chǔ)嵌入式開(kāi)發(fā)學(xué)習(xí)路線(xiàn)

    掌握,像是Java、python、C++等都是由C語(yǔ)言擴(kuò)充或者延伸而來(lái)的。C也可以用于開(kāi)發(fā)比較底層的東西,比如驅(qū)動(dòng)、通信協(xié)議之類(lèi),在Unix和Linux環(huán)境中也是不可或缺的。對(duì)于C語(yǔ)言的學(xué)習(xí)
    發(fā)表于 10-25 15:55