一.驅動程式程式設計概念:
1.驅動學習知識結構:
1.linux驅動設計模式,框架.(40%)
2.核心相關的知識.(30%)
2.驅動程式的分類:
1.字元裝置驅動:能以位元組來訪問。通過字元裝置檔案訪問塊驅動程式。
2.網路介面:乙個網路負責傳送和接受資料報文。通過套接字訪問塊驅動程式,不是通過檔案。
3.塊裝置:乙個塊來訪問資料,linux中允許塊裝置傳送任意數目的位元組,區別是驅動與核心介面不同。通過檔案系統訪問塊驅動程式。
3.如何把乙個驅動程式編譯進核心,修改makefile和kconfig.加_init段的函式,啟動核心自動執行.
4.裝載模組
insmod和modprobe可以用來裝載模組
5.insmod和modprobe主要區別
modprobe會考慮要裝載的模組是否引用了一些當前核心不存在的符號。如果有這類引用,modprobe會在當前模組路徑中搜尋定義了這些符號的其他模組,並同時將這些模組也裝載到核心。如果在這種情況下使用insmod,該命令則會失敗,並在系統日誌檔案中記錄「unresolved symbols(未解析的符號)」訊息。
6.解除安裝模組
從核心中解除安裝模組可以用rmmod工具.注意,如果核心認為該模組任然在使用狀態,或者核心被禁止移除該模組,則無法移除該模組。
二.程式模板
module_license()---模組許可證宣告(必須)
module_author(author); ---宣告模組的作者 (可選)
module_description(description); ---宣告模組的描述
module_version(version_string); ---宣告模組的版本
module_alias(alternate_name); ---宣告模組的別名
module_device_table(table_info); ---宣告模組的裝置表
export_symbol()---模組匯出符號(可選)
export_symbol_gpl(name);
static int __init initialization_function(void)
static void __exit cleanup_function(void)
module_exit(initialization_function)---模組解除安裝函式(必須)
module_init(cleanup_function)---模組載入函式(必須)
module_param(引數名,引數型別,引數讀/寫許可權)
module_param_array(陣列名,陣列型別,陣列長,引數讀/寫許可權)
kobject,kset是裝置模型的基本結構體,裝置模型使用這兩個結構體來完成裝置的層次關係,但在實際的裝置驅動編寫中,我們基本上用不到kobject,kset這些結構體,是因為這些結構體又被嵌入到更大的結構體中,原因在於kobject,kset結構體只能表徵裝置的層次關係,但是乙個裝置的驅動,並不...
原文 kobject,kset是裝置模型的基本結構體,裝置模型使用這兩個結構體來完成裝置的層次關係,但在實際的裝置驅動編寫中,我們基本上用不到kobject,kset這些結構體,是因為這些結構體又被嵌入到更大的結構體中,原因在於kobject,kset結構體只能表徵裝置的層次關係,但是乙個裝置的驅動...
塊裝置與字元裝置 1.訪問方式的不同 字元裝置按照位元組進行讀取,塊裝置按塊進行讀取 2.緩衝區 塊裝置本身驅動層支援緩衝區 軟體實現的緩衝區 所以塊裝置驅動最適合儲存裝置 儲存裝置按塊進行讀寫的特點決定 而字元裝置驅動層沒有緩衝 3.訪問的順序 塊裝置可以實現隨機的訪問,不連續塊的訪問,而字元裝置...