久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 學習資源 > 講師博文 > 什么是驅動程序?

什么是驅動程序? 時間:2024-05-08      來源:華清遠見

# 一、什么是驅動程序?

驅動程序全稱:計算機外部設備驅動程序,不同于其它有始有終的程序,它是針對某個具體外設而編寫的一系列操作函數的集合。
 一般的應用程序都是從某固定入口處開始執行,而當到達某些位置代碼時結束運行。驅動程序不同,沒有開始和結束,不是總體順序執行的完整程序流,它只是針對某具體設備而編寫的各種操作函數集,對設備的操作常見的有:

  1. 初始化:為后續設備操作做好預備工作,是對設備操作的第一個函數,使用設備前必須首先調用該函數

  2. 結束化:當設備不再需要被使用時,調用該操作函數完成一些初始化操作過程中的反動作
 
  3. 讀數據:通過調用該函數可以讀取具有輸入功能的外設硬件產生的數據

  4. 寫數據:通過調用該函數可以將一些數據傳輸給具有輸出功能的外設進行展示

  5. 獲取外設某屬性值:功能不同的外設具備不同的屬性,應用程序通過調用該函數可以獲取想要的外設屬性值

  6. 修改外設某屬性值:有些外設屬性是可以修改,通過修改這些屬性可以改變外設的一些行為

  7. 對外設的一些控制操作:有些外設工作過程中可以被控制它的開關、轉動、移動

  8. 通訊外設的數據傳輸:一些特殊外設可以用于CPU與外設間、計算機間相互通訊,需要為其開發傳輸數據的函數

  9. 休眠:計算機休眠時,通過調用此函數可以配合系統節省功耗

  10. 喚醒:計算機從休眠狀態被喚醒時,通過調用此函數可以恢復外設的正常工作狀態

  11. 中斷處理:占用中斷源的外設,需要針對此中斷源編寫中斷處理函數,在此中斷源觸發中斷通知時調用此函數處理出現的狀況。

根據外設的功能特點,不同的外設需要編寫不同的操作函數,簡單的外設需要編寫的操作函數比較少,復雜的外設需要編寫的操作函數比較多。

各種外設的操作函數實現依賴于硬件,主要包括外設工作原理、電路實現和芯片手冊。

 所有外設操作函數都是提供給應用程序員開發各種應用功能使用,因此驅動程序員不直接對計算機產品用戶負責,他們的客戶是應用程序員。如果沒有驅動程序的配合,應用程序中用到某種外設,就需要應用程序員去研究這種外設的硬件原理,這就提高了應用程序的開發難度,同時也對應用程序員提出了更高的技能要求。而有了驅動程序的配合,應用程序員只需學會調用各種外設操作函數,將外設功能揉合進應用邏輯,而無需關注外設的任何硬件實現細節!!!

# 二、驅動程序分類

驅動程序主要分為兩大類:

1. 裸機驅動:單純的各種外設操作函數集,驅動程序員可以自行設計操作函數。現代計算機中,處理器芯片的設計商、生產商為了方便在驅動程序中更為簡易地運用外設功能涉及的各種片內、片外資源,他們會為芯片提供一套基礎庫函數(例如:STM32的標準外設函數庫、HAL庫、LL庫等),一定程度上降低了驅動開發難度、減輕了驅動程序員的工作負擔。但不管如何,作為任何計算機軟件系統的基礎設施,驅動程序開發無疑是基礎的、關鍵的、不可避免的開發任務!!!

 2. 基于某種框架的驅動:一些復雜的裸機程序(例如:操作系統內核),對其中包含的各種外設驅動程序有著統一的規劃,包括:約定統一的操作函數原型(即返回值、形參已經確定,程序員不可自行設計)、統一的驅動程序組織框架、規定驅動程序中必須處理的各種特殊要求。這些復雜裸機程序的開發、移植工作中,設備驅動程序的設計和開發是基礎的、關鍵的、不可避免的工作任務!!!

# 三、開發驅動對程序員的技能要求

不管開發哪一種設備驅動,程序員都必須具備如下能力:

1. 精通C語言、數據結構編程基礎知識

2. 熟悉計算機工作原理

 3. 能看懂各種外設的電路原理圖

  4. 會查閱各種芯片手冊

開發基于某種框架的驅動,還需要程序員:

1. 熟悉框架隸屬裸機程序的代碼架構

2. 熟悉驅動框架的運作原理
對于一些復雜的設備驅動,程序員還需要研究:
1. 通訊外設的通訊特點、時序、物理協議

 2. 通訊外設的協議棧架構(例如:以太網卡上的TCP/IP協議棧、藍牙的Bluez等等)

 3. 外存設備上常用的文件系統

# 四、什么是Linux驅動?

 所謂Linux驅動是指基于Linux內核源碼提供的各種驅動框架上的外設驅動。Linux內核按應用程序與設備的數據交互方式,將外設分為三類:

1. 字符設備:應用程序與設備按字節流形式進行數據交互。大部分字符設備的數據只能順序訪問。

應用程序通過調用設備操作函數對應的系統調用函數將設備功能融于應用邏輯。Linux為了方便應用程序員使用字符設備功能,創造性的為每個字符設備專門設計了一類特殊文件——字符設備文件,將字符設備使用接口與文件訪問接口統一為一套接口,大大減輕了應用程序員學習多種接口的負擔!!!

2. 塊設備:應用程序與設備以塊為單位進行數據交互。塊的大小必須為扇區的整數倍。

 塊設備的操作函數主要為各種文件系統服務。并且Linux也創造性的每個塊設備以及塊設備上的每個分區專門設計了一類特殊文件——塊設備文件

3. 網絡設備:應用程序與網絡設備通過協議棧進行數據交互。

 Linux為這三類設備設計了各自的驅動框架、規定了各自可能需要實現的設備操作函數。雖然框架有所區別,但它們的工作原理、設計思想具有相當的共通性,學會一種再學另兩種會事半功倍。

 Linux內核的設計思想是單內核思想,即操作系統內核所有相關功能代碼融合在同一裸機程序中,從功能擴展的便利上看有天然缺陷,Linux內核為了解決擴展性差的毛病參照支持插件的應用程序設計了自己的插件——內核模塊。Linux驅動程序代碼就是以內核模塊的形式進行開發。

 Linux內核中大量運用面向對象的思想,驅動框架中也到處可見,因此熟悉面向對象的程序員掌握Linux驅動開發具備一定的優勢。

 Linux內核從v2.6開始,為了減輕驅動開發的工作量,設計了全新的總線式驅動框架,將驅動程序的邏輯代碼與來自電路原理圖和芯片手冊的設備資源分離,甚至從3.0開始針對ARM處理器進一步引進設備樹來承載設備資源。

# 五、Linux驅動開發必須學會的接口

開發Linux驅動的過程中可以調用內核提供的一些現成接口來處理對應的情況,有些接口被設計成兩種形式:阻塞型和非阻塞型,程序員需要注意合理選用。裸機程序具有三種性質代碼:

1. 主程代碼負責裸機程序的主體功能

2. 異常處理代碼負責檢測錯誤和處理通知

3. 任務代碼:操作系統之上的應用程序采用進程和線程組織代碼,多線程采用時間片輪轉機制輪流占用CPU執行代碼,線程可以進入睡眠狀態(或稱阻塞狀態)等待所需的資源就位。

Linux驅動代碼中設備操作函數被應用程序調用,成為應用程序某線程執行過程中的一段,因此可以通過調用阻塞型函數讓隸屬線程進入睡眠。但是驅動代碼中還有一些函數是為異常處理服務的,最為典型是中斷處理函數,這些函數中不可以調用阻塞型函數,原因很顯然,異常處理代碼無法進入睡眠狀態等待資源就位。因此驅動程序使用內核其它源碼提供的現成接口時必須要區分清楚代碼上下文,以便選擇正確的接口形式。

這些接口包括:

1. 并發控制接口:處理由于共享資源可能導致的競態情形,例如:信號量、互斥鎖、自旋鎖、原子變量等等

2. 延時接口

3. 定時接口

4. 內存管理接口,包括動態分配、內存映射等等

5. 中斷下半部機制接口

6. 用戶空間數據訪問接口

7. 各種硬件資源使用接口,例如: 中斷源、GPIO、DMA、外設寄存器、設備樹等等

8. 驅動框架配套接口

9. IO模式支持接口,包括:阻塞、多路復用、信號驅動、異步IO等

10. 類C庫接口,例如:字符串處理、內存塊操作、鏈表等等

# 六、學習Linux驅動開發的一些個人建議

由于嵌入式軟件開發人員的稀缺,尤其是成熟的驅動工程師更是各大廠商競相爭搶的高端人才,因此薪水是比較可觀的,驅動開發毫不客氣地說絕對是高薪水的技能擔當,也是嵌入式軟件開發的核心技能。社會是現實的,高薪水同時也意味著高的技能要求,顯然驅動開發是具備一定難度的,下面個人給想要學習驅動開發的童鞋一些建議:

1. 首先扎根編程基礎,C語言和數據結構一定一定要精通,這關沒有信心過的童鞋趁早與軟件開發行業說Bye Bye!

  2. 驅動程序由于不是完整程序,它的驗證需要通過編寫應用程序進行,因此驅動程序員一定是一名合格的應用程序員,學習驅動首先學會應用開發!

  3. 想要入手Linux驅動,好奇心的保持需要掌握好一個度,否則容易陷入Linux內核源碼的汪洋大海,先從一些簡單的設備驅動開始,掌握好驅動框架和常用接口先,至于它們的實現原理留待以后慢慢研究。

  4. 驅動程序開發很多時候工作任務并不在代碼,而是在外設原理、電路原理圖、芯片手冊的查閱研究上,實際上常見外設的驅動代碼被人開發或移植過很多遍了,所以研讀不同外設的驅動程序是一種很好的學習手段,在新的硬件平臺上我們要做的是修改驅動代碼中用到的硬件資源。因此,驅動開發主要難度在首次,此后稱為驅動移植更為合適!!!

  5. 對于復雜外設,求深度,不能貪多,一兩年專注一個去研究更容易成功!!!

  6. 對于簡單外設,求廣度,多去接觸功能不同的外設!!!

 

上一篇:人工智能的神經網絡方向怎么入門?

下一篇:嵌入式開發常用的軟件架構

戳我查看嵌入式每月就業風云榜

點我了解華清遠見高校學霸學習秘籍

猜你關心企業是如何評價華清學員的

干貨分享
相關新聞
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2024 北京華清遠見科技發展有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部