最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

小白該如何學(xué)習(xí)Linux驅(qū)動(dòng)開(kāi)發(fā)?建議學(xué)嗎?(大神告訴你經(jīng)驗(yàn)~)

2022-07-26 20:16 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

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é)少走一些彎路。

一、要知道將來(lái)要做什么?

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

我把linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)工作分為兩大類,一類是做BSP級(jí)的開(kāi)發(fā),另外一類是做外設(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ù)移植。有這樣需求的往往是芯片商或使用專用芯片的設(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總線上的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ā)的。

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

面向?qū)ο?,即OO思想,大家應(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),只是不太推薦這樣做。


文末有學(xué)習(xí)路線參考!

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書(shū)、實(shí)戰(zhàn)項(xiàng)目及代碼)? ? ?


三、從各驅(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的話,建議使用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)使用。

給大家推薦一下驅(qū)動(dòng)開(kāi)發(fā)轉(zhuǎn)內(nèi)核大神的學(xué)習(xí)路線

全方面系統(tǒng)全面的講解底層原理開(kāi)發(fā)技術(shù):

1、五大專題,共計(jì)150+個(gè)課時(shí)

2、20個(gè)實(shí)戰(zhàn)操作模塊,2w+代碼;

主要從

  • 進(jìn)程管理專題

  • 內(nèi)存管理專題

  • 網(wǎng)絡(luò)協(xié)議棧專題

  • 設(shè)備驅(qū)動(dòng)管理專題

  • 文件系統(tǒng)及內(nèi)核組件專題

全方面系統(tǒng)全面的講解底層原理開(kāi)發(fā)技術(shù):

最新Linux內(nèi)核大綱

進(jìn)程管理專題


內(nèi)存管理專題


網(wǎng)絡(luò)協(xié)議棧專題




設(shè)備驅(qū)動(dòng)管理專題




文件系統(tǒng)及內(nèi)核組件專題




項(xiàng)目實(shí)戰(zhàn)



適合于

  • 1.從事業(yè)務(wù)開(kāi)發(fā)多年,對(duì)底層原理理解不夠深入的在職工程師

  • 2. 從事嵌入式方向開(kāi)發(fā),想轉(zhuǎn)入互聯(lián)網(wǎng)開(kāi)發(fā)的在職工程師

  • 3. 從事Qt/MFC等桌面開(kāi)發(fā),薪資多年漲幅不大的在職工程師

  • 4. 從事非開(kāi)發(fā)崗位(算法崗,運(yùn)維崗,測(cè)試崗),想轉(zhuǎn)后臺(tái)開(kāi)發(fā)崗位的在職工程師

  • 5. 工作中技術(shù)沒(méi)有挑戰(zhàn),工作中接觸不到新技術(shù)的在職工程師

  • 6. 自己研究學(xué)習(xí)速度較慢,不能系統(tǒng)構(gòu)建知識(shí)體系的開(kāi)發(fā)人員

  • 7. 了解很多技術(shù)名詞,但是深入細(xì)問(wèn)又不理解的工程師

  • 8. 計(jì)算機(jī)相關(guān)專業(yè)想進(jìn)入大廠的在校生(本科及以上學(xué)歷,有c/c++基礎(chǔ))







等等


小白該如何學(xué)習(xí)Linux驅(qū)動(dòng)開(kāi)發(fā)?建議學(xué)嗎?(大神告訴你經(jīng)驗(yàn)~)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
宁都县| 保德县| 务川| 调兵山市| 清苑县| 仁怀市| 姚安县| 临洮县| 祁阳县| 云阳县| 秭归县| 元阳县| 拉萨市| 潢川县| 河池市| 重庆市| 利辛县| 丹凤县| 江孜县| 喀什市| 龙口市| 璧山县| 林西县| 鹿邑县| 将乐县| 犍为县| 天峨县| 云霄县| 会同县| 龙口市| 永平县| 镇宁| 修武县| 蒲城县| 河源市| 郓城县| 阜城县| 中超| 香河县| 长治市| 明水县|