1.標準字元裝置驅動
a.註冊裝置號 如
if(key_major) /*靜態註冊*/
err = register_chrdev_region(devno, 1, device_name);
else
b.記憶體申請給cdev(當cdev定義為指標時)然後呼叫以下函式進行裝置初始化並新增該裝置
void cdev_init(struct cdev *cdev, const struct file_operations *fops)
int cdev_add(struct cdev *p, dev_t dev, unsigned count)
c.如需在/dev下自動建立裝置,需呼叫如下函式
struct class *key_class = class_create(this_module, name);
struct device *device_create(struct class *class, struct device *parent,dev_t devt, void *drvdata, const char *fmt, ...)
*classs 就是class_create返回的key_class;parent如沒有就設為null;devt裝置號;drvdata 如無就為null,後面的就是裝置名稱。也可呼叫mknod 手動建立裝置節點。
自此裝置已經成功新增,一下的工作就時完成file_operations中相應函式就好了。
2.混雜模式裝置驅動
只需在模組初始化和退出時呼叫以下函式即可完成裝置的註冊,裝置節點建立等一系列工作,此模式下的主裝置號為10
int misc_register(struct miscdevice * misc)
int misc_deregister(struct miscdevice *misc)
struct miscdevice ;
剩下的工作就是完成file_operations中的相應函式功能。
3.plat_form平台下的驅動
利用platform機制開發裝置驅動的流程 :定義platform_device--註冊platform_device--定義platform_driver--註冊platform_device。對於系統已經註冊過的裝置就只需實現後兩步就可以了,但是在註冊的裝置名字 和註冊的驅動名字一定要相同,否則不會註冊成功。當platform匯流排匹配到匯流排上註冊的裝置和驅動後,就會呼叫platform_driver 上的probe函式(此時匯流排的probe函式為null)。在probe中可以獲取裝置的記憶體資源和中斷資源。所有這些操作完成後 就是完成其一些file_operations的操作,然後將其定義為字元裝置或混在裝置等,在/dev建立其對應的裝置檔案。(為什麼這麼做還沒有搞懂)應用程式就可以通過open對其操作了。
對應的驅動和測試程式可以檢視blog中的 資源 3種模式的按鍵驅動(cdev misc platform).rar
字元裝置驅動編寫步驟
1.標準字元裝置驅動 a.註冊裝置號 如 if key major 靜態註冊 err register chrdev region devno,1,device name else b.記憶體申請給cdev 當cdev定義為指標時 然後呼叫以下函式進行裝置初始化並新增該裝置 void cdev in...
字元裝置驅動編寫方法
字元裝置驅動編寫方法 1.標準字元裝置驅動 a.註冊裝置號 如 if key major 靜態註冊 err register chrdev region devno,1,device name else b.記憶體申請給cdev 當cdev定義為指標時 然後呼叫以下函式進行裝置初始化並新增該裝置 v...
作業系統 再識 字元裝置驅動編寫步驟
1.標準字元裝置驅動 a.註冊裝置號如 if key major 靜態註冊 err register chrdev region devno,1,device name else b.記憶體申請給 cdev 當cdev 定義為指標時 然後呼叫以下函式進行裝置初始化並新增該裝置 void cdev i...