驅動程序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