17 驱动模块的符号导出(一个驱动模块调用另一个驱动模块)

本文介绍如何在Linux内核驱动模块中导出符号,使得一个驱动模块能够调用另一个驱动模块的全局函数。通过使用`EXPORT_SYMBOL`宏,可以将函数或变量声明为全局,供其他模块使用。在加载和卸载驱动模块时,需要注意顺序,确保依赖的模块先加载,后卸载,以避免依赖关系导致的卸载失败问题。
摘要由CSDN通过智能技术生成

驱动模块的符号导出(一个驱动模块调用另一个驱动模块)


查看elf文件的信息 :

readelf xxx.ko -a

UND标识的函数在内核符号表里都是“T”,表示是全局函数,也就是说只有全局函数,内核才会帮我们把相应的函数地址转换好

驱动模块里默认情况下不管是函数还是全局变量都是作局部使用(相当于在函数或者变量名前加了“static”)
如果需要作为全局使用,需要使用导出符号“EXPORT_SYMBOL(函数名或者变量)”,来声明函数或者变量为全局使用,提供给其它驱动模块调用


实现一个内核里的全局函数“funca”,在其它驱动模块里调用(myfunc.c):

#include <linux/init.h>
#include <linux/module.h>

void funca(char *str)
{
    printk("In funca : %s\n", str);
}

EXPORT_SYMBOL(funca);
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值