Ошибка компиляции ядра Linux: неопределенная ссылка на `__udivdi3 '&` __umoddi3' - PullRequest
4 голосов
/ 04 декабря 2011

Вот ошибка, которую я получил: 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'

Я гуглил и нашел этот патч: 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 нет!

1 Ответ

1 голос
/ 04 декабря 2011

Я должен был прочитать более внимательно. Патч предназначен для 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.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...