首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Linux内核代码中,"EXPORT_SYMBOL“的含义是什么?

在Linux内核代码中,"EXPORT_SYMBOL“的含义是什么?
EN

Stack Overflow用户
提问于 2012-03-23 09:08:31
回答 3查看 64.1K关注 0票数 54

来自这里

代码语言:javascript
运行
复制
 48 struct snd_card *snd_cards[SNDRV_CARDS];
 49 EXPORT_SYMBOL(snd_cards);

我不知道它的意义和为什么它被使用。我试着寻找它,但不理解它的意义。

EN

Stack Overflow用户

发布于 2019-09-11 03:49:21

这是一个很好的解释。

Linux内核代码

Extern是C存储类关键字。在内核中,就像在任何其他C代码中一样,它告诉编译器它限定的变量或函数的定义是在另一个“文件”中实现的,或者更准确地说,是在翻译单元(编程)- Wikipedia中实现的。定义它的翻译单元不应该使用静态限定符。因此,符号表具有与其相对应的条目。在链接时,符号被解析为正常。关于“extern”,没有任何特定的内核。 EXPORT_SYMBOL()是Linux内核头定义的宏。它和外星没有什么共同之处。它告诉kbuild机制,所引用的符号应该是内核符号全局列表的一部分。这反过来又允许内核模块访问它们。当然,内置在内核本身中的代码(相对于模块)可以根据规则C通过外部声明访问任何非静态符号。EXPORT_SYMBOL()机制允许我们导出一个符号供可加载模块使用。有趣的是,由一个模块导出的符号可以被可能依赖它的另一个模块访问! 总之,extern并不是特定于内核的。它用于将声明限定为来自另一个翻译单元的非静态符号.EXPORT_SYMBOL()是特定于Linux内核的。它用于定义的翻译单元,使符号可供可加载模块使用。

因此,EXPORT_SYMBOL只是一种类似于extern的机制,但它只用于可加载模块之间的引用,而不是文件。

要向前移动,我们可以猜到它是由外场完成的,因为外场是C形,是基础。

这是条线索。

https://elixir.bootlin.com/linux/v4.6.7/source/include/linux/export.h#L56

代码语言:javascript
运行
复制
#define EXPORT_SYMBOL(sym)                  \
    __EXPORT_SYMBOL(sym, "")

/* For every exported symbol, place a struct in the __ksymtab section */
#define __EXPORT_SYMBOL(sym, sec)               \
    extern typeof(sym) sym;                 \
    __CRC_SYMBOL(sym, sec)                  \
    static const char __kstrtab_##sym[] __attribute__((section("__ksymtab_strings"), aligned(1)))  = VMLINUX_SYMBOL_STR(sym);               \
    extern const struct kernel_symbol __ksymtab_##sym;  \
    __visible const struct kernel_symbol __ksymtab_##sym    __used __attribute__((section("___ksymtab" sec "+" #sym), unused)) = { (unsigned long)&sym, __kstrtab_##sym }

首先声明一个退出系统。

然后是字符串__kstrtab_##sym == VMLINUX_SYMBOL_STR(sym)。

最后一个extern结构kernel_symbol __ksymtab_##sym ={(无符号长)&sym,__ksymtab_##sym }。_kstrtab##sym记录名称字符串,& sym 记录sym的实际地址,例如函数或变量。

票数 9
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9836467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档