1. linux核心模組簡介
2. 簡單核心模組實現
llinux核心模組簡介
1. 何為核心模組
最笨的方法是對核心進行重新配置,然後在重新編譯。這樣的話豈不是說我加乙個元件就得重新編譯核心,這顯然不是很科學的方法,其實我們的linux核心提供在執行時可進行擴充套件的特性,這意味著當系統啟動並執行時,我們可以向核心新增或移除部分功能。
我們在執行時新增到核心中的**就被成為動態可載入核心模組,我們簡稱為核心模組。
2. 核心模組的相關操作
a)載入核心模組:insmod
b)解除安裝核心模組:rmmod
c)檢視核心模組:lsmod
3. 模組宣告
a)module_license(「gpl」):核心可以識別的許可證有gpl(任意版本gnu通用公共許可證)、gpl v2等
b)module_author(「作者」):宣告作者資訊可以不用
c)module_version(「版本」):宣告版本資訊也可以不用
d)module_description(「功能描述」):宣告模組功能,可不用
4. 模組引數
我們可以在載入核心模組的時候向其傳遞引數,以讓同一**達到不同的效果。當然我們的引數必須用module_param巨集來宣告具體如下:
module_param(name,type,perm)
a)name:變數名
b)type:資料型別核心支援模組引數型別有:bool、invbool(bool的發轉,true變為false,false變為true)、charp(char型別指標值)、int、long、short、uint、ulong、ushort、
c)perm:常見的訪問許可值通常為s_irugo和s_iwusr。通常情況下將他們按位或
同時我們也可以用下面的巨集宣告陣列:
module_param_array(name,type,num,perm)
5. 模組符號匯出
當乙個模組要使用另乙個模組的函式(變數)的時候,要使用export_symbol(符號名)或者export_symbol_gpl(符號名)來申明。
注:export_symbol_gpl()只適用於遵循gpl協議的模組
l簡單核心模組實現
想必大家都記得我們在學習某種語言的時候,寫的第乙個程式大部分都是輸出hello world,所以我接下來用我們剛才介紹的核心模組去完成hello world。
1. 核心模組編寫
通過上面部分內容的介紹,要完成第一核心模組不是很難,下面是自己的**。
1 #include 2 #include 3 module_license("gpl"); 4 staticint hello_init(void) 5 9 staticvoid hello_exit(void)10 13 module_init(hello_init);//該巨集在模組的目標**中增加乙個特殊的段,用於說明核心初始化函式所在的位置14 module_exit(hello_exit);//跟上面的巨集對立
2. makefile編寫makefile的編寫也比較簡單,要注意的地方**中已經說明。
1 obj-m := hello.o2 dirs :=/smbshare/linux-2.6.39///此處路徑為核心原始碼路徑,該核心原始碼必須要經過編譯,不然會報錯3 all:4 make -c $(dirs) m=$(pwd) modules5 clean:6 rm -rf*.o *.ko *.mod.c *.order *.symvers
經過了上面兩個步驟,我們然後編譯載入然後解除安裝我們的模組進行試驗。
編譯:
載入:
檢視:
解除安裝:
3. printk函式簡介
printk函式為核心列印函式,其和printf函式功能類似,不過比printf多了列印許可權一共有8個級別,printk的日誌級別定義如下(在include/linux/kernel.h中):
1 #define kern_emerg 0 //緊急事件訊息,系統崩潰之前提示,表示系統不可用2 #define kern_alert 1 //報告訊息,表示必須立即採取措施3 #define kern_crit 2 //臨界條件,通常涉及嚴重的硬體或軟體操作失敗4 #define kern_err 3 //錯誤條件,驅動程式常用kern_err來報告硬體的錯誤5 #define kern_warning 4 //警告條件,對可能出現問題的情況進行警告6 #define kern_notice 5 //正常但又重要的條件,用於提醒7 #define kern_info 6 //提示資訊,如驅動程式啟動時,列印硬體資訊8 #define kern_debug 7 //除錯級別的訊息
今天的內容比較簡單,只是對核心模組有了乙個初步的了解,所以我今天在給大家推薦乙個比較好用的工具,叫做exvim其將好多vim的工具進行了整合,個人感覺十分方便,就是換電腦什麼的也不怕自己的配置丟失了。貼一張自己使用的圖,大家有興趣的可以去 了解。
大頁記憶體與透明大頁詳解
大頁記憶體 hugepages 有時也叫 大記憶體頁 記憶體大頁 標準大頁 作業系統以記憶體頁為單位管理記憶體,記憶體頁的大小對系統效能有影響。記憶體頁設得太小,記憶體頁會很多,管理記憶體頁的陣列會比較大,耗記憶體,同時tlb translation lookaside buffer,頁表寄存緩衝器...
Linux核心引數和Oracle相關引數調整
shared memory segments key shmid owner perms bytes nattch status 0x00000000 65537 oracle 640 4194304 27 0x00000000 98306 oracle 640 20971520 27 0x0000...
Linux核心頁表
一 linux位址空間 arm的32位系統共支援4g的記憶體空間,其中0 3g為使用者空間,3g 4g是核心空間,arm採用2級頁表,32位位址空間address分別為 pgd pte 12bits,在核心 中分別為pgd 11位,pte 9 位,頁內位址12位 但是在mmu系統中對於arm的二級分...