2.6. 預備知識
核心是乙個特定的環境,對需要和它介面的**有自己的一些要求。大部分核心**中都要包含相當數量的標頭檔案,以便獲得函式、資料型別和變數的定義。有幾個標頭檔案是用於模組的,必須出現在每個可裝載的模組中。所有的模組**中都包含下面兩行**:
#include
#include
linux/module.h包含有可裝載模組需要的大量符號和函式的定義。linux/init.h包含指定初始化和清除函式。大部分模組還包含 linux/moudleparam.h標頭檔案,這樣,就可以在裝載模組時向模組傳遞引數。儘管不是嚴格要求的,但模組應該指定**所使用的許可證。只需包含module_license行:
module_license("gpl");
核心能夠識別的許可證有 "gpl"( 適用 gnu 通用公共許可的任何版本 ),"gpl v2"( 只適用 gpl 版本 2 ),"gpl and additional rights(gpl及附加權利)","dual bsd/gpl(bsd/gpl雙重許可證)","dual mpl/gpl(mpl/gpl雙重許可證)"以及"proprietary(專有)"。如果乙個模組沒有顯示地標記為上述核心可識別的許可證,則會被假定是專有的,而核心裝載這種模組就會被汙染。
可在模組中包含的其它描述性定義包括 module_author ( 描述模組作者)、module_descripion(用來說明模組用途的簡短描述)、module_version(**修訂號)、module_alias(模組別名)以及module_device_table(用來告訴核心空間模組支援的裝置)。
上述module_宣告可出現在原始檔中源**函式以外的任何地方。但新近的核心編碼習慣是將這些宣告放在檔案的最後。
Linux裝置驅動第 2 章之 模組引數
2.8.模組引數 由於系統的不同,驅動程式需要的引數也許會發生變化。這包括裝置編號以及其它一些用來控制驅動程式操作方式的引數。例如,scsi介面卡的驅動程式經常要處理一些選項,這些選項用來控制標記命令佇列的使用,而整合裝置電路驅動程式允許使用者控制dma操作。如果驅動程式用來控制一些早期的硬體,也許...
Linux裝置驅動之第 2 章 核心符號表
2.5.核心符號表 insmod使用公共核心符號表來解析模組中未定義的符號。公共核心符號表包含所有的全域性核心項 函式和變數 的位址,這是實現模組化驅動程式所必需的。當模組被裝入核心後,這個模組匯出的任何符號都會變成核心符號表的一部分。通常情況下,模組只需實現自己的功能,而無需匯出任何符號。但是,如...
第21章 Linux裝置驅動的除錯之strace
21.8 strace 在linux系統中,strace是一種相當有效的跟蹤工具,strace的主要特點是可以被用來監視系統呼叫。不僅可以用strace除錯乙個新開始的程式,也可以除錯乙個已經在執行的程式 這意味著把strace繫結到乙個已有的pid上 對於第6章的globalmem字元裝置檔案,以...