驅動程式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
按鍵的裝置驅動程式流程
按鍵的裝置驅動 1.按鍵的硬體原理 在嵌入式系統中,通過乙個上拉電阻將處理器的外部中斷引腳拉高,電阻的另一端連線按鈕並接地即可實現。當按鈕被按下時,eint10 ein13 eint14 eint15 上將產生低電平,這個低電平將中斷cpu,cpu可以依據中斷判斷按鍵被按下。僅僅依據中斷被產生就認定...
USB裝置驅動程式載入流程
使用者插入usb裝置 usb匯流排 或者是pci匯流排,這個不太清楚,反正就是匯流排來著 識別到插入了usb裝置。匯流排和usb裝置進行通訊,獲取usb的硬體id 產品id,以及bcdversion。根據這些資訊組成裝置硬體id號 vid x pid x rev x。匯流排根據usb裝置的插槽位置,...
程式設計師工作流程總結
1 整理需求 帶問題 需求是否合理 可行,是否是使用者真實的本質需求,明確需求邊界。2 設計流程 複雜業務uml建模,流程設計和uml建模應該遵循各自的基本原則。3 流程可行性 合理性 技術實現討論 複雜問題帶著2種以上的解決方案,並能說出各自的優缺點,在保證可行性的前提下站在使用者的角度從體驗上分...