insmod 找不到symbol的处理

在尝试insmod dmx kernel object (ko)时,由于不使用的tuner类型导致找不到相应函数,insmod会失败。解决方案是使用动态加载,通过dvb_attach和dvb_detach宏实现。在编译时,还需在dmx ko中定义一个假的tuner接口来避免编译错误。通过这种方法,可以确保insmod不会因为未找到symbol而出错。
摘要由CSDN通过智能技术生成

场景:

        一个dmx ko, 需要兼容很多tuner类型,但只会用到其中一种;那么在code会attach很多种tuner, 调用到各种tuner自己定义的接口, 具体是哪种类型的tuner会在dts种指定类型;dmx ko不需要改动。

        存在的问题:如果insmod dmx ko,那么因为没有用到的tuner的函数符合肯定找不到,所以insmod dmx ko会失败。

解决办法:

       1. attach 命令不应该直接调用tuner接口,而是采用动态加载的做法,方法如下:

#ifdef CONFIG_MEDIA_ATTACH
#define dvb_attach(FUNCTION, ARGS...) ({ \
void *__r = NULL; \
typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
printk(KERN_ERR "DVB: pengcc find symbol "#FUNCTION"()\n"); \
if (__a) { \
__r = (void *) __a(ARGS); \
if (__r == NULL) \

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值