Re: EXPORT_SYMPOL的功用
※ 引述《omnl ()》之銘言:
: 有先GOOGLE一下 大概知道它的用處
: 我好奇的是 我在不同Module間
: 用extern一樣可以達到module間互相呼叫的功能
: 哪EXPORT_SYMPOL有什麼特別的效果嗎
可以查一下 export_symbol 這個 macro 會發現
#define __EXPORT_SYMBOL(sym, sec) \
extern typeof(sym) sym; \
__CRC_SYMBOL(sym, sec) \
static const char __kstrtab_##sym[] \
__attribute__((section("__ksymtab_strings"))) \
= MODULE_SYMBOL_PREFIX #sym; \
static const struct kernel_symbol __ksymtab_##sym \
__attribute_used__ \
__attribute__((section("__ksymtab" sec), unused)) \
= { (unsigned long)&sym, __kstrtab_##sym }
#define EXPORT_SYMBOL(sym) \
__EXPORT_SYMBOL(sym, "")
裡面也幫你做了 extern 的動作,換言之 extern 是最基本的要求(
這樣 linker 才知道要從這 variable or function 在其他的 object file)
不過他額外幫你做了很多 symbol table 的動作,包括 version 等等計算
我也不是很熟悉,請高手繼續補充
自己的經驗單純 extern ,縱使使用上正常,但會出現 xxxx symbol unknown
的 kernel message
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.188.188
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章