EXPORT_ SYMBOL代码实现
时间: 2023-08-02 09:11:01 浏览: 43
EXPORT_SYMBOL是一个宏,定义在Linux内核的头文件`<linux/module.h>`中,其定义如下:
```
#define EXPORT_SYMBOL(sym) \
extern typeof(sym) sym; \
EXPORT_SYMBOL_GPL(sym)
```
其中,`EXPORT_SYMBOL_GPL`是一个函数,用于将符号导出到GPL许可证的模块中,其定义如下:
```
#define EXPORT_SYMBOL_GPL(sym) \
__EXPORT_SYMBOL(sym, __kabi_##sym##_is_gpl_compatible)
```
`__EXPORT_SYMBOL`是一个函数,用于将符号导出到所有模块中,其定义如下:
```
#define __EXPORT_SYMBOL(sym, is_gpl) \
extern typeof(sym) sym __attribute__((__visibility__("default"))); \
__kabi_##sym##_is_##is_gpl(); \
static const char __kstrtab_##sym[] \
__attribute__((section("__ksymtab_strings"), aligned(1))) \
= __stringify(sym); \
static const struct kernel_symbol __ksymtab_##sym \
__used __attribute__((section("__ksymtab"), aligned(sizeof(void *)) )) \
= { \
.addr = (unsigned long)&sym, \
.name = __kstrtab_##sym, \
}
```
在使用EXPORT_SYMBOL导出符号时,我们只需要简单地调用该宏即可,例如:
```
void my_func(void);
EXPORT_SYMBOL(my_func);
```
这样就可以将my_func函数导出到其他模块中,供其调用和使用。