linux字元裝置驅動模型
一.雜項裝置驅動模型
雜項的主裝置號固定為10,只有255個次裝置號。可以直接生成驅動核心。
1.需要確定每個模型都會用到的檔案操作方法集合指標
2.確定核心的結構體 static struct miscdevice abc 確定三個引數,第一個為次裝置號,第二個是次裝置號的名稱,第三個是上面的指標地址
3.編寫載入驅動函式 註冊核心 misc_register(&abc);
4.編寫刪除驅動的函式 登出核心結構 misc_deregister(&abc); 完善函式
二.早期經典字元裝置驅動
1.檔案操作方法指標.(定義核心結構不再需要)
2巨集定義裝置名
3.編寫載入驅動函式 讓核心分配可用的主裝置號 函式 register_chrdev(主裝置名,裝置名,方法操作結構指標)( 主裝置名為0時表示系統預設分配) 含順返回值是主裝置號
4.編寫刪除驅動函式 消除主裝置號 unregister_chrdev(主裝置號,裝置名) 完善函式
三.linux2.6標準字元裝置驅動模型
真正完整的模型需要判斷載入時的函式是否成功,錯誤時需要在函式結束之前關掉分配的空間 裝置號之類的種種東西
1.檔案操作方法指標
2.巨集定義 裝置名 定義一個核心結構體struct cdev *abc 定義一個裝置號 dev_no
3.編寫載入驅動函式 a.使用cdev_alloc(void)分配結構空間 b.申請裝置號 alloc_chrdev_region(dev_no,起始次裝置號,連續的次裝置號數量,裝置名) c.c=初始化cdev結構 cdev_init(abc,檔案操作方法指標) d.註冊已經初始化好的cdev結構 cdev_add(abc,dev_no,次裝置號個數);
4.編寫刪除驅動函式 登出cdev結構 cdev_dev(abc) 釋放裝置號 unregister_chrdev_region(dev_no,連續的次裝置號數量) 釋放cdev結構空間 kfree(abc); 完善函式
二和三都需要手動建立裝置檔案 mknod /dev/aaa c 主裝置號 次裝置號,所以標準字元裝置上完善的模型
四.標準字元裝置自動建立檔案
以第三種檔案為模板
2.定義一個類指標 bcd 裝置指標 cde
3.在載入驅動函式後面加上 建立一個類 efg=class_create(THIS_MODULE,“bcd”) 建立裝置device_create(efg,NULL,dev_no,NULL,裝置名....);
4.加刪除裝置 刪除類 device_destory class_destory