LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1225|回复: 9

unresolved symbol prefetch ??

[复制链接]
发表于 2005-5-30 12:28:46 | 显示全部楼层 |阅读模式
使用gcc编译驱动源程序为.o文件后,用insmod加载,提示unresolved symbol prefetch
什么意思阿?
发表于 2005-5-30 15:00:19 | 显示全部楼层
我以前好像遇到过这样的问题,可能是在插入这个模块之前,还需要其它的一些模块
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-30 15:37:11 | 显示全部楼层
驱动程序以.c文件保存
[root@dec3000 code]# gcc -DMODULE -D__KERNEL__ -c rtl8150.c -I/usr/src/linux-2.4.20-8/include
[root@dec3000 code]# insmod rtl8150.o
rtl8150.o: unresolved symbol prefetch

系统为RH9,2.4.20内核
用lsmod查看模块有USB方面的一些模块
usb-uhci               25868   0  (unused)
usbcore                77696   1  [hid usb-uhci]

驱动程序应该没有错吧,问题出在哪儿呢
回复 支持 反对

使用道具 举报

发表于 2005-5-30 16:38:20 | 显示全部楼层
#include <linux/prefetch.h>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-30 21:18:01 | 显示全部楼层
我在源文件中添加了这个include项,编译通过后还是
rtl8150.o: unresolved symbol prefetc
回复 支持 反对

使用道具 举报

发表于 2005-5-30 21:30:58 | 显示全部楼层
应该是内核没有导出那个符号吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-30 21:38:07 | 显示全部楼层
还需要导出什么符号? 编译没有错误啊
回复 支持 反对

使用道具 举报

发表于 2005-5-30 21:57:52 | 显示全部楼层
faint.
prefetch是内联函数,只要在调用prefetch语句之前include <linux/prefetch.h>就一定没有错。你先找出是哪个文件调用了preftech。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-30 22:24:30 | 显示全部楼层
,没有明白你的意思
我的驱动程序只有一个源文件,在其中引用一堆系统头文件
源文件中也并没有使用这个函数
回复 支持 反对

使用道具 举报

发表于 2005-5-31 13:14:57 | 显示全部楼层
prefetch不是一个函数,它会被展开成一个内联汇编指令。如果本机CPU不支持prefetch(SSE或3DNow指令集才有prefetch),则prefetch展开之后为空,什么事也不做。
所以,这个符号在编译完成之后就不存在了,出现unresolved symbol prefetch说明这个符号没有被展开。你把include <linux/prefetch.h>放在最前面试一试。要不试着找到调用prefetch的地方,在前面直接:
#define prefetch(x)
去掉这个指令不会影响程序的正常运行。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表