Chinaunix首页 | 论坛 | 博客
  • 博客访问: 582502
  • 博文数量: 353
  • 博客积分: 1104
  • 博客等级: 少尉
  • 技术积分: 1457
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-23 23:02
个人简介

1、刚工作时做Linux 流控;后来做安全操作系统;再后来做操作系统加固;现在做TCP 加速。唉!没离开过类Unix!!!但是水平有限。。

文章存档

2015年(80)

2013年(4)

2012年(90)

2011年(177)

2010年(1)

2009年(1)

分类:

2012-06-09 19:45:36

原文地址:EXPORT_SYMBOL 作者:leonwang202

    和我们通常写程序不同,如果仅仅是全局变量,虽然编译内核的时候能连接成功,但是连接之后再就没有办法使用这个变量了
    而模块的加载是运行时的,它引用某个变量时,内核需要解析它,否则模块不能工作,EXPORT_SYMBOL 的定义如下

  1. #define __EXPORT_SYMBOL(sym, sec) \
  2.         extern typeof(sym) sym; \
  3.         __CRC_SYMBOL(sym, sec) \
  4.         static const char __kstrtab_##sym[] \
  5.         __attribute__((section("__ksymtab_strings"))) \
  6.         = MODULE_SYMBOL_PREFIX #sym; \
  7.         static const struct kernel_symbol __ksymtab_##sym \
  8.         __attribute_used__ \
  9.         __attribute__((section("__ksymtab" sec), unused)) \
  10.         = { (unsigned long)&sym, __kstrtab_##sym }

它放在固定的节,这样内核解析的时候就能在此节里找符号了,之后的重定位和普通的连接原理类似.

-------------------------------------------------------------------------------------------

EXPORT_SYMBOL宏的用法:

在a.c中这样写:
int var = 100;   //var是全局的.
EXPORT_SYMBOL(var);


然后在b.c中调用它的话就:
extern int var;
阅读(214) | 评论(0) | 转发(0) |
0

上一篇:内存屏障(Memory Barriers)

下一篇:top命令

给主人留下些什么吧!~~