内核 2.6.26 下的驱动模块 "Unknown symbol in module" 问题

gilbertz 2008-10-09 11:03:16
加精
最简单的示例程序,写两个模块,分别为A和B,在A中导出了一些函数,而在B中使用A导出的函数。模块都使用GPL。
问题是在2.6.22和2.6.24下运行加载都很正常,当在2.6.26内核下加载时却出现了了Unknow symbol in module的错误。详见下面的具体描述。

两个模块的源码如下:

// Module A (mod_a.c)
#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>

static int func1(void)
{
printk("In Func: %s...\n",__func__);
return 0;
}

// Export symbol func1
EXPORT_SYMBOL(func1);

static int __init hello_init(void)
{
printk("Module 1,Init!\n");
return 0;
}

static void __exit hello_exit(void)
{
printk("Module 1,Exit!\n");
}

module_init(hello_init);
module_exit(hello_exit);



// Module B (mod_b.c)
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>

static int func2(void)
{
extern int func1(void);
func1();
printk("In Func: %s...\n",__func__);
return 0;
}

static int __init hello_init(void)
{
printk("Module 2,Init!\n");
func2();
return 0;
}

static void __exit hello_exit(void)
{
printk("Module 2,Exit!\n");
}

module_init(hello_init);
module_exit(hello_exit);


Makefile for Module A
[code=BatchFile]
obj-m += mod1.o
mod1-y := mod_a.o

KVERSION = $(shell uname -r)

all:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
rm -f *.o *.ko *.cmd
[/code]

Makefile for Module B
[code=BatchFile]
obj-m += mod2.o
mod2-y := mod_b.o

KVERSION = $(shell uname -r)

all:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
rm -f *.o *.ko *.cmd
[/code]

编译完成后开始加载模块:
[code=BatchFile]
#insmod ./mod1.ko
#insmod ./mod2.ko
FATAL: Error inserting mod2 (/home/user/test/mod2.ko): Unknown symbol in module, or unknown parameter (see dmesg)
#dmesg
[ 7029.008527] mod2: no symbol version for func1
[ 7029.008534] mod2: Unknown symbol func1
[/code]

在 /proc/kallsyms 里可以找到module A导出的symbol。
内核2.6.26版本以前都很正常,只有2.6.26版出现这个错误。请高手帮忙~谢谢
...全文
20790 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
caixiaowu 2012-10-26
  • 打赏
  • 举报
回复
回复为了看15楼大牛.
chrisyang168 2012-10-18
  • 打赏
  • 举报
回复
謝謝分享
Pedone 2012-08-19
  • 打赏
  • 举报
回复
make
woshixiaoxian 2012-07-25
  • 打赏
  • 举报
回复
[Quote=引用 46 楼 的回复:]

可是我试了下怎么还是有"WARNING: ***.ko undefined!"的警告呢?
我的A模块makefile
Perl code

#ifeq ($(KERNELRELEASE),)
#export MMZ_SRC_BASE=$(PWD)
#endif

include $(PWD)/../Makefile.param

obj-m := -DEXPORT_SYMTAB
obj-……
[/Quote]


跟你问题一样,用上面的方法都解决不了问题
woshixiaoxian 2012-07-25
  • 打赏
  • 举报
回复
遇到同样问题,为了看15楼
--justin-- 2012-07-24
  • 打赏
  • 举报
回复
为了看15楼
peterchenastc 2012-06-16
  • 打赏
  • 举报
回复
特定过来看看 谢谢
warboy2008 2012-06-13
  • 打赏
  • 举报
回复
非常感谢@@@@
gomo544409 2012-06-12
  • 打赏
  • 举报
回复
我怎么才能看到15楼的解答了。
gomo544409 2012-06-12
  • 打赏
  • 举报
回复
一起学习
tuttp 2012-05-15
  • 打赏
  • 举报
回复
学习一下,谢谢!
lyx2002 2012-05-02
  • 打赏
  • 举报
回复
学习一下,谢谢!
Q_julia 2012-04-24
  • 打赏
  • 举报
回复
学习一下,碰到类似问题
kobataiwan 2012-04-17
  • 打赏
  • 举报
回复
感謝大大
a3239360 2012-03-07
  • 打赏
  • 举报
回复
回复可见
sunling83417 2012-01-09
  • 打赏
  • 举报
回复
谁来解答啊?
sunling83417 2012-01-09
  • 打赏
  • 举报
回复
我就算拿LZ的代码和Makefile,再加上15楼的那行,也试不出来嘛!
sunling83417 2012-01-09
  • 打赏
  • 举报
回复
可是我试了下怎么还是有"WARNING: ***.ko undefined!"的警告呢?
我的A模块makefile

#ifeq ($(KERNELRELEASE),)
#export MMZ_SRC_BASE=$(PWD)
#endif

include $(PWD)/../Makefile.param

obj-m := -DEXPORT_SYMTAB
obj-m := eeprom.o
eeprom-y += eeprom_drv.o

EXTRA_CFLAGS += -D$(HI_FPGA) -D$(CHIP_ARCH) -DEXPORT_SYMTAB
EXTRA_CFLAGS += -I$(PWD)/../gpio-i2c

default:
@make -C $(LINUXROOT) M=$(PWD) modules
clean:
@make -C $(LINUXROOT) M=$(PWD) clean


B模块makefile

include $(PWD)/../Makefile.param

KBUILD_EXTRA_SYMBOLS = $(PWD)/../gpio-i2c/Module.symvers

obj-m := m240.o

m240-y += mdin240.o audio.o de.o fifo.o hdmicec.o hdmitx_i2c.o hdmitx_timer.o\
mdincec.o txvidp.o vmode.o crc16.o edid.o\
hdcp.o hdmitx.o hdmitx_isr.o infofrm.o mddc.o\
mdinapi.o sha.o vmtables.o
EXTRA_CFLAGS += -D$(HI_FPGA)
EXTRA_CFLAGS += -I$(PWD)/../gpio-i2c

default:
@make -C $(LINUXROOT) M=$(PWD) modules
clean:
@make -C $(LINUXROOT) M=$(PWD) clean


也有说要用
KBUILD_EXTRA_SYMBOLS += /path/to/Module A/Module.symvers
export KBUILD_EXTRA_SYMBOLS

我试了都不行嘛!
xueufeng_667 2011-12-28
  • 打赏
  • 举报
回复
学习中,感谢
dean_gdp 2011-12-22
  • 打赏
  • 举报
回复
学习中。。。。感谢
加载更多回复(43)

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧