字元裝置驅動編寫方法

2021-07-07 08:39:28 字數 1404 閱讀 8007

字元裝置驅動編寫方法

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對其操作了。

字元裝置驅動編寫步驟

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定義為指標時 然後呼叫以下函式進行裝置初始化並新增該裝置 void cdev in...

linux字元裝置及其驅動編寫簡介

1.1字元裝置簡介 字元裝置是一種按序列順序來訪問的裝置,如觸控螢幕,磁帶驅動器,滑鼠等。1.2字元裝置驅動 字元裝置驅動負責驅動字元裝置,通常實現由open read write close ioctl 等函式。1.3裝置號 裝置號分為主次裝置號,主裝置號標示裝置與哪個驅動相連,次裝置號標示同乙個...