相关代码

错误提示:

CC [M] drivers/g200wo/fpga_config.o

Building modules, stage 2.

MODPOST 10 modules

ERROR: “__bad_udelay” [drivers/g200wo/fpga_config.ko] undefined!

make[1]: *** [__modpost] 错误 1

make: *** [modules] 错误 2

错误分析,找到udelay的来源为头文件include/linux/delay.h,该头文件未定义udelay,而是通过include文件include/asm/delay.h来获取udelay的定义。打开include/asm/delay.h可以看到udelay定义如下:

查MAX_UDELAY_MS定义在include/linux/delay.h中,值为3。

由此可知,源代码中udelay的参数为4000,大于3*1000,所以udelay实际上调用的是__bad_udelay()。此函数不存在。

这里其实是在检测参数的有效性