linux內核添加模塊


參考:

http://blog.csdn.net/gaoguoxin2/article/details/50220665

動態添加模塊不需要編譯內核。

LINUX的模塊主要由6部分組成:

      1、模塊的加載函數(必須)

            當通過insmod或modprobe命令加載內核模塊時,模塊的加載函數會自動被內核執行,完成本模塊的相關初始化工作。

      2、模塊的卸載函數(必須)

            當通過rmmod命令卸載某模塊時,模塊的卸載函數會自動被內核執行,完成與模塊加載函數相反的功能。

      3、模塊許可證聲明

            模塊許可證(LICENSE)聲明描述內核模塊的的許可權限,如果不聲明LICENSE,模塊被加載時,將接到內核被污染的警告。

      4、模塊參數(可選)

            模塊參數是模塊被加載的時候可以被傳遞給它的值,它本身對應模塊內部的全局變量。

      5、模塊導出符號(可選)

            內核模塊可以導出符號(symbol,對應於函數或者是變量),這樣其他模塊就可以使用本模塊中的變量或者是函數。

      6、模塊作者等信息聲明(可選)

 

      知道了LINUX模塊的組成后,我們來編寫一個簡單的LINUX內核模塊hello.c

      在內核源代碼樹形目錄的drivers目錄下新建一個文件夾,名字為testmod,然后進入此文件夾中,創建我們的.c源文件,hello.c:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

static int hello_init(void)
{
printk(KERN_ALERT "Hello world enter!\n");
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT "Hello world exit...\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("rao");

 

源代碼編寫完之后,接下來我們添加MAKFILE編譯文件,首先修改drvier目錄下的MAKEFILE文件,添加testmod目錄到此MAKEFILE

修改drvier目錄下的MAKEFILE文件,在最后一行添加:

  obj-y += testmod/

然后在testmode目錄下,添加一個MAKEFILE 文件,文件的內容為:

  obj-m := hello.o

做好上面的准備工作之后,我們開始編譯模塊文件,使用如下的編譯命令:

      make -C /usr/src/kernels/`uname -r` M=/usr/src/kernels/`uname -r`/drivers/testmod  modules

     輸入以上命令之后,我們將會成功得到模塊文件,hello.ko

 

     當模塊文件生成之后,使用命令insmod hello.ko加載模塊,用命令dmesg  | tail -1, 我們將看到屏幕上打印Hello world enter!

     使用命令rmmod hello.ko卸載模塊,用命令dmesg  | tail -1,我們將在屏幕看到打印Hello world exit...

 


免責聲明!

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



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