当前位置: 技术问答>linux和unix
linux内核全局变量定义问题!
来源: 互联网 发布时间:2016-04-05
本文导语: 请问各位高手、行家,linux内核代码中如何定义全局变量啊?就是定义此变量之后可以在各内核代码文件中都可以访问和使用!谢谢! | 如果编译到内核,内核中的代码可以用 如果是模块间使用的话,...
请问各位高手、行家,linux内核代码中如何定义全局变量啊?就是定义此变量之后可以在各内核代码文件中都可以访问和使用!谢谢!
|
如果编译到内核,内核中的代码可以用
如果是模块间使用的话,用EXPORT_SYMBOL() 导出后,其他模块就可以使用
|
linux 内核头文件提供了方便来管理你的符号的可见性, 因此减少了命名空间的污染( 将与在内核别处已定义的符号冲突的名子填入命名空间), 并促使了正确的信息隐藏. 如果你的模块需要输出符号给其他模块使用, 应当使用下面的宏定义:
EXPORT_SYMBOL(name);
EXPORT_SYMBOL_GPL(name);
上面宏定义的任一个使得给定的符号在模块外可用. _GPL 版本的宏定义只能使符号对 GPL 许可的模块可用. 符号必须在模块文件的全局部分输出, 在任何函数之外, 因为宏定义扩展成一个特殊用途的并被期望是全局存取的变量的声明. 这个变量存储于模块的一个特殊的可执行部分( 一个 "ELF 段" ), 内核用这个部分在加载时找到模块输出的变量. ( 感兴趣的读者可以看 获知详情, 尽管并不需要这些细节使东西动起来. )
如果你想导出你的变量, 使用 EXPORT_SYMBOL, 你的变量名字就可以了.
EXPORT_SYMBOL(name);
EXPORT_SYMBOL_GPL(name);
上面宏定义的任一个使得给定的符号在模块外可用. _GPL 版本的宏定义只能使符号对 GPL 许可的模块可用. 符号必须在模块文件的全局部分输出, 在任何函数之外, 因为宏定义扩展成一个特殊用途的并被期望是全局存取的变量的声明. 这个变量存储于模块的一个特殊的可执行部分( 一个 "ELF 段" ), 内核用这个部分在加载时找到模块输出的变量. ( 感兴趣的读者可以看 获知详情, 尽管并不需要这些细节使东西动起来. )
如果你想导出你的变量, 使用 EXPORT_SYMBOL, 你的变量名字就可以了.