EXPORT_SYMBOL标签
来源:互联网 发布:淘宝注册不用手机验证 编辑:程序博客网 时间:2024/05/01 20:49
一个模块mod1中定义一个函数func1;在另外一个模块mod2中定义一个函数func2,func2调用func1。
在模块mod1中,EXPORT_SYMBOL(func1);
在模块mod2中,extern int func1();
就可以在mod2中调用func1了。
参考:
http://topic.csdn.net/u/20070910/09/ee2cff13-9179-41e3-9292-4fd73261f709.html
http://www.dev-archive.com/msdn-archive/524/kernel-driver-5244619.shtm
mod1.c
#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>
static int func1(void)
{
printk("In Func: %s.../n",__func__);
return 0;
}
EXPORT_SYMBOL(func1);
static int __init hello_init(void)
{
printk("Module 1,Init!/n");
return 0;
}
static void __exit hello_exit(void)
{
printk("Module 1,Exit!/n");
}
module_init(hello_init);
module_exit(hello_exit);
#############################################################
mod2.c
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>
static int func2(void)
{
extern int func1(void);
func1();
printk("In Func: %s.../n",__func__);
return 0;
}
static int __init hello_init(void)
{
printk("Module 2,Init!/n");
func2();
return 0;
}
static void __exit hello_exit(void)
{
printk("Module 2,Exit!/n");
}
module_init(hello_init);
module_exit(hello_exit);
################################################################
Makefile
ifneq ($(KERNELRELEASE),)
obj-m := XXXX.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
rm -rf Module.symvers *.ko *.o *.mod.c .*.cmd .tmp_versions
endif
################################################################
#insmod ./mod1.ko
#insmod ./mod2.ko
#rmmod mod2
#rmmod mod1
Jan 11 11:59:17 wangyao-desktop kernel: [ 9886.801010] Module 2,Exit!
Jan 11 11:59:21 wangyao-desktop kernel: [ 9891.450214] Module 1,Exit!
Jan 11 12:05:29 wangyao-desktop kernel: [10258.385014] Module 1,Init!
Jan 11 12:05:38 wangyao-desktop kernel: [10267.465923] Module 2,Init!
Jan 11 12:05:38 wangyao-desktop kernel: [10267.465928] In Func: func1...
Jan 11 12:05:38 wangyao-desktop kernel: [10267.465930] In Func: func2...
Jan 11 12:05:50 wangyao-desktop kernel: [10280.091755] Module 2,Exit!
Jan 11 12:05:57 wangyao-desktop kernel: [10287.332596] Module 1,Exit!
可见,在mod2中的func2函数成功的调用了mod1中的func1函数。
注意:
在编译mod2的时候,出现一个WARNING:
root@wangyao-desktop:~/modules/export_symbol/mod2# make
make -C /lib/modules/2.6.22-14-generic/build SUBDIRS=/root/modules/export_symbol/mod2 modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.22-14-generic'
Building modules, stage 2.
MODPOST 1 modules
WARNING: "func1" [/root/modules/export_symbol/mod2/mod2.ko] undefined!
make[1]: Leaving directory `/usr/src/linux-headers-2.6.22-14-generic'
这主要是因为在编译连接的时候还没有和内核打交道,当然找不到symbol了,但是由于你生成的是一个内核模块,所以LD不提示error,而是给出一个warning,寄希望于在insmod的时候,内核能够把这个symbol连接上。
- EXPORT_SYMBOL标签
- EXPORT_SYMBOL
- EXPORT_SYMBOL
- EXPORT_SYMBOL
- EXPORT_SYMBOL
- EXPORT_SYMBOL
- EXPORT_SYMBOL
- EXPORT_SYMBOL
- EXPORT_SYMBOL()
- EXPORT_SYMBOL()
- EXPORT_SYMBOL
- EXPORT_SYMBOL
- EXPORT_SYMBOL
- EXPORT_SYMBOL
- 关于EXPORT_SYMBOL
- 关于EXPORT_SYMBOL
- EXPORT_SYMBOL解析
- 关于EXPORT_SYMBOL
- ASP.NET采集系统万能正则表达式
- JAVA基础
- xhost配置(转)
- 关于Eclipse中的快捷键
- 【转】.NET数据库应用程序中存储过程的应用
- EXPORT_SYMBOL标签
- Google Map的发现
- Java关键字final、static使用总结
- 一些学习习惯
- jfreechart在Linux上不能显示中文
- *项目aix5.3+hacmp5.4+oracle10gRAC
- 转:cerr cout clog 的区别
- GSM-Track 开发日志 GSM-Track开发 STEP 1
- J2EE经典面试题