linux内核模块实验,linux内核模块实验(2学时).doc
第一個內核模塊實驗
一: 預習要求:
( 1 ) 做本實驗之前,請復習相關內核模塊知識。
( 2 ) 請了解內核模塊的編寫、編譯及安裝與卸載方法。
( 3 ) 請學習內核打印函數 printk() 的用法。
( 4 ) 請復習 Makefile 文件的編寫。
二:實驗目的:
( 1 ) 掌握內核模塊的組成部分。
( 2 ) 掌握內核模塊的編譯、安裝與卸載方法。
( 3 ) 學會查看內核模塊的信息。
三:實驗任務:
編寫一個內核模塊module,向外導出兩個函數,分別是“求累積和”和“求階乘”功能。編寫另兩個內核模塊module1、module2,分別使用上面module模塊中的函數,實現計算。注意路徑清晰,分別在三個目錄下編寫。
四:實驗原理及方法:
Linux 內核模塊( LKM )是一些在啟動的操作系統內核需要時可以載入內核執行的代碼塊,不需要時由操作系統卸載。它們擴展了操作系統內核功能卻不需要重新編譯內核、啟動系統。如果沒有內核模塊,就不得不反復編譯生成操作系統的內核鏡像來加入新功能,當附加的功能很多時,還會使內核變得臃腫。
一個 Linux 內核模塊主要由以下幾個部分組成:
(1) 模塊加載函數 ( 必須 ) :當通過 insmod 或 modprobe 命令加載內核模塊時,模塊的 加(1) 模塊加載函數 ( 必須 ) :當通過 insmod 或 modprobe 命令加載內核模塊時,模塊的加載函數會自動被內核執行,完成本模塊相關初始化工作。
(2) 模塊卸載函數(必須):當通過 rmmod 命令卸載模塊時,模塊的卸載函數會自動被內核執行,完成與模塊加載函數相反的功能。
(3) 模塊許可證聲明(必須):模塊許可證( LICENCE )聲明描述內核模塊的許可權限,如果不聲明 LICENCE, 模塊被加載時將收到內核被污染的警告。大多數情況下內核模塊應遵循 GPL 兼容許可權。 L inux2.6內核模塊最常見的是以MODULE_LICENSE( “ Dual BSD/GPL ” ) 語句聲明模塊采用 BSD/GPL 雙 LICENSE 。
(4) 模塊參數(可選):模塊參數是模塊被加載的時候可以被傳遞給他的值,它本身對應模塊內部的全局變量。
(5) 模塊導出符號(可選):內核模塊可以導出符號 (symbol, 對應于函數或變量 ) ,這樣其他模塊可以使用本模塊中的變量或函數。
(6) 模塊作者等信息聲明(可選)。
一個內核模塊至少包含兩個函數,模塊被加載時執行的初始化函數 init_module() 和模塊被卸載時執行的結束函數 cleanup_module() 。在最新內核穩定版本 2.6 中,兩個函數可以起任意的名字,通過宏module_init() 和 module_exit() 注冊調用。
五:實驗步驟:
1. 創建目錄modparm,在modparm下創建module1和module2目錄(同學也可以創建不同的目錄,因為每個模塊都有自己的Makefile文件,所以每個Makefile必須在不同的目錄下)。在modparm存放modtest模塊,在module1下存放module1模塊,在module2下存放module2模塊。
我的電腦上如下:
2,編寫模塊的源程序和其Makefile文件
(1)modtest.c的清單如下:
modtest.的Makefile如下:
(2)module1.c清單如下:
module1的Makefile如下:
(3) module2.c清單如下:
Module2的Makefile如下:
3 編譯模塊
(1)把生成modtest.ko模塊時生成的Module.symvers放到module1文件夾中。這樣編譯module1時,符號信息就會自動鏈接進去了。
(2)分別執行make命令,編譯modtest.c、module1.c、module2.c
c
4 安裝模塊
5查看模塊lsmod
查看安裝是否成功,下圖中可看到module1和module2的使用者數量為0,而modtest被module1和module2使用,因此其使用者數量為2。
6 看模塊輸出信息
7 卸載模塊rmmod.因為modtest被module1和module2使用,所以必須先卸載module1和module2,最后卸載modtest。
展開閱讀全文
總結
以上是生活随笔為你收集整理的linux内核模块实验,linux内核模块实验(2学时).doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python字符串定义符_python入
- 下一篇: 计算机二级excel数据有效性,原来Ex