色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話 > 如何玩轉(zhuǎn)linux驅(qū)動(dòng)

          如何玩轉(zhuǎn)linux驅(qū)動(dòng)

          作者:machinnneee 時(shí)間:2014-09-09 來(lái)源:電子產(chǎn)品世界 收藏

            說(shuō)玩轉(zhuǎn)這話,其實(shí)有點(diǎn)過(guò)頭,玩是個(gè)長(zhǎng)期積累的過(guò)程,寫(xiě)出來(lái)是一回事,調(diào)試起來(lái)也是一種磨練。為了讓大家明白玩的樂(lè)趣和掌握編寫(xiě)驅(qū)動(dòng)的捷徑,我分享一些經(jīng)驗(yàn),算是拋磚引玉。不過(guò)正所謂一口吃不了個(gè)胖子,只有寫(xiě)夠了足夠多的代碼,調(diào)試了足夠多的模塊,玩轉(zhuǎn)驅(qū)動(dòng)也不再話下。希望今天的嘮叨對(duì)想踏入或者即將踏入驅(qū)動(dòng)行業(yè)的你有些幫助。

          本文引用地址:http://cafeforensic.com/article/262706.htm

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

            我們很明白 設(shè)備驅(qū)動(dòng)的學(xué)習(xí)是一項(xiàng)浩大的工程,正是由于這個(gè)原因,一些人不免望而生畏,其實(shí),只要我們有足夠的積累和全面的知識(shí),玩轉(zhuǎn)驅(qū)動(dòng),也是早晚的事。閑話少說(shuō),開(kāi)始來(lái)干貨。

            對(duì)于驅(qū)動(dòng)工程師來(lái)說(shuō),首先要明白驅(qū)動(dòng)在整個(gè)系統(tǒng)中的作用,

            大家從上圖中可以看出,linux驅(qū)動(dòng)②在這個(gè)構(gòu)架中起到承上硬件①啟下應(yīng)用程序③的作用。在程序的編寫(xiě)中,我們常用高內(nèi)聚低耦合的標(biāo)準(zhǔn),因此,驅(qū)動(dòng)的引入顯得意義更加重大:一方面,使嵌入式應(yīng)用工程師不用考慮過(guò)多的硬件差異,另一方面,通過(guò)將設(shè)備驅(qū)動(dòng)融入內(nèi)核,面向操作系統(tǒng)內(nèi)核的接口,這樣的接口由操作系統(tǒng)規(guī)定,對(duì)一類設(shè)備而言結(jié)構(gòu)一致,獨(dú)立于具體的設(shè)備。同時(shí)由于linux操作系統(tǒng)有內(nèi)存管理和進(jìn)程管理,因此對(duì)于多任務(wù)并發(fā)的要求時(shí),操作系統(tǒng)和驅(qū)動(dòng)的引入使得任務(wù)變得簡(jiǎn)單。但是對(duì)于不需要多任務(wù)調(diào)度、文件系統(tǒng)、內(nèi)存管理等復(fù)雜功能時(shí),在一個(gè)大while(1)循環(huán)中既可以完成相關(guān)的任務(wù)。

            上面分析了驅(qū)動(dòng)的意義,那么,玩轉(zhuǎn)linux驅(qū)動(dòng)需要那方面的知識(shí)呢,現(xiàn)在羅列下:

            ? 第一、 驅(qū)動(dòng)工程師要有良好的硬件基礎(chǔ)。

            這個(gè)要求不言而喻,linux驅(qū)動(dòng)工程師的主要任務(wù)就是隱藏硬件的差異,給應(yīng)用工程師一個(gè)統(tǒng)一的接口,因此需要能看懂電路圖,理解、Flash、SDRAM、磁盤等模塊的讀寫(xiě)方式,知道UART、I2C、USB 等設(shè)備的接口以及常規(guī)操作,了解輪詢、中斷、DMA 的原理,PCI 總線的工作方式以及CPU 的內(nèi)存管理單元(MMU)等。不過(guò)對(duì)于這種常見(jiàn)的模塊,linux內(nèi)核中有相關(guān)的配置,因此需要有閱讀linux內(nèi)核的能力和修改linux內(nèi)核的能力。

            ? 第二 、驅(qū)動(dòng)工程師具有良好的C 語(yǔ)言基礎(chǔ)。

            作為一個(gè)面向硬件底層和應(yīng)用層的關(guān)鍵人物,C語(yǔ)言功底是必須要牢固的。在編寫(xiě)linux的字符設(shè)備和塊設(shè)備驅(qū)動(dòng)中常用的fopen()、fwrite()、fread()、fclose()以及內(nèi)存分配中經(jīng)常使用結(jié)構(gòu)體和指針。因此能靈活地運(yùn)用C 語(yǔ)言的結(jié)構(gòu)體、指針、函數(shù)指針及內(nèi)存動(dòng)態(tài)申請(qǐng)和釋放顯現(xiàn)的尤為重要。

            例如字符設(shè)備驅(qū)動(dòng)中的讀函數(shù)函數(shù)的定義

            /* 讀設(shè)備*/

            ssize_t xxx_read(struct file *filp, char _ _user *buf, size_t count,loff_t*f_pos)

            {

            ...

            copy_to_user(buf, ..., ...);

            ...

            }

            從中看出C語(yǔ)言功底的重要性。

            ?第三、 Linux 驅(qū)動(dòng)工程師具有一定的Linux 內(nèi)核基礎(chǔ),雖然并不要求工程師對(duì)內(nèi)核各個(gè)部分有深入的研究,但至少要了解設(shè)備驅(qū)動(dòng)與內(nèi)核的接口,尤其是對(duì)于塊設(shè)備、網(wǎng)絡(luò)設(shè)備、Flash設(shè)備、串口設(shè)備等復(fù)雜設(shè)備。

            現(xiàn)在工作起來(lái),嵌入式驅(qū)動(dòng)工程師的工作量相對(duì)會(huì)小一點(diǎn),因?yàn)橐话愠R?jiàn)的硬件設(shè)備供應(yīng)商都會(huì)提供相應(yīng)的linux版本驅(qū)動(dòng),驅(qū)動(dòng)工程師的任務(wù)就是調(diào)試這些驅(qū)動(dòng)能正常運(yùn)行在自己的系統(tǒng)中,同時(shí)保證系統(tǒng)的穩(wěn)定。

            ? 第四、 Linux 驅(qū)動(dòng)工程師具有良好的操作系統(tǒng)知識(shí)。

            這個(gè)要求對(duì)于沒(méi)有學(xué)習(xí)過(guò)操作系統(tǒng)的人來(lái)說(shuō)唯一的痛苦之處就是對(duì)于專有名詞不是很理解,例如上半部,下半部,原子操作等。其實(shí)剛開(kāi)始或許是個(gè)痛苦的過(guò)程,但是只要認(rèn)真的分析了一個(gè)或者幾個(gè)驅(qū)動(dòng)程序后,你就會(huì)發(fā)現(xiàn)其中的規(guī)律。畢竟linux驅(qū)動(dòng)大體分為字符設(shè)備驅(qū)動(dòng)、塊設(shè)備驅(qū)動(dòng)和網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)三類,正所謂抓其綱要,舉一反三,便可融會(huì)貫通。因此linux中多任務(wù)并發(fā)控制和同步等基礎(chǔ)很重要,因?yàn)樵谠O(shè)備驅(qū)動(dòng)中會(huì)大量使用自旋鎖、互斥、信號(hào)量、等待隊(duì)列等并發(fā)與同步機(jī)制。

            第五、動(dòng)手能力。

            紙上得來(lái)終覺(jué)淺,因此,看再多的書(shū)也沒(méi)有真正的調(diào)試一個(gè)驅(qū)動(dòng)來(lái)的認(rèn)識(shí)深刻。這時(shí)你需要搭建宿主機(jī)平臺(tái),購(gòu)買開(kāi)發(fā)板。不要好大喜功,從簡(jiǎn)單的小驅(qū)動(dòng)開(kāi)始一步一步走,以螞蟻啃骨頭的精神進(jìn)行學(xué)習(xí),收獲會(huì)很大。

            經(jīng)歷了痛苦的折磨,現(xiàn)在看下嵌入式驅(qū)動(dòng)工程師的甜蜜吧,工作個(gè)三五年,你已經(jīng)是大師了,可以去招聘網(wǎng)站瀏覽下,這方面的待遇都是面議獎(jiǎng)金都是大大的,紅色票票也隨心所愿了。想到這些,你還不下定決心來(lái)經(jīng)受linux驅(qū)動(dòng)的虐待,相信只要以“驅(qū)動(dòng)虐我千百遍,我待驅(qū)動(dòng)如初戀”的決心,相信你可以玩轉(zhuǎn)linux驅(qū)動(dòng)。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          c語(yǔ)言相關(guān)文章:c語(yǔ)言教程


          linux相關(guān)文章:linux教程




          關(guān)鍵詞: Linux 驅(qū)動(dòng) SRAM

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉