内核模块中函数的导出和使用
2014-11-27 15:23
465 查看
http://blog.chinaunix.net/uid-22556372-id-1773420.html
首先一个模块:内容不多,plus.c和Makefile
plus.c
Makefile:
然后make一下,在下面的模块使用这个导出函数之前记得insmod,前提是你加载这个模块,
导出plus函数到符号表当中.下面就是使用这个导出函数的模块
hello.c
Makefile:
然后再make这个模块,insmod后就可以dmesg查看结果了.
提醒: 1.hello.c中要先声明要使用的函数.比如我的:int plus(int a,int b);
2.这里要保证两个模块在同一个目录下,(和上次我的猜想不一致),后经过验证,不在同一个目录下
会不认识最初导出的那个函数符号。有点想不通,既然不能在同一个目录下,却还不能写多个makefile。郁闷中。不知道有没高手帮我解决下。
首先一个模块:内容不多,plus.c和Makefile
plus.c
#include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("GPL"); static int plus_init(void) { printk("<0>" "\nplus_init success!\n"); return 0; } static void plus_exit(void) { printk("<0>" "\nplus_exit success!\n"); } int plus(int a, int b) { return (a+b); } module_init(plus_init); module_exit(plus_exit); EXPORT_SYMBOL(plus); |
ifeq ($(KERNELRELEASE),) KERNELDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: make -C $(KERNELDIR) M=$(PWD) modules else obj-m :=plus.o endif |
导出plus函数到符号表当中.下面就是使用这个导出函数的模块
hello.c
#include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("GPL"); int plus(int a,int b); //这里记得要声明一下 static int hello_init(void) { printk("<0>" "\nhello_init success!\n"); printk("<0>" "%d\n",plus(10,20)); return 0; } static void hello_exit(void) { printk("<0>" "\nhello_exit success!\n"); } module_init(hello_init); module_exit(hello_exit); |
ifeq ($(KERNELRELEASE),) KERNELDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: make -C $(KERNELDIR) M=$(PWD) modules else obj-m :=hello.o endif |
提醒: 1.hello.c中要先声明要使用的函数.比如我的:int plus(int a,int b);
2.这里要保证两个模块在同一个目录下,(和上次我的猜想不一致),后经过验证,不在同一个目录下
会不认识最初导出的那个函数符号。有点想不通,既然不能在同一个目录下,却还不能写多个makefile。郁闷中。不知道有没高手帮我解决下。
相关文章推荐
- 查找内核模块的导出函数
- driver: linux2.6 内核模块导出函数实例(EXPORT_SYMBOL)
- 检测内核已加载模块的所有导出函数是否被inlinehook
- DLL模块例2:使用__declspec(dllexport)导出函数,extern "C"规范修饰名称,隐式连接调用dll中函数
- driver: linux2.6 内核模块导出函数实例(EXPORT_SYMBOL) 【转】
- 使用 DEF (模块定义) 文件从 DLL 导出函数和类
- 内核所有模块导出函数inlinehook检测
- driver: linux2.6 内核模块导出函数实例(EXPORT_SYMBOL)
- driver: linux2.6 内核模块导出函数实例(EXPORT_SYMBOL)
- DLL模块例1:使用.def模块导出函数,规范修饰名称,显示连接调用dll中函数
- 内核模块导出符号使用
- 内核符号导出给其他模块使用的简单例子
- driver: linux2.6 内核模块导出函数实例(EXPORT_SYMBOL)
- 调试使用了函数模块的程序时需要注意的一个小问题
- DLL学习——使用DLL里的导出函数
- 使用kgdb调试linux内核及内核模块
- Windows 中SQLite3 使用(2) -- 基本导出函数
- LED显示(4):使用内核IO操作及延时函数
- 使用kgdb调试linux内核及内核模块
- s3c2410_gpio_cfgpin等内核导出函数