这是我得到的错误: http://pastebin.com/VadUW6fyLinux内核编译错误:未定义的引用`__udivdi3' &'__umoddi3'
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
不存在!
[这将是可取的(http://meta.stackexchange.com/q/8259),包括这里问题的关键部分:这不仅对我们来说比在其他网站上阅读内容容易得多,而且Stack Overflow与其问题和答案一样有用 - 而且如果你的URL永远消失了,这个问题将来对其他人来说是无用的。 Thanks1 – sarnold
[该补丁只是一行asm和评论](http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blobdiff;f=include /linux/time.h;h=d32ef0ad4c0aaf8964d94abe215c5dbf4dde8aaf;hp=2091a19f1655aab8e5130256f83af4103efa9e3f;hb=38332cb98772f5ea757e6486bed7ed0381cb5f98;hpb=e48af19f56eb47a1f908ee8f16df9d246f955b21) - 你尝试不仅仅是手打字那些由ASM到正确的位置的文件? – sarnold
Sarnold,但问题是while循环不存在于新文件中。 (while(不太可能(ns> = NSEC_PER_SEC))) – inblueswithu