[英]how to define linux kernel variable accessed by several source file?
几个小时我已经搜索了我的问题的答案,但没有用。
我的问题:我想定义一个可以通过linux内核中的两个文件访问(w / r)(共享)的变量: source/arch/x86/kvm/x86.c
和source/kernel/sched/core.c
。
我尝试失败:我尝试使用export_symbol
在export_symbol
中定义全局x86.c
。 但编译错误消息说:
var是未定义的引用
还有其他解决方案吗? 我是linux内核编程的新手。 提前致谢。
当你想在内核模块中使用全局变量时,你应该使用EXPORT_SYMBOL()或EXPORT_SYMBOL_GPL()或EXPORT_SYMBOL_GPL_FUTURE():例如:
int myvar;
EXPORT_SYMBOL(myvar);
那你应该用
extern int myvar
在使用它之前,在另一个要使用它的文件中。
您可以在内核源代码中的三个不同级别考虑内核符号(函数或数据对象,变量)及其可见性:
"static", - visible only within their own source file
"external" - visible to any other code built into the kernel itself
"exported" - visible and available to any loadable module.
您还可以考虑其他模块应如何使用导出的符号,通常使用以下方法之一:
EXPORT_SYMBOL() - exports to any loadable module, or
EXPORT_SYMBOL_GPL() - exports only to GPL-licensed modules.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.