Linux 混雜裝置驅動模型

2021-08-28 06:12:17 字數 1819 閱讀 1116

混雜裝置miscdevice是字元裝置的一種,它們共享乙個主裝置號misc_major(即10),但次裝置號不同,所有的miscdevice裝置形成了乙個鍊錶,對裝置訪問時核心根據次裝置號查詢對應的miscdevice裝置。這樣做的好處,節約主裝置號,將某些裝置用鍊錶的形式鏈結在一起,最後通過查詢次裝置區分。

miscdevice混雜裝置用主裝置號無法匹配出裝置驅動,只能找到鍊錶,再通過次裝置號,才能找到裝置驅動,而一般字元裝置,通過主裝置號,就能找到裝置驅動了。然後呼叫其file_operations結構中註冊的檔案操作介面進行操作。 在核心中用struct miscdevice表示miscdevice裝置,然後呼叫其file_operations結構中註冊的檔案操作介面進行操作。

描述結構

混雜裝置在核心中用struct miscdevice 描述,其定義如下:

struct miscdevice ;
驅動編寫只需要關注填寫三個字段:minor次裝置號、name裝置名、fops 裝置操作集

註冊驅動

混雜裝置驅動通過如下函式註冊:

int misc_register(struct miscdevice *misc);
登出驅動通過如下函式登出驅動:

int misc_deregister(struct miscdevice *misc);
驅動模型思維導圖通過如上知識並結合模組的知識可以畫出混雜裝置驅動的思維導圖:

下面是筆者實現的基於混雜裝置驅動的led裝置驅動**:

驅動**:

#include #inlude #include #include /*開啟函式*/

int misc_open(struct inode *inode,struct file *file)

/*控制函式*/

long misc_ioctl(struct file *file,unsigned int cmd,unsigned long arg)

return 0;

}/*關閉函式*/

int misc_close(struct inode *inode, struct file *file)

/*定義操作函式集*/

struct file_operations misc_fops = ;

/*定義混雜裝置驅動描述結構*/

struct miscdevice misc = ;

/*模組載入函式*/

static int misc_init(void)

/*模組解除安裝函式*/

static void misc_exit(void)

module_license("gpl");

module_init(misc_init);

module_exit(misc_exit);

呼叫驅動的應用程式測試**:

#include #include #include #include #include #include int main(int argc,char *argv)

while(i++ < 4)

return 0;

}

當然上面的驅動程式我們完全可以用字元裝置驅動模型來寫,但是這樣會麻煩很

混雜裝置驅動模型

在linux系統中,存在一類字元裝置,它們擁有相同的主裝置號10,但次裝置號不同,我們稱這類裝置為混雜裝置 miscdevice 所有的混雜裝置形成乙個鍊錶,對裝置訪問時核心根據次裝置號查詢到相應的混雜裝置。如果乙個字元裝置驅動要驅動多個裝置,則它不應該選用混雜裝置來實現。linux中使用struc...

混雜裝置驅動模型

混雜裝置,它們擁有相同的主裝置號 數字10 但次裝置號不同,我們稱這類裝置為混雜裝置 miscdevice 然後呼叫其file operations結構中註冊的檔案操作介面進行操作。對比普通字元裝置操作比較簡單 struct miscdevice 例 static struct miscdevice...

12 混雜裝置驅動模型

混雜裝置驅動模型 在linux系統中,存在一類字元裝置,它們擁有相同的主裝置號 數字10 但次裝置號不同,我們稱這類裝置為混雜裝置 miscdevice 所有的混雜裝置形成乙個鍊錶,對裝置訪問時核心根據次裝置號查詢到相應的混雜裝置。一 裝置描述 linux中使用struct miscdevice來描...