驅動程式學習筆記

2021-06-21 10:32:55 字數 1414 閱讀 2877

什麼是驅動程式

驅動程式就是使硬體工作的一種特殊軟體,它執行在作業系統的核心空間(虛擬位址0xc0000000到0xffffffff),封裝硬體細節,服務於系統呼叫。

驅動程式和應用程式的區別

1.應用程式執行在使用者空間,驅動程式執行在核心空間。

2.應用程式可使用標準的庫函式,而驅動程式連線到核心,只能使用核心匯出的符號和函式。

3.應用程式錯誤,一般只會殺死程序,而驅動程式錯誤,會造成系統不穩定,或者崩潰。

4.應用程式擁有很大的棧空間,而核心棧很小,一般只有4kb。

5.驅動程式類似事件驅動程式設計,它初始化時候,註冊一些設施,服務於系統呼叫。

驅動程式是這樣被使用的

1.應用程式使用標準庫提供的open函式,開啟dev目錄下的裝置檔案。

2.庫函式根據引數,執行軟體中斷指令,引起cpu異常,從而進入核心模式。

3.核心異常處理函式,根據引數找到相應的驅動程式,並返回乙個檔案控制代碼給應用程式。

4.應用程式使用檔案控制代碼,操作相應的裝置,執行read和write等函式。

驅動程式的編寫流程

1.檢視原理圖、資料手冊,了解裝置引數和操作裝置的方法。

2.以核心相近的驅動為模板,進行開發。

3.實現驅動的初始化函式:申請裝置號、初始化裝置結構、申請中斷號並註冊中斷處理函式、最後使用申請到的裝置號連同file_oprations結構一併向核心註冊。

4.實現file_oprations結構中的函式和中斷服務函式。

5.將驅動程式編譯進核心或者動態載入。

中斷的體系與結構:核心對所有中斷進行統一的編號,使用中斷描述符irq_desc描述中斷的名稱、狀態、標記底層中斷管理函式。使用者靜態或者動態申請中斷號時,request_irq根據中斷號找到中斷描述符irq_desc陣列項,在它的action鍊錶中新增中斷處理函式。

中斷的處理流程

1.硬體中斷發生時,cpu跳轉到中斷向量。

2.中斷向量,讀取中斷控制器計算中斷號,當引數呼叫中斷總入口函式asm_do_irq

3.asm_do_irq根據中斷號找到對應的irq_desc結構

4.從而逐個呼叫使用者申請中斷號時候,在action中註冊的中斷處理函式。

併發解決機制:訊號量、自旋鎖、原子變數、迴圈緩衝區。

避免死鎖:擁有鎖的**不能休眠;當需要多個鎖的時候,以同樣地順序去獲取。

驅動程式的識別

1.平台裝置platform_device結構描述裝置的名稱,id,占用的埠與記憶體。核心初始化階段,將bsp裡的平台裝置新增到系統的裝置鍊錶。

2.平台驅動platform_driver結構描述操作裝置的函式。它和平台裝置通過裝置名字進行比配。

io埠和io記憶體

它們和普通記憶體相同點是通過位址匯流排和資料匯流排,進行訪問和資料的傳輸;不同點是io埠和io記憶體有邊際效應,通過使用記憶體屏障函式來防止,指令被重新排序。

裝置驅動程式學習筆記(1)

1.主從裝置號是用乙個32位的整數 dev t 來表示,這個整數的高12位表示主裝置號,後面20位表示從裝置號,核心定義了一些巨集來轉換 define minorbits20 define major dev unsigned int dev minorbits define minor dev u...

筆記 裝置驅動程式

驅動程式一般指的是裝置驅動程式 device driver 是一種可以使 計算機和裝置通訊的特殊程式。相當於 硬體的介面,作業系統只有通過這個介面,才能控制 硬體裝置的工作,假如某裝置的驅動程式未能正確安裝,便不能正常工作。因此,驅動程式被比作 硬體的靈魂 硬體的主宰 和 硬體和系統之間的橋梁 等。...

Linux裝置驅動程式學習筆記1

系統linux2.6.32.2 arm linux gcc 4.3.2 hello world模組 include include static int hello init void static void hello exit void module init hello init module...