linux miscdevice 驅動程式

2021-06-22 20:38:49 字數 1431 閱讀 3175

1  在linux驅動中把無法歸類的五花八門的裝置定義為混雜裝置(用miscdevice結構體表述)。miscdevice共享乙個主裝置號misc_major(即10),但次裝置號不同。 所有的miscdevice裝置形成了乙個鍊錶,對裝置訪問時核心根據次裝置號查詢對應的miscdevice裝置,然後呼叫其file_operations結構中註冊的檔案操作介面進行操作。 在核心中用struct miscdevice表示miscdevice裝置,然後呼叫其file_operations結構中註冊的檔案操作介面進行操作。miscdevice的api實現在drivers/char/misc.c中。

struct miscdevice  

;minor是這個混雜裝置的次裝置號,若由系統自動配置,則可以設定為

misc_dynanic_minor,name是裝置名 

misc->this_device = device_create(misc_class, misc->parent, dev, misc, "%s", misc->name);//說明了混雜裝置驅動內部有自動裝置驅動,可自動建立裝置節點

#define misc_dynamic_minor      255

動態分配次裝置號。 2 

structfile_operations;

3  在linux核心原始碼miscdevice.h裡雜項裝置描述結構體定義:

struct miscdevice  ;

extern int misc_register(struct miscdevice * misc); 

extern int misc_deregister(struct miscdevice *misc);

miscdevice裝置框架:

static ssize_t mydev_read(struct file *filp, char __user * buf, size_t count, loff_t *f_pos)

static int mydev_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)

static struct file_operations mydev_fops = ;

static struct miscdevice misc = ;

static int mydev_init(void)

static void mydev_exit(void)

module_init(mydev_init);   //模組載入函式

module_exit(mydev_exit);   //模組解除安裝函式

module_license("dual bsd/gpl");  //模組宣告

雜項裝置是特殊的字元裝置,但是編寫這類驅動程式省去了建立裝置節點的麻煩,因此更加方便。

linux misc device字元雜項裝置驅動

雜項裝置也是在嵌入式系統中用得比較多的一種裝置驅動。miscdevice共享乙個主裝置號misc major 即10 但次裝置號不同。misc裝置其實就是特殊的字元裝置,主裝置編號採用10,並且可自動生成裝置節點。雜項裝置作為字元裝置的封裝,為字元裝置提供的簡單的程式設計介面,如果編寫新的字元驅動,...

關閉Windows Update更新驅動程式

關於win10的更新配置,特別是自動更新驅動程式,經常會導致驅動安裝錯誤而無法開機的問題。此時只好開機時按f8進入高階模式恢復最後一次正確配置,或者在安全模式刪除錯誤的驅動程式。關於win10的更新配置,建議如下 1 去除 bt更新 在 windows 更新設定 視窗裡,點 高階選項 只保留第乙個勾...

詳解協程,事件驅動模型,I O模型

什麼是事件驅動模型 協程介紹 協程是什麼 協程是微執行緒,他是一種使用者態的輕量級執行緒,它的好處是沒有執行緒切換的開銷,我們開多執行緒,執行緒的上下文切換是耗費cpu的開銷的,但是多協程裡邊,只是乙個控制流調到了另外乙個控制流,它還是單執行緒,所以協程很適合高併發,乙個cpu可以支援上萬的協程,因...