Chinaunix首页 | 论坛 | 博客
  • 博客访问: 202720
  • 博文数量: 77
  • 博客积分: 1749
  • 博客等级: 上尉
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-28 18:27
文章分类
文章存档

2012年(28)

2011年(49)

分类: LINUX

2011-11-20 15:01:07

在自己编译的内核中加入了一个函数,函数在driver中有使用到,并且extern声明过了,结果在make生成ko的时候报错了,说找不到该函数。

解决办法: 在函数体后面加上 EXPORT_SYMBOL(函数名) 即可。

EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用


Linux symbol export method:
[1] If we want export the symbol in a module, just use the EXPORT_SYMBOL(xxxx) in the C or H file.
    And compile the module by adding the compile flag -DEXPORT_SYMTAB.
    Then we can use the xxxx in the other module.
[2] If we want export some symbol in Kernel that is not in a module such as xxxx in the /arch/ppc/fec.c.
    Firstly, define the xxxx
 in the fec.c;
    Secondly, make a new file which contain the "extern" define the 
xxxx(for example, extern int xxxx
);
    Lastly, in the ppc_ksyms.c we includes the new file, and add the EXPORT_SYMBOL(
xxxx
).
    Then we can use the 
xxxx.

使用时注意事项:
在使用EXPORT_SYMBOL 的.c文件中 需要 #include 文件。
// 先写函数
func_a ()
{

}
//再使用EXPORT_SYMBOL
EXPORT_SYMBOL(func_a);

阅读(987) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~