1. 程式人生 > >總線、設備和驅動

總線、設備和驅動

closed bus license attr_ gpl move tor 函數 使用

http://blog.chinaunix.net/uid-25014876-id-109733.html

技術分享圖片
 1 #include <linux/module.h>
 2 #include <linux/init.h>
 3 
 4 #include <linux/device.h>
 5 
 6 #define VER_SIZE 100
 7 char Version[VER_SIZE] = "xiaobai V1.0";
 8 
 9 
10 struct bus_type bus_type_wsz = {   // 1、定義bus_type結構體
11     .name = "
wszbus" 12 }; 13 14 15 static ssize_t show_bus_version(struct bus_type *bus, char *buf) 16 { 17 return snprintf(buf, VER_SIZE, "%s\n", Version); 18 } 19 static ssize_t store_bus_version(struct bus_type *bus, const char *buf, size_t count) 20 { 21 return snprintf(Version, VER_SIZE, "%s", buf);
22 } 23 24 25 /* 26 3、創建並初始化bus_attribute結構,使用宏BUS_ATTR 27 28 該宏會定義一個名叫bus_attr_name(紅色部分是固定的(bus_attr_))的bus_attibute的結構, 29 並且成員name設置為name,文件權限mode設置為_mode,兩個函數調用分別人show和store。 30 <linux/device.h> 31 */ 32 static BUS_ATTR(version, S_IRUGO|S_IWUGO, show_bus_version, store_bus_version); 33 34
static int __init bus_wsz_init(void) 35 { 36 int ret; 37 ret = bus_register(&bus_type_wsz); // 2、註冊總線 38 if(ret) 39 { 40 printk("bus register failed!\n"); 41 return ret; 42 } 43 44 /* 45 4、將bus_attibute添加到指定的總線上 46 47 一旦調用該函數,會就在指定bus總線的目錄下新建一個名叫_name的文件, 48 權限為_mode,當訪問和修改該文件是會分別調用show和store函數調用? 49 */ 50 ret = bus_create_file(&bus_type_wsz, &bus_attr_version); 51 if(ret) 52 { 53 printk("bus creat file failed!\n"); 54 bus_unregister(&bus_type_wsz); 55 return ret; 56 } 57 58 printk("wsz bus init\n"); 59 return 0; 60 61 } 62 63 static void __exit bus_wsz_exit(void) 64 { 65 bus_unregister(&bus_type_wsz); 66 bus_remove_file(&bus_type_wsz, &bus_attr_version); //不調用這個也可以的,刪除總線時會刪除 67 printk("bus_wsz bye!\n"); 68 } 69 70 71 72 module_init(bus_wsz_init); 73 module_exit(bus_wsz_exit); 74 75 MODULE_LICENSE("GPL"); 76 MODULE_AUTHOR("WSZ");
bus

總線、設備和驅動