文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>内核 2.6.26 下的驱动模块 "Unknown symbol in m..

内核 2.6.26 下的驱动模块 "Unknown symbol in m..

时间:2009-04-30  来源:lxcrist

内核 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月0900: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<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);

 

 

C/C++ code

 

// 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

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版出现这个错误。请高手帮忙~谢谢

相关阅读 更多 +
排行榜 更多 +
摧毁大厦游戏

摧毁大厦游戏

飞行射击 下载
合并动物城手游版

合并动物城手游版

休闲益智 下载
哈士奇大冒险

哈士奇大冒险

休闲益智 下载