以下是我遇到的错误: http://pastebin.com/VadUW6fy
drivers/built-in.o: In function `gem_rxmac_reset':
clkdev.c:(.text+0x212238): undefined reference to `__bad_udelay'
drivers/built-in.o: In function `divide.part.4':
clkdev.c:(.text.unlikely+0x7214): undefined reference to `__udivdi3'
clkdev.c:(.text.unlikely+0x7244): undefined reference to `__umoddi3'
我用Google搜索并找到了这个补丁:https://lkml.org/lkml/2008/4/7/82
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -174,6 +174,10 @@ static inline void timespec_add_ns(struct timespec *a, u64 ns)
{
ns += a->tv_nsec;
while(unlikely(ns >= NSEC_PER_SEC)) {
+ /* The following asm() prevents the compiler from
+ * optimising this loop into a modulo operation. */
+ asm("" : "+r"(ns));
+
ns -= NSEC_PER_SEC;
a->tv_sec++;
}
但未能申请(可能是由于新版本的文件)。
patching file linux/time.h
Hunk #1 FAILED at 174.
1 out of 1 hunk FAILED -- saving rejects to file linux/time.h.rej
令人惊讶的是,文件time.h.rej
不存在!
答案 0 :(得分:1)
我应该仔细阅读。该修补程序适用于timespec_add_ns()
,您的gem_rxmac_reset()
和divide.part.4
函数失败。可能与您找到的补丁无关 - 相反,标准的64位div / mod函数可能在您的目标平台上没有实现。
您是否拥有Sun GEM或Apple GMAC NIC?如果没有,你可能只是禁用该驱动程序并摆脱第一条错误消息。
对于第二个,您可能需要在asm
文件中实现类似的clkdev.c
技巧 - 当我浏览我的副本以进行重复的减法操作时,我没有发现一个 - 但也许您可以直接窃取较新的clkdev.c
或clkdev.h
来解决此问题? (这是一个很长的镜头,git log drivers/clk/clkdev.c
中只有一个条目。)