1. 程式人生 > >linux字元裝置驅動模型

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