Linux內核模塊動態添加方法


今天下午通過一番折騰,終於琢磨除了Linux內核模塊的動態加載方法,網上大部分教程基於舊版本做的,有很多地方不一樣,走了很多彎路,不過最后終於成功了,方法如下:

1、建立C++源文件,假設文件目錄為path,文件名為hello.c源代碼如下:

#include <linux/init.h>

#include <linux/module.h>

#include <linux/kernel.h>

 

static int hello_init(void)

{

         printk(KERN_ALERT "Hello World!/n");

         return 0;

}

 

static void hello_exit(void)

{

         printk(KERN_ALERT "Bye World!/n");

}

 

module_init(hello_init);

module_exit(hello_exit);

 

MODULE_LICENSE("GPL");

MODULE_AUTHOR("WFJ");

注意:這里的頭文件需要根據系統內核的具體情況來使用,不是所有版本都用一樣的頭文件,一開始我的編譯錯誤就是因為頭文件使用不當產生的。

2、寫Makefile,內容如下:

 

obj-m := hello.o

KERNELBUILD :=/usr/src/linux-headers-3.2.0-24-generic-pae

default:

       make -C $(KERNELBUILD) M=$(shell pwd) modules

clean:

       rm -rf *.o  *.ko *.mod.c .*.cmd .tmp_versions *.order *.symvers

這里,KERNELBUILD后面的路徑也用根據你自己系統的情況決定,基本是/usc/src/your_kernel_name

3、編譯源文件,直接make就可以,Makefile里的default已經給出了編譯規則,clean的規則也給出了,可以自行修改。

4、加載模塊 insmod hello.ko

5、觀察是否成功 dmesg可以看到系統的內核模塊信息。

6.卸載模塊 rmmod hello.ko

 

     By   Air_Fighter  

2012.07.20


免責聲明!

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



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