linux內核模塊編程實例
學號:201400814125 班級:計科141 姓名:劉建偉
1.確定本機虛擬機中的Ubuntu下Linux的版本

通過使用命令uname -a/uname -r/uname -p來查詢版本號
本機Linux的內核版本為:4.2.0-16-generic
2.編寫最簡單的內核模塊hello
共有兩個文件編寫而成:hello.c 與 Makefile
<1>新建空白文檔,命名為hello.c。在shell下編程,截圖如下:

編寫過程中需要注意TAB鍵和空格的區別。命令前用TAB,否則編譯不通過。同時,並非是C語言中的printf,而是prink。這兩者是有區別的,雖然現在還不是特別清楚。
<2>新建空白文檔,命名為Makefile。在shell下編程,截圖如下:

需要注意的地方有以下幾點:
命名一定要命名為Makefile或者是makefile,這兩個都可以識別,其他的就不行了。並且要把makefile文件要同hello.c文件放置在同一個目錄下。如果只是編寫了hello.c文件,直接用gcc編譯時會提示缺少頭文件。
3.運行命令make生成內核模塊,截圖如下:

由上圖可以看出,在執行命令的過程中同時也顯示出了內核的絕對路徑:/usr/src/linux-header-4.2.0-16-generic
再通過命令ls查看當前位置下的文件,可以看出已經生成了一系列的文件,其中包括要執行的hello.ko的文件。
4.內核模塊的加載,使用命令insmod hello.ko
當然如果直接使用這個命令會提示沒有權限訪問,則需要使用命令su root來成為管理員用戶來訪問hello.ko文件。截圖如下:

通過上圖可以看出剛剛操作的一系列步驟。再轉換為root管理員之后重新執行命令發現終端窗口並沒有反饋什么信息。但是此時已經掛載上了信息,在終端窗口可以通過命令dmesg可以查看當前系統下的各項掛載信息,如下圖所示

信息加載完成后,顯示信息:
[20850.915892]<1>Hello Liu Jianwei! 掛載成功。
5.內核模塊的卸載,使用命令rmmod hello.ko

同樣的,還是需要通過dmesg命令來查看是否卸載成功。
信息加載完成后,顯示信息:
[21517.046098]<2>See you, Liu Jianwei! 卸載成功。
6.全部文件信息展示

雖然只是編寫了兩個文件,但是在生成過程中額外增加了7個文件,是的功能完整。此外,在本次實驗中,Makefile文件采用的是較為高級的寫法,采用普通的寫法會因為系統的原因而不能夠執行。
