Linux内核代码中的EXPORT_SYMBOL_GPL是什么?

时间:2014-03-28 11:54:15

标签: linux macros linux-kernel kernel kernel-module

Linux内核代码中的EXPORT_SYMBOL_GPL是什么?

下面是一段代码,其中包含EXPORT_SYMBOL_GPL

62 struct resource *platform_get_resource(struct platform_device *dev,
 63                                        unsigned int type, unsigned int num)
 64 {
 65         int i;
 66 
 67         for (i = 0; i < dev->num_resources; i++) {
 68                 struct resource *r = &dev->resource[i];
 69 
 70                 if (type == resource_type(r) && num-- == 0)
 71                         return r;
 72         }
 73         return NULL;
 74 }
 75 EXPORT_SYMBOL_GPL(platform_get_resource);

该宏在内核代码中多次出现......

1 个答案:

答案 0 :(得分:16)

将某些符号(例如函数)定义为可导出(从内核可加载模块中看)是宏。如果符号没有&#34; EXPORT_SYMBOL&#34;,则无法从模块访问它。

EXPORT_SYMBOL_GPL仅在GPL许可模块中显示符号,并在具有任何许可的模块中显示EXPORT_SYMBOL

http://lwn.net/Articles/154602/ - 关于EXPORT_SYMBOL_GPL(2005,corbet)的值

  

当插入可加载模块时,它对内核函数和数据结构的任何引用都必须链接到当前运行的内核。但是,模块加载器不提供对所有内核符号的访问;只有那些已经明确导出的人才可以使用。

     

导出有两种形式:vanilla(EXPORT_SYMBOL)和GPL-only(EXPORT_SYMBOL_GPL)。前者可用于任何内核模块,而后者不能被任何不带有GPL兼容许可证的模块使用。