Linux内核一个模块调另一个模块的函数

  前几天,需要在一个内核模块A中添加一个新功能。这个新功能用到了另一个内核模块B中的函数C。我将相关的头文件include之后,加载A模块时,总是出错,说用到的那个函数C找不着。

  怎么回事?以前没接触过内核编程的,找了个小牛问了一下,原来是Linux2.6内核不会自动的将非static 函数和变量导入到kernel 空间,需要用到EXPORT_SYMBOL来对函数做一下标记才行。

 /* in module B*/

void C()

{

......

}

EXPORT_SYMBOL(C);


/*in module A*/

void func_in_A()

{

    extern void c(void);

    ......

    C();

   ......

}


OK了,这下子编译的时候,虽然还会报warning(不报才怪了),但是insmod时,不会出错了。


上网上找了找别人写的这方面的文章,贴到下面,用得着的朋友,都看看吧,也不用到处找了


一个模块mod1中定义一个函数func1;在另外一个模块mod2中定义一个函数func2,func2调用func1。
在模块mod1中,EXPORT_SYMBOL(func1);
在模块mod2中,extern int func1();
就可以在mod2中调用func1了。

=================================

EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的。
2.6就必须用EXPORT_SYMBOL() 来导出来(因为2.6默认不到处所有的符号)。

1、EXPORT_SYMBOL的作用是什么?

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值