Sag*_*ain 15 linux macros kernel kernel-module linux-kernel
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);
Run Code Online (Sandbox Code Playgroud)
该宏在内核代码中多次出现......
osg*_*sgx 16
将一些符号(例如函数)定义为可导出(从内核可加载模块中看)是宏.如果符号没有"EXPORT_SYMBOL",则无法从模块访问该符号.
EXPORT_SYMBOL_GPL将仅在GPL许可模块中显示符号,并且EXPORT_SYMBOL- 在具有任何许可证的模块中.
http://lwn.net/Articles/154602/ - 关于EXPORT_SYMBOL_GPL(2005,corbet)的值
插入可加载模块时,它对内核函数和数据结构的任何引用都必须链接到当前运行的内核.但是,模块加载器不提供对所有内核符号的访问; 只有已明确导出的那些可用.
出口有两种形式:香草(EXPORT_SYMBOL)和仅GPL(EXPORT_SYMBOL_GPL).前者可用于任何内核模块,而后者不能被任何不带有GPL兼容许可证的模块使用.