【问题标题】:What is EXPORT_SYMBOL_GPL in Linux kernel code?Linux 内核代码中的 EXPORT_SYMBOL_GPL 是什么?
【发布时间】:2014-05-07 20:56:29
【问题描述】:

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);

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 1970-01-01
      • 2019-12-03
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 2020-08-23
      • 1970-01-01
      相关资源
      最近更新 更多