歡迎您光臨本站 註冊首頁

驅動程序module的工作流程

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

驅動程序module的工作流程主要分為四個部分:

1、 insmod module
2、 驅動module的初始化(初始化結束后即進入「潛伏」狀態,直到有系統調用)
3、 當操作設備時,即有系統調用時,調用驅動module提供的各個服務函數
4、 rmmod module

一、 驅動程序的載入
Linux驅動程序分為兩種形式:一種是直接編譯進內核,另一種是編譯成module,然後在需要該驅動module時手動載入。

在用insmod載入module時,還可以給提供模塊參數,如:
static char *whom=」world」;
static int howmany=10;
module_param(howmany,int,S_IRUGO);
module_param(whom,charp,S_IRUGO);

這樣,當使用insmod scull.ko whom=」string」 howmany=20這樣的命令載入驅動時,whom和howmay的值就會傳入scull驅動模塊了。

二、 驅動module的初始化
scull_init_module函數中主要做了以下幾件事情:

a) 分配並註冊主設備號和次設備號

int register_chrdev_region(dev_t first, unsigned int count, char *name)
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name)

b) 初始化代表設備的struct結構體:scull_dev

c) 初始化互斥體init_MUTEX

d) 初始化在內核中代表設備的cdev結構體,最主要是將該設備與file_operations結構體聯繫起來。在Linux內核中,cdev結構體才是真正代表了某個設備。在內核調用設備的open,read等操作之前,必須先分配並註冊一個或者多個cdev結構。

三、設備操作
涉及open ,close ioclt,release等函數

四、卸載
scull_cleanup_module

[火星人 ] 驅動程序module的工作流程已經有176次圍觀

http://coctec.com/docs/linux/show-post-186920.html