当前位置:  技术问答>linux和unix

内核中全局变量的问题

    来源: 互联网  发布时间:2016-11-26

    本文导语:  本帖最后由 gg297231604 于 2010-05-25 08:40:49 编辑 我需要在内核中设定一个全局变量,在模块中能够使用它 我在内核代码中的一个C文件定义它: int hidden_flag = 0; EXPORT_SYMBOL(hidden_flag); 然后在模块中声明了 extern int hidden...

本帖最后由 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即可。

    
 
 

您可能感兴趣的文章:

  • linux内核全局变量定义问题!
  • 模块编程中对内核全局变量引用的问题
  • linux内核怎么定义汇编全局变量及在c文件中使用这个变量?有关0。11下的字符回显
  • 内核模块,使用全局变量current, 包含#include <linux/kernel.h>编译出错?
  • 用户空间如何访问内核变量。
  • linux内核模块中,局部变量过多造成死机怎么解决啊?
  • 用户空间如何访问内核变量
  • 如何引用内核模块中的变量
  • linux内核源码中变量前面的点表示什么作用?
  • uboot是如何把环境变量传递给内核的?
  • 两个内核模块之间的如何调用变量,函数?
  • 在内核中能读取系统的环境变量吗
  • DEFINE_WAIT(__wait)这宏把__wait变量定义在了进程的内核堆栈中,则另一进程使用wake_up时,是如何访问到__wait变量的呢?
  • 系统的环境变量与内核是什么关系??
  • PHP内核探索:变量概述
  • 求助:linux-2.6.28内核编译RT2501内核提示内核net_device数据结构缺少成员变量
  • 设计一个在/proc中实现clock文件的模块,该clock文件只支持文件的read操作,该操作访问内核变量xtime,很简单的一个内核模块实验,我第一
  • PHP内核探索:变量存储与类型使用说明
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 内核栈~ 内核线程 ~用户线程 之间关系 问题
  • 把redhat9.0的2.4.20-8内核升级为2.4.22内核时遇到的问题
  • 新手的菜鸟问题:不同内核版本下编译的程序能否互相调用,是否需要在同一内核下重新编译.
  • 问一个小白问题,在交叉编译时,系统内核和开发板的内核有没有相关性?
  • Android 内核移植问题 要求识别SATA硬盘 请问内核的make menuconfig 要如何配置?求高手
  • 修改内核代码问题:如何编译修改的单个文件而不用重建整个内核?
  • 请教一个问题:程序在Linux 2.4.20内核上跑无问题。但在2.4.19内核上跑就出现段错误现象。查了一星期,毫无头绪,万望各位指点。
  • 内核版本问题 GCC版本问题
  • linux内核安装问题 , 有点疑惑~
  • 内核升级问题!!!!!
  • 内核问题
  • 问个编译内核的简单问题~~~
  • 内核重编译前的小白问题
  • 请教一个linux进程内核栈的问题
  • 升级linux内核时,2.6.21.5内核编译成功,但启动时出现panic,请看问题详细描述!
  • 菜鸟问题,内核编译以后,启动不了。系统提示内核文件文件找不到!
  • 关于如何使用内核函数的问题
  • 安装内核头文件问题
  • Linux 内核模块编程问题!!!!
  • linux 内核进程堆问题,大家指教
  • Linux内核中影响tcp三次握手的一些协议配置
  • Fedora Core 2自带的内核升级程序下载下来内核后,要不要再编译一遍内核?
  • TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项
  • 进程内核栈和操作系统内核栈的关系
  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • Linux中内核线程不访问内核态地址空间?
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • 2.6内核下编译2.4内核
  • linux内核中的likely宏和unlikely宏介绍及用法
  • 谁能提供kgdb内核补丁内核模块的下载
  • CentOS 6.5 下载地址及如何升级内核(kernel)版本到 3.10.28


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3