在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

Linux設備驅動開發(fā)的基本知識

Wildesbeast ? 來源:今日頭條 ? 作者:嵌入式在左C語言在 ? 2020-02-24 15:03 ? 次閱讀

本篇文章將介紹Linux設備驅動開發(fā)的基本知識,帶你快速撥開Linux驅動這團迷霧。文章分為如下3個小節(jié)進行講解:

1、設備驅動的概念和作用;

2、在無操作系統(tǒng)和有操作系統(tǒng)的情況下設備驅動的設計開發(fā);

3、Linux設備驅動的重點、難點和學習方法。

文章最后會給出一個簡單的LED驅動在無操作系統(tǒng)和Linux操作系統(tǒng)下的實現(xiàn)示例。

好,Let's go

1、設備驅動的概念和作用

大家都知道在Linux開發(fā)中是一個分層的思想,也就是說應用層、操作系統(tǒng)層、驅動層和硬件層分別獨立,然后為上一層提供API接口。對設備驅動通俗一點的解釋就是:驅使硬件設備行動。驅動與底層硬件直接打交道,按照硬件設備的具體工作方式,讀寫其寄存器,完成設備輪詢、中斷處理和DMA通信等。設備驅動實際上充當了硬件和應用軟件之間的紐帶,在系統(tǒng)沒有操作系統(tǒng)的情況下工程師可以根據(jù)硬件設備的特點自行定義接口,如對串口定義SerialSend()、SerialReceive(),對繼電器定義RelayOn()、RelayOff()等。而在有操作系統(tǒng)的情況下,驅動的架構則由操作系統(tǒng)定義,因為驅動架構也屬于操作系統(tǒng)內(nèi)核的一部分,驅動工程師必須按照相應的架構設計驅動,這樣的話驅動才能融入操作系統(tǒng)內(nèi)核中,并正常運行。

2、在無操作系統(tǒng)和有操作系統(tǒng)的情況下設備驅動的設計開發(fā)

2.1、無操作系統(tǒng)的情況下

事實上,在許多情況下我們的程序也運行在無操作系統(tǒng)的環(huán)境中(裸機程序),因為對于那些功能比較單一、控制并不復雜的系統(tǒng)不需要多任務調(diào)度和文件系統(tǒng)等復雜的功能,用單任務架構完全可以很好的實現(xiàn)我們的需求,也就是在一個無限循環(huán)(單片機編程中的while(1)死循環(huán))中夾雜著對設備中斷的檢測或者對設備的輪詢。這一部分的知識相信有過單片機編程經(jīng)驗的朋友一定非常熟悉了,下面是這種單任務軟件的架構:

主函數(shù)

在這樣的系統(tǒng)中,雖然不存在操作系統(tǒng),但是設備驅動必須存在。一般情況下每一種設備驅動都會定義成一個軟件模塊,包含.c文件和.h文件。

2.2、有操作系統(tǒng)的情況下

當包含操作系統(tǒng)時,我們還需要將驅動融入內(nèi)核,為了實現(xiàn)這種融合,必須在所有設備的驅動中設計提供給操作系統(tǒng)內(nèi)核的接口,這類接口由操作系統(tǒng)規(guī)定(這是一個復雜的過程,在后續(xù)更新的文章中會由淺及深的說明)。所以,存在操作系統(tǒng)的時候,驅動便成為了連接硬件和Linux內(nèi)核的橋梁。當設備成功注冊到系統(tǒng)中,也就是讓系統(tǒng)知道了我們需要使用的設備的存在之后,Linux會將設備映射到文件系統(tǒng)的文件和目錄中,然后通過系統(tǒng)調(diào)用的接口open()、write()、read()、close()等即可訪問我們的設備。

3、Linux設備驅動的重點、難點和學習方法

Linux設備驅動的學習是一項浩繁和長久的過程,其中包含了如下重點和難點:

1、編寫Linux設備驅動要求工程師有一定的硬件基礎;

2、編寫Linux設備驅動要求工程師有非常好的C語言基礎,能靈活的運用C語言的結構體、指針以及內(nèi)存動態(tài)申請和釋放等;

3、編寫Linux設備驅動要求工程師有一定的Linux內(nèi)核基礎,并不要求對內(nèi)核的各個部分有深入的研究,但至少我們要明白驅動程序與內(nèi)核的接口;

4、編寫Linux設備驅動要求工程師有多任務并發(fā)控制和同步的基礎,因為在驅動中會大量的使用自旋鎖、互斥、信號量和等待隊列等并發(fā)與同步機制。

看到這里,相信你已經(jīng)對Linux設備驅動有了基本的認識,首先我們要明白,Linux驅動程序是門檻最高難度最大的一部分,當然薪資也是相對最高的,所以只要我們掌握了方法堅持學習下去,一定可以撥開這團迷霧看見陽光。筆者會定期更新關于嵌入式Linux和C語言在開發(fā)和學習中的經(jīng)驗和技巧。歡迎關注!

文章的最后,給出LED驅動在無操作系統(tǒng)和Linux操作系統(tǒng)下的實現(xiàn)示例,以供大家作以比較。LED一般直接由CPU的GPIO口控制,GPIO一般由兩組寄存器控制,即一組控制寄存器和一組數(shù)據(jù)寄存器。控制寄存器可設置GPIO口的工作方式為輸入或輸出。當引腳被設置為輸出時,向數(shù)據(jù)寄存器的對應位寫入1和0分別在引腳上產(chǎn)生高電平和低電平;當引腳設置為輸入時,讀取數(shù)據(jù)寄存器的對應位可獲得引腳上的電平高低。

在無操作系統(tǒng)時的LED驅動如下:

上述程序中的LedInit()、LedOn()、LedOff()都直接作為驅動提供給應用程序使用。

在Linux下,我們使用字符設備驅動的框架來編寫對應于上圖中的LED驅動程序,為了遵循Linux編程的命名習慣,重新將其命名為led_init()、led_on()、led_off(),注意:你現(xiàn)在并不需要能夠讀懂下圖中的這些代碼,我在后續(xù)的文章更新中會繼續(xù)講解說明。

Linux操作系統(tǒng)下的LED驅動程序:

在這里,我們只需要有一個感性的認識即可,那就是上圖中陌生的結構和元素都是Linux內(nèi)核為設備定義的,在后面的學習中,我們只需要會使用即可(都是套路)。

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

    關注

    242

    文章

    23384

    瀏覽量

    663522
  • Linux
    +關注

    關注

    87

    文章

    11351

    瀏覽量

    210497
  • API
    API
    +關注

    關注

    2

    文章

    1518

    瀏覽量

    62448
收藏 人收藏

    評論

    相關推薦

    Linux驅動開發(fā):字符設備驅動開發(fā)理論

    大部分學習者的最終目的就是學習 Linux驅動開發(fā)Linux中的外設驅動可以分為:字符設備
    發(fā)表于 10-26 09:53 ?1184次閱讀

    Linux設備驅動開發(fā)詳解

    #《Linux設備驅動開發(fā)詳解》電子書連載#第5章 Linux文件系統(tǒng)與設備文件系統(tǒng),由于字符
    發(fā)表于 06-06 11:28

    嵌入式Linux設備驅動開發(fā)

    嵌入式Linux設備驅動開發(fā) Linux 設備驅動
    發(fā)表于 09-10 13:10 ?82次下載
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>

    Linux設備驅動開發(fā)入門

    本文以快捷而簡單的方式講解如何像一個內(nèi)核開發(fā)者那樣開發(fā)linux設備驅動. 要開發(fā)
    發(fā)表于 03-19 14:57 ?600次下載

    Linux設備驅動開發(fā)詳解》第23章、Linux設備驅動的移植

    Linux設備驅動開發(fā)詳解》第23章、Linux設備驅動
    發(fā)表于 10-27 10:58 ?9次下載
    《<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>詳解》第23章、<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b>的移植

    Linux設備驅動開發(fā)詳解》第17章、Linux音頻設備驅動

    Linux設備驅動開發(fā)詳解》第17章、Linux音頻設備
    發(fā)表于 10-27 11:14 ?17次下載
    《<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>詳解》第17章、<b class='flag-5'>Linux</b>音頻<b class='flag-5'>設備</b><b class='flag-5'>驅動</b>

    Linux設備驅動開發(fā)詳解》第16章、Linux網(wǎng)絡設備驅動

    Linux設備驅動開發(fā)詳解》第16章、Linux網(wǎng)絡設備
    發(fā)表于 10-27 11:17 ?5次下載
    《<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>詳解》第16章、<b class='flag-5'>Linux</b>網(wǎng)絡<b class='flag-5'>設備</b><b class='flag-5'>驅動</b>

    Linux設備驅動開發(fā)詳解》第14章、Linux終端設備驅動

    Linux設備驅動開發(fā)詳解》第14章、Linux終端設備
    發(fā)表于 10-27 11:22 ?8次下載
    《<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>詳解》第14章、<b class='flag-5'>Linux</b>終端<b class='flag-5'>設備</b><b class='flag-5'>驅動</b>

    Linux設備驅動開發(fā)詳解》第13章、Linux設備驅動

    Linux設備驅動開發(fā)詳解》第13章、Linux設備驅動
    發(fā)表于 10-27 11:24 ?18次下載
    《<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>詳解》第13章、<b class='flag-5'>Linux</b>塊<b class='flag-5'>設備</b><b class='flag-5'>驅動</b>

    Linux設備驅動開發(fā)詳解》第9章、Linux設備驅動中的異步通知與異步IO

    Linux設備驅動開發(fā)詳解》第9章、Linux設備驅動
    發(fā)表于 10-27 11:33 ?0次下載
    《<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>詳解》第9章、<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b>中的異步通知與異步IO

    Linux設備驅動開發(fā)詳解》第8章、Linux設備驅動中的阻塞與非阻塞IO

    Linux設備驅動開發(fā)詳解》第8章、Linux設備驅動
    發(fā)表于 10-27 11:35 ?9次下載
    《<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>詳解》第8章、<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b>中的阻塞與非阻塞IO

    Linux設備驅動開發(fā)詳解》第7章、Linux設備驅動中的并發(fā)控制

    Linux設備驅動開發(fā)詳解》第7章、Linux設備驅動
    發(fā)表于 10-27 11:37 ?10次下載
    《<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>詳解》第7章、<b class='flag-5'>Linux</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b>中的并發(fā)控制

    嵌入式Linux設備驅動程序開發(fā)基礎知識總結免費下載

    本文檔的主要內(nèi)容詳細介紹的是嵌入式Linux設備驅動程序開發(fā)基礎知識總結免費下載 嵌入式Linux
    發(fā)表于 10-23 16:10 ?13次下載

    Linux用戶態(tài)開發(fā)驅動教程及基礎知識

    Linux用戶態(tài)開發(fā)驅動教程及基礎知識
    發(fā)表于 07-14 10:06 ?7次下載

    Linux設備驅動開發(fā)詳解

    Linux設備驅動開發(fā)詳解
    發(fā)表于 10-28 11:03 ?52次下載
    主站蜘蛛池模板: 欧美黄色性 | 天天摸天天添人人澡 | 91大神网址 | 很狠操 | 最新黄色地址 | 色综合小说天天综合网 | 77788色淫免费网站视频 | 日本黄色三级视频 | 亚洲精品视频网 | 人人插人人爽 | 午夜在线播放视频在线观看视频 | 国产性videostv另类极品 | 18视频网站在线观看 | 欧美男女交性过程视频 | 色婷婷六月 | 欧美成人午夜精品一区二区 | 三级在线观看视频网站 | 在线观看s色 | 性欧美bbbbbb| 久久国产伦三级理电影 | 亚洲欧美日韩高清mmm777 | 202z国产高清日本在线播放 | 亚洲一区二区三区麻豆 | 久草视频这里只有精品 | 毛片在线不卡 | 亚洲国产精品久久婷婷 | 又粗又大撑满了好爽 | 欧美性猛交xxxx免费看久久 | 拍拍拍成人免费高清视频 | 四虎sihu新版影院亚洲精品 | 国产美女动态免费视频 | 大杳蕉伊人狼人久久一本线 | 国内色综合精品视频在线 | 91大神在线精品视频一区 | 四虎影院国产 | 视频亚洲一区 | 午夜性爽快 | 久热中文字幕在线精品免费 | 四虎影视大全免费入口 | 香蕉黄色网| a级毛片免费观看网站 |