91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

涼白不開 ? 來源:涼白不開 ? 作者:涼白不開 ? 2022-04-22 09:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

01要知道將來要做什么

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

審核編輯:湯梓紅

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

    關(guān)注

    88

    文章

    11772

    瀏覽量

    219136
  • 驅(qū)動開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    140

    瀏覽量

    12677
  • 驅(qū)動框架
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    從架構(gòu)到驅(qū)動:這三本經(jīng)典書,承包了我的嵌入式Linux入門與進階

    私房菜(基礎(chǔ)學(xué)習(xí)篇 第四版)》《Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)》,這三本書恰好構(gòu)成了從 “底層架構(gòu)” 到 “系統(tǒng)基礎(chǔ)” 再到 “驅(qū)動
    的頭像 發(fā)表于 02-09 17:02 ?1184次閱讀

    迅為iTOP-Hi3516開發(fā)驅(qū)動開發(fā)資料全面上線,構(gòu)建從入門到精通的完整學(xué)習(xí)路徑!

    迅為iTOP-Hi3516開發(fā)linux驅(qū)動開發(fā)資料全面上線,構(gòu)建從入門到精通的完整學(xué)習(xí)路徑!
    的頭像 發(fā)表于 12-19 15:47 ?664次閱讀
    迅為iTOP-Hi3516<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>資料全面上線,構(gòu)建從入門到精通的完整<b class='flag-5'>學(xué)習(xí)</b>路徑!

    迅為Hi3403開發(fā)驅(qū)動教程全面上線,開啟嵌入式Linux開發(fā)新篇章!

    迅為iTOP-Hi3403開發(fā)linux驅(qū)動教程全面上線,開啟嵌入式Linux開發(fā)新篇章!
    的頭像 發(fā)表于 12-18 14:23 ?705次閱讀
    迅為Hi3403<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>驅(qū)動</b>教程全面上線,開啟嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)</b>新篇章!

    Linux驅(qū)動開發(fā)的必備知識

    、內(nèi)核模塊編程: 掌握內(nèi)核模塊的編寫、編譯、加載和卸載方法。 了解內(nèi)核模塊的初始化和清理函數(shù)的編寫。 5、設(shè)備驅(qū)動框架: 熟悉字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備等驅(qū)動框架。 能夠根據(jù)不同的設(shè)備類型選擇合適
    發(fā)表于 12-04 07:58

    迅為iTOP-3568開發(fā)板?Linux驅(qū)動開發(fā)實戰(zhàn):menuconfig圖形化配置實驗

    迅為iTOP-3568開發(fā)板?Linux驅(qū)動開發(fā)實戰(zhàn):menuconfig圖形化配置實驗
    的頭像 發(fā)表于 11-24 15:29 ?793次閱讀
    迅為iTOP-3568<b class='flag-5'>開發(fā)</b>板?<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>實戰(zhàn):menuconfig圖形化配置實驗

    【免費送書】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)》

    Linux系統(tǒng)的設(shè)備驅(qū)動開發(fā),一直給人門檻較高的印象,主要因內(nèi)核機制抽象、需深度理解硬件原理、開發(fā)調(diào)試難度大所致。2021年,一本講解驅(qū)動
    的頭像 發(fā)表于 11-18 08:06 ?1505次閱讀
    【免費送書】成為硬核<b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)</b>者:《<b class='flag-5'>Linux</b> 設(shè)備<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>(第 2 版)》

    【書籍評測活動NO.67】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)》

    ,助力讀者學(xué)習(xí)后能獨立完成驅(qū)動程序開發(fā)。結(jié)語在當(dāng)前人工智能與物聯(lián)網(wǎng)緊密結(jié)合的AIoT時代,各類傳感器、可穿戴設(shè)備要在低功耗狀態(tài)下承載智能計算,高效的驅(qū)動程序是關(guān)鍵環(huán)節(jié)?!?/div>
    發(fā)表于 11-17 17:52

    迅為3568開發(fā)板從零學(xué)習(xí)Linux驅(qū)動開發(fā):迅為一站式資料包如何讓我效率翻倍

    迅為3568開發(fā)板從零學(xué)習(xí)Linux驅(qū)動開發(fā):迅為一站式資料包如何讓我效率翻倍
    的頭像 發(fā)表于 11-05 11:16 ?422次閱讀
    迅為3568<b class='flag-5'>開發(fā)</b>板從零<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>:迅為一站式資料包如何讓我效率翻倍

    【北京迅為】itop-3568開發(fā)驅(qū)動開發(fā)指南(重制版)

    iTOP-RK3568開發(fā)驅(qū)動開發(fā)指南目錄:前言學(xué)習(xí)方法Linux驅(qū)動基礎(chǔ)第 1 章 你好!內(nèi)
    發(fā)表于 10-30 15:48 ?38次下載

    RK3506開發(fā)Linux開發(fā)板極致性價比之選

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

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

    是 Yocto 項目的一個重要組成部分,它提供了一套完整的參考發(fā)行版,方便開發(fā)者快速構(gòu)建和定制嵌入式 Linux 系統(tǒng)。通過學(xué)習(xí)這部分內(nèi)容,我了解了 Poky 的使用方法和定制技巧,
    發(fā)表于 08-04 22:29

    ARM入門學(xué)習(xí)方法分享

    。 以下是一些入門學(xué)習(xí)方法的分享: 一、 理解基本概念:首先,了解ARM是什么以及它的基本概念是很重要的。ARM(Advanced RISC Machines)指的是一種精簡指令集計算機(RISC
    發(fā)表于 07-23 10:21

    Linux開發(fā)板調(diào)屏方法,實戰(zhàn)經(jīng)驗讓您少走彎路

    本文介紹Linux系統(tǒng)調(diào)試屏幕過程中檢查屏幕狀態(tài)及信息的方法。如:驅(qū)動、屏幕連接、分辨率、色彩等狀態(tài)?;谟|覺智能RK3562開發(fā)板演示,搭載4核A53處理器,主頻高達(dá)2.0GHz;內(nèi)
    的頭像 發(fā)表于 06-06 18:13 ?788次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)</b>板調(diào)屏<b class='flag-5'>方法</b>,實戰(zhàn)經(jīng)驗讓您少走彎路

    第一章 W55MH32 高性能以太網(wǎng)單片機的學(xué)習(xí)方法概述

    本章介紹W55MH32的學(xué)習(xí)方法,建議先了解硬件資源,按基礎(chǔ)篇、入門篇循序漸進學(xué)習(xí)。參考兩份手冊,提供例程資料,還給出官網(wǎng)、github 等學(xué)習(xí)資料查找渠道。讓我們一起踏上W55MH32高性能以太網(wǎng)單片機的
    的頭像 發(fā)表于 05-26 09:07 ?904次閱讀
    第一章 W55MH32 高性能以太網(wǎng)單片機的<b class='flag-5'>學(xué)習(xí)方法</b>概述

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

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