Kernel. EXPORT_SYMBOL解析
{
unsigned long value;
const char *name;
};
/* For every exported symbol, place a struct in the __ksymtab section */
#define __EXPORT_SYMBOL(sym, sec) /
__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, "")
#define EXPORT_SYMBOL_GPL(sym) /
__EXPORT_SYMBOL(sym, "_gpl")
#endif
1>. __atrribute__ 指定变量或者函数属性。在此查看详细 http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Variable-Attributes.html#Variable-Attributes。