透明大頁相關核心引數 Linux核心分析(二)

2021-10-14 02:41:34 字數 3113 閱讀 5350

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的二級分...