linux裝置驅動歸納總結(八) 4 匯流排熱插拔

2021-07-26 19:23:01 字數 1791 閱讀 1041

上一節介紹裝置管理中的分層思想和物件導向思想(名字是我自己瞎編的)。接下來說一下熱插拔的操作。

一、熱插拔的實現

我不知道在這裡用熱插拔這樣的名字是否合適,在之前的**,需要我自己手動去載入驅動和裝置的模組,但在現實的情況下,一般是當裝置一被插入,系統自己會註冊裝置,並呼叫合適的驅動。

所以,接下來我要實現的是,在載入了usb匯流排和usb滑鼠驅動的前提下,當有usb滑鼠插入,系統自己進行裝置的操作。當然,上面的usb滑鼠是我自己想象出來的,當我一按下按鍵(對應中斷e_int1),就代表有usb滑鼠插入。

這樣看來,要實現的**就簡單,稍稍修改一下程式就可以了,將之前由devie.ko

實現的操作交由中斷處理函式來執行,當我按下按鍵,觸發中斷自動執行。

driver.c不用修改,並且把device.c刪掉,將**移到bus.c中:

/*8th_devmodule_4/1st/bus.c*/

9 struct work_struct my_work;

。。。。。

56 /**************

57 * 裝置註冊

58 *************/

59 void usb_dev_release(struct device *dev) //解除安裝函式沒有幹具體的事情

60 63 /*結構體中不需要指定匯流排的成員,交由usb_device_register來完成*/

64 struct usb_device mouse_dev = ,

69 };70

71 irqreturn_t hotplug_handler(int irqno, void *dev_id)

72 77 void work_func(struct work_struct *work)//中斷下半部處理函式

78 85

86 static int __init usb_bus_init(void)

87 97

98       /*匯流排註冊,必須檢測返回值*/

99       ret = bus_register(&usb_bus);

100     if(ret)

104105     printk("usb bus init\n");

106     return 0;

107 }

108109 static void __exit usb_bus_exit(void)

110

上面的**可以看到,函式將原來在device.c中實現的操作放在了中斷函式來執行,一旦usb滑鼠被插入(這裡是我假設的,其實就是按下按鍵,觸發e_int1中斷),就會執行註冊裝置的操作。

看效果:

[root: 1st]# insmod bus.ko //先載入匯流排

usb bus init

[root: 1st]# insmod driver.ko //再載入驅動

usb driver init

[root: 1st]# usb mouse device insert //當我按下按鍵,觸發中斷,假設滑鼠被插入

match success //配對成功

init usb mouse //初始化裝置

當然,我的函式很多的

bug,譬如你再次按下按鍵,那就會出現錯誤。但撇來這些不考慮,基本效果就出來了,當裝置一插入,核心自動註冊裝置。

二、總結

第八章的裝置模型基本上就介紹完了,我在這裡沒有介紹kobject、kset等這一類核心中用於管理裝置模型的結構體,有興趣可以自己去看看。

接著就會介紹平台類匯流排裝置,到時候你會發現,平台類匯流排裝置其實就是匯流排的乙個封裝。

linux裝置驅動歸納總結

diytvgy的日誌 前言 我的總結是根據學習時的筆記 李楊老師授課 linux核心設計與實現 第三版 linux裝置驅動程式 第三版和 linux裝置驅動開發詳解 第一版來歸納的。1.1 linux裝置驅動的作用 1.2 核心 樹介紹 1.3 核心補丁 1.4 核心中的makefile 1.5 子...

Linux字元裝置驅動總結

linux2.6核心中使用cdev結構體描述字元裝置 struct cdev cdev結構體的dev t定義了裝置號,32位。高12位為主裝置號,低20位為次裝置號。下列巨集可從dev t獲得主 次裝置號 major dev t dev minor dev t dev 通過主 次裝置號生成dev t...

Linux字元裝置驅動總結

linux2.6核心中使用cdev結構體描述字元裝置 struct cdev cdev結構體的dev t定義了裝置號,32位。高12位為主裝置號,低20位為次裝置號。下列巨集可從dev t獲得主 次裝置號 major dev t dev minor dev t dev 通過主 次裝置號生成dev t...