免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1607 | 回复: 0
打印 上一主题 下一主题

内核 2.6.26 下的驱动模块 "Unknown symbol in module" 问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-30 14:12 |只看该作者 |倒序浏览

内核 2.6.26
下的驱动模块
"Unknown symbol in module"
问题
http://topic.csdn.net/u/20081009/11/6fb7295c-0d30-4d4f-b390-af4413aa7f7e.html
http://bbs2.ustc.edu.cn/cgi/bbstcon?board=Linux&file=M.1239206421.A
xiaomao
(闭关修炼), 信区: Linux标  题: 一个关于内核模块编写的问题发信站: 瀚海星云 (2009年04月09日00:02:31 星期四), 站内信件 想在内核中加点代码测试点东西,通过模块的方式进行测试,遇到了问题。具体问题参见
http://topic.csdn.net/u/20081009/11/6fb7295c-0d30-4d4f-b390-af4413aa7f7e.html
他遇到的问题和我是一样的,网上并没有找到解答我的内核版本是2.6.29.1请问如何解决呢?


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

// Module A (mod_a.c)
#include
#include
#include

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);


C/C++ code

// Module B (mod_b.c)
#include
#include
#include

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
BatchFile code

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

Makefile for Module B
BatchFile code

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

编译完成后开始加载模块:
BatchFile code

#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

在 /proc/kallsyms 里可以找到module A导出的symbol。
内核2.6.26版本以前都很正常,只有2.6.26版出现这个错误。请高手帮忙~谢谢
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/94916/showart_1915231.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP