linux內核模塊編程實例


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文件采用的是較為高級的寫法,采用普通的寫法會因為系統的原因而不能夠執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM