簡單的驅動程式分析

2021-08-19 11:47:29 字數 1169 閱讀 4413

一、底層led驅動程式

最簡單的驅動框架:

1.首先先要實現led_open(),led_write(),led_read(),這幾個函式,上層應用程式呼叫時進行哪些對應的操作。

2.上面幾個函式如何告訴給核心,之前說過驅動屬於核心的一部分,需一起使用。核心系統呼叫時最後會呼叫相應的驅動程式,所以實現這幾個函式後,需要註冊到核心裡去。

怎麼註冊??

核心中有乙個結構體file_operations,定義乙個該型別的結構體,然後填充需要使用到的介面,然後使用register_chrdev()註冊到核心。核心中file_operations結構體如下:應用程式有什麼介面可呼叫,file_operations中就有與之對應的成員。

由於有很多不同的驅動裝置,所在註冊時需自己定義乙個函式修飾下註冊函式以區分開,一般叫驅動入口函式。例如本例是int first_drv_init(void),向核心安裝驅動時,直接呼叫module_init(first_drv_init);

安裝驅動時module定義乙個結構體,該結構體中有乙個函式指標,指向first_drv_init,安裝時,核心自動找到該結構體,並呼叫函式指標,執行驅動入口函式,將static struct file_operations first_drv_fops結構體告訴核心。

再來具體說下驅動註冊函式: register_chrdev(major, "first_dev", &first_drv_fops);

major:主裝置號

"first_dev":驅動名字

&first_drv_fops:填充的file_operations結構體

主裝置號在這裡很重要,核心中會專門儲存不同主裝置號對應的裝置結構體,呼叫 register_chrdev()時,把填充的file_operations結構體放到核心中與major對應的位置。

vfs層根據裝置型別和主裝置號找到對應的file_operations結構體,呼叫已經實現了的驅動函式。

USB驅動程式分析

1.對於每個pc來說,都有乙個或者多個稱為主機 host 控制器的裝置,該主機控制器和乙個根集線器 hub 作為乙個整體。2.每個host控制器其實就是乙個pci裝置,掛載在pci匯流排上。驅動開發人員應該給host控制器提供驅動程式,用usb hcd結構體表示。3.usb host控制器都會自帶乙...

Linux網絡卡驅動程式分析

學習應該是乙個先把問題簡單化,再把問題複雜化的過程。一開始就著手處理複雜的問題,難免讓人有心驚膽顫,捉襟見肘的感覺。讀linux網絡卡驅動 也是一樣。那長長的原始碼夾雜著那些我們陌生的變數和符號,望而生畏便是理所當然的了。不要擔心,事情總有解決的辦法,先把一些我們管不著的 切割出去,留下必須的部分,...

IIC驅動程式分析(一)

根據上一節課的分析,我們來解讀這段 include include include include include include include static unsigned short ignore static unsigned short normal addr 位址值是7位 static...