1. 程式人生 > >6.misc類裝置與蜂鳴器驅動

6.misc類裝置與蜂鳴器驅動

第三部分、隨堂記錄     1.板載蜂鳴器驅動測試 1.1、驅動部分 (1)九鼎移植核心已經提供了蜂鳴器驅動原始碼 (2)make menuconfig (3)bug排查。修改Makefile中的巨集名,最終可以在系統中看到 /dev/buzzer 1.2、應用部分 (1)應用編寫:開啟檔案+ioctl (2)測試實踐

2.misc類裝置介紹 2.1、何為misc (1)中文名:雜項裝置\雜散裝置 (2)/sys/class/misc (3)典型的字元裝置 (4)有一套驅動框架,核心實現一部分(misc.c),驅動實現一部分(x210-buzzer.c)。 (5)misc是對原始的字元設備註冊介面的一個類層次的封裝,很多典型字元裝置都可以歸類到misc類中,使用misc驅動框架來管理。 2.2、misc類裝置驅動架構 (1)核心開發者實現部分,關鍵點有2個:一個是類的建立,另一個是開放給驅動開發者的介面 (2)具體裝置驅動工程師實現部分 2.3、本部分學習方法 (1)蜂鳴器驅動原始碼已有,分析為主 (2)複習並驗證前面講的驅動框架的思維 (3)有餘力的不妨開始注意一些細節

3.misc驅動框架原始碼分析1 3.1、misc原始碼框架基礎 (1)misc原始碼框架本身也是一個模組,核心啟動時自動載入 (2)原始碼框架的主要工作:註冊misc類,使用老介面註冊字元裝置驅動(主裝置號10),開放device註冊的介面misc_register給驅動工程師 3.2、misc類裝置的註冊 (1)驅動工程師需要藉助misc來載入自己的驅動時,只需要呼叫misc_register介面註冊自己的裝置即可,其餘均不用管。 (2)misc_list連結串列的作用。核心定義了一個misc_list連結串列用來記錄所有核心中註冊了的雜散類裝置。當我們向核心註冊一個misc類裝置時,核心就會向misc_list連結串列中insert一個節點。 #define LIST_HEAD_INIT(name) { &(name), &(name) } #define LIST_HEAD(name) \     struct list_head name = LIST_HEAD_INIT(name)

原式子:static LIST_HEAD(misc_list); 展開後:static struct list_head misc_list = { &(misc_list), &(misc_list) } (3)主裝置號和次裝置號的作用和區分

4.misc驅動框架原始碼分析2 4.1、open函式分析 4.2、misc在proc下的展現 4.3、核心互斥鎖 (1)何為互斥鎖 (2)定義:DEFINE_MUTEX (3)上鎖mutex_lock和解鎖mutex_unlock (4)核心防止競爭狀態的手段:原子訪問、自旋鎖、互斥鎖、訊號量 (5)原子訪問主要用來做計數、自旋鎖後面講中斷會詳細講、互斥鎖和訊號量很相似(其實就是計數值為1的訊號量),互斥鎖的出現比訊號量晚,實現上比訊號量優秀,儘量使用互斥鎖。

5.蜂鳴器驅動原始碼分析1 5.1、dev_init (1)訊號量 (2)miscdevice (3)gpio_request (4)printk 5.2、ioctl (1)為什麼需要ioctl(input output control,輸入輸出控制)。 (2)ioctl怎麼用

6.蜂鳴器驅動原始碼分析2 硬體操作有關的程式碼