前面我們講解了一個簡單的總線驅動程序,目的就是在/sys/bus/下面創建文件,但是這還是不夠的,因為總線也是一個設備,如果想讓系統認識的話,必須要用device_register進行注冊。
此處,我們就開始來注冊一個總線,讓總線下即可以包含屬性文件,也包含設備文件,和驅動程序。
讓驅動程序 和設備文件之間互聯,這才是總線真正的用途。
一、程序解析
前面已經將的很詳細,我們這兒在前面的基礎上加上一下:
1. 定義總體設備結構體
并且實現 設備的release函數;
2. 導出總線設備
3. 注冊設備驅動
4. 卸載設備
二、編譯測試:
加載成功后,因為總線也是一個設備,所以在 /sys/bus/下面有my_bus這個目錄
而在/sys/device/ 下面同樣也生成了一個目錄,名字為我們的my_bus 的init_name
如圖所示
附上my_bus.c驅動程序:
1 #include
2 #include
3 #include
4 #include
5 #include
6
7
8 static char *Version = '$LoverXueEr : 1.0 $';
9
10 //檢測驅動是否匹配設備,dev->bus_id 和 driver->name相等的
11 static int my_match(struct device *dev ,struct device_driver *driver){
12 return !strncmp(dev_name(dev),driver->name,strlen(driver->name));
13 }
14
15 static void my_bus_release(struct device *dev){
16 printk('
17 }
18
19 //設置設備的名字 dev_set_name(&dev,'name');
20 struct device my_bus = {
21 .init_name = 'my_bus0',
22 .release = my_bus_release,
23 };
24
25 struct bus_type my_bus_type = {
26 .name = 'my_bus',
27 .match = my_match,
28 };
29 EXPORT_SYMBOL(my_bus); //導出符號
30 EXPORT_SYMBOL(my_bus_type);
31
32 //顯示總線版本號
33 static ssize_t show_bus_version(struct bus_type *bus,char *buf){
34 return snprintf(buf,PAGE_SIZE,'%sn',Version);
35 }
36
37 //產生后面的 bus_attr_version 結構體
38 static BUS_ATTR(version,S_IRUGO, show_bus_version, NULL);
39
40 static int __init my_bus_init(void){
41 int ret;
42 /* 注冊總線 */
43 ret = bus_register(&my_bus_type);
44 if(ret)
45 return ret;
46 /* 創建屬性文件 */
47 if(bus_create_file(&my_bus_type, &bus_attr_version))
48 printk('
49
50 /* 注冊總線設備 */
51 ret = device_register(&my_bus);
52 if(ret)
53 printk('
54 return ret;
55 }
56
57 static void my_bus_exit(void){
58 bus_unregister(&my_bus_type);
59 device_unregister(&my_bus);
60 }
61
62 module_init(my_bus_init);
63 module_exit(my_bus_exit);
64
65
66 MODULE_AUTHOR('Lover雪兒');
67 MODULE_LICENSE('GPL');
三、錯誤解決:
1. error: 'struct device' has no member named 'bus_id'
在新版本的內核中device已經沒有bus_id這個成語了,取而代之的是.init_name.
解決方法:
將device下面的 .bus_id 修改為 .init_name ,如圖所示:
然后,再將程序中match函數中 dev->bus_id 修改為 dev_name(dev), 就可以了
上一篇:IMX257 總線設備驅動模型編程之設備篇
下一篇:IMX257 總線設備驅動模型編程之總線篇
推薦閱讀最新更新時間:2025-06-07 23:40
- 熱門資源推薦
- 熱門放大器推薦