linux 内核export_symbol变量,内核中全局变量的问题

本帖最后由 gg297231604 于 2010-05-25 08:40:49 编辑

我需要在内核中设定一个全局变量,在模块中能够使用它

我在内核代码中的一个C文件定义它:

int hidden_flag = 0;

EXPORT_SYMBOL(hidden_flag);

然后在模块中声明了

extern int hidden_flag;

但编译模块是却提示‘hidden_flag’未定义

另外,在编译内核时,也有几个警告:

警告:数据定义时没有类型或存储类

警告:在‘EXPORT_SYMBOL’的声明中,类型默认为‘int’

警告:函数声明中出现形参名却未指定类型

如果是在模块中定义并调出,编译加载后,用另一个模块调用却没问题

为什么在内核中却不行呢?请大家指点

|

EXPORT_SYMBOL可以导出变量吗?印象中是用来导出函数的..

|

其实就是内核与模块之间的交互问题。

姑且不论内核中的全局变量模块能不能用,这种做法本身并不标准,设计上应该尽量减少全局变量的使用。

比较标准的做法是嵌在具体的设备节点的ioctl操作中,或者借助proc文件系统,或者借助一些成熟的配置交互框架。

|

你只是声明,没有定义啊

int hidden_flag;

extern去掉.

|

你需要在某个地方定义这个变量先 然后再extern 出来

extern 和 EXPORT_SYMBOL并没有帮你定义这个变量

|

只能是EXPORT_SYMBOL(hidden_flag);出了问题了。

|

Linux symbol export method:

[1] If we want export the symbol in a module, just use the EXPORT_SYMBOL(xxxx) in the C or H file.

And compile the module by adding the compile flag -DEXPORT_SYMTAB.

Then we can use the xxxx in the other module.

[2] If we want export some symbol in Kernel that is not in a module such as xxxx in the /arch/ppc/fec.c.

Firstly, define the xxxx in the fec.c;

Secondly, make a new file which contain the "extern" define the xxxx(for example, extern int xxxx);

Lastly, in the ppc_ksyms.c we includes the new file, and add the EXPORT_SYMBOL(xxxx).

Then we can use the xxxx.

|

楼主的方法应该没有问题,把内核清除重新编译一下,看看

|

问题的真正原因是由于你在编译内核时的Makefiel中没有加入一个宏定义-DEXPORT_SYMTAB,解决方法是在内核根目录下的Makefile的

HOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer

后面增加-DEXPORT_SYMTAB即可。

如果是编译模块那么可以在Makefile中手动添加-DEXPORT_SYMTAB即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值