场景:
一个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) \
symbol_put(FUNCTION); \
} else { \

在尝试insmod dmx kernel object (ko)时,由于不使用的tuner类型导致找不到相应函数,insmod会失败。解决方案是使用动态加载,通过dvb_attach和dvb_detach宏实现。在编译时,还需在dmx ko中定义一个假的tuner接口来避免编译错误。通过这种方法,可以确保insmod不会因为未找到symbol而出错。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



