日期:2014-05-16  浏览次数:20857 次

usb网卡驱动编译无法找到__bad_udelay的错误
使用的系统:fedora 9
使用的开发板内核环境:linux 2.6.30.4版
问题:
将Makefile的内核目录指向开发板内核的目录并配置好mii.c和usbnet.c以后,编译usb网卡驱动时出现了以下警告:
make
Building QF9700 USB2NET chip driver...
make[1]: Entering directory `/opt/linux-2.6.30.4'
  CC [M] /opt/drivertest/usbnet/qf9700.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: "__bad_udelay" [/opt/drivertest/usbnet/qf9700.ko] undefined!
  CC /opt/drivertest/usbnet/qf9700.mod.o
  LD [M] /opt/drivertest/usbnet/qf9700.ko
make[1]: Leaving directory `/opt/linux-2.6.30.4'
结果在装载模块的时候无法装载。提示错误:
qf9700: Unknown symbol __bad_udelay
到内核代码里面去检查发现__bad_udelay这个函数是在arch的各个平台的asm目录下的delay.c里面。但是每个文件中都只有一个声明:
extern void __bad_udelay(void); /* deliberately undefined */
并没有具体的实现。
我试着在驱动源代码中添加头文件:
#include<asm/delay.h>
结果编译还是找不到__bad_udelay
也不知道是哪个文件中用到了这个函数报错。
由于代码有三个文件,贴上来不方便,我放到资源中心里了:
http://download.csdn.net/detail/guoke25/3827320
不知这种情况应该如何解决?


------解决方案--------------------
把__bad_udelay()替换成 udelay() 即可

/*
* This function intentionally does not exist; if you see references to
* it, it means that you're calling udelay() with an out of range value.
*
* With currently imposed limits, this means that we support a max delay
* of 2000us. Further limits: HZ<=1000 and bogomips<=3355
*/