Linux內核模塊編程小試煉

一、前言

這學期選修了一門Linux內核原理課程,雖然課上聽懂的真的不是很多(老師講的很底層,很細節,但是奈何本人對自己完全不知曉的東西抗拒心還蠻大的,只是認真聽了自己接觸過的東西的原理,算是蠻可惜的吧,應該學習的時候課下結合實踐和自學),做大作業的時候涉及到了內核模塊編譯,本科階段接觸過重編譯內核的過程,這次學到了新的方法,通過添加內核模塊編譯,覺着值得記錄一下,這裏放一下一個簡單Hello World版本的內核模塊編譯算是記錄~

二、參考

Linux內核模塊的一些知識點總結:http://www.360doc.com/content/16/0802/03/33848986_580142210.shtml

三、知識點簡介

爲了使系統功能能夠更靈活的擴充,Linux支持內核的動態擴展,即在系統運行時給內核增加新的功能即模塊module,module是一段可以被動態鏈接的目標代碼(.ko),它可由insmod命令動態的裝載並鏈接到正在運行的內核。鏈接後就成了內核的一部分,直到用rmmod命令解除鏈接並卸載。

內核模塊不能調用C標準函數庫(glibc庫),只能調用linux內核導出的內核函數

一般內核模塊程序源碼構成如下表所示,頭文件、許可聲明、加載函數和卸載函數都是內核編程中必不可少的部分。

頭文件 #include <linux/init.h>            

           #include <linux/module.h>

許可聲明 MODULE_LICENSE("Dual BSD/GPL");
加載函數 static int __init hello_init(void)
卸載函數 static void __exit hello_exit(void)

 

模塊加載函數必須用宏“module_init”指定,它返回整型值。若初始化成功則返回0,若失敗則返回一個負值作爲錯誤碼;模塊卸載函數必須用宏“module_exit”指定,無返回值。其中“__init”和“__exit”都是宏,利用了gcc的擴展關鍵字,分別要求編譯器將所聲明函數的目標代碼放入“init.text”段和“exit.text”段中,而static關鍵字爲了將該函數名的可見性控制在本文件內。模塊許可證聲(MODULE_LICENSE)明描述內核模塊的許可權限 如果不聲明LICENSE,模塊被加載時,將收到內核被污染(kernel tainted)的警告。

四、過程

4.1 環境準備

使用的是Ubuntu版本的Linux64位系統,系統裝完之後下載相關依賴包(vim、gedit、gcc、build-essential、libc6-dev等)如果出現各種包找不到的問題,放輕鬆直接百度搜搜怎麼解決即可(一般apt-get install update之後再試試可以解決),這個問題感覺就是ubuntu系統缺包比較多導致的,缺啥補啥就行。

另外需要使用root用戶操作(Ubuntu下默認都是不允許以root用戶進行登錄,需要使用sudo passwd root定義root密碼後su root輸入正確密碼進入root用戶)

4.2 內核模塊程序編寫

可以選擇vim 一個新文件編輯然後加上.c後綴,但是Ubuntu系統吧vim真的不是很好用,所以建議下載gedit編輯器然後gedit命令打開以後正常文本編寫代碼,code完之後保存成c文件即可(加個後綴.c即可)

4.3 Makfile編寫

在內核模塊代碼相同路徑下創建Mafile文件並寫入編譯內核模塊代碼的腳本(普通的c程序可以直接gcc XXX.c -o XXX編譯生成.o文件執行即可,當然也可makefile,但是內核模塊程序需要生成.ko目標鏈接,方法有所不同,這點需要注意 )

4.4 內核模塊編譯

路徑下使用make命令編譯,編譯成功ls查看會發現生成.o、.ko、.mod.c、.mod.o、.order、.sysmvers等後綴文件

4.5 內核模塊加載

使用insmod XXX.ko加載內核模塊,使用lsmod | head可查看剛剛加載的內核模塊,並且使用dmesg可以查看加載內核模塊成功後的輸出語句

4.6 內核模塊卸載

使用rmmod XXX卸載內核模塊,使用dmesg可以查看卸載內核模塊成功後的輸出語句

4.8 刪除編譯

路徑下make clean即可

五、總結

這次作業中給我最深的感覺就是,雖然你這個作業你可能一開始摸不着頭腦,但是百度一下看看有沒有相似的,然後總結這個題他需要做些什麼,然後去準備這些涉及到的方面的知識並一點點的實踐有個大體基礎,然後集成完成整個作業的設計實現。當然了這個過程中可能會因爲其他模塊基礎知識的欠缺會採很多坑,但用時間去填坑也算是一種成就感叭(苦中作樂笑:)

不管怎麼說,相信積少成多,相信腳踏實地,相信明明白白做事。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章