[SOLVED]Erro ao compilar o kernel!

Iniciado por ivodalves, 11 de Novembro de 2008, 21:37

tópico anterior - próximo tópico

ivodalves

Olá,

tenho o seguinte problema:

estou a usar o Ubuntu 8.10 e tenho de compilar um kernel com um patch do RTAI
para criar um sistema de tempo real.

Estava tudo a correr bem até ter de compilar o kernel.

O kernel com que a máquina arranca é o que estou a usar é o 2.6.27-7-generic

O RTAI só tem patch para o kernel 2.6.23 (vanilla). Então fui buscar o kernell. Adicionei o patch sem problemas.

fiz make menucoinfig, configurei tudo conforme o manual e pus a compilar.

e após alguns minutos da-me o seguinte erro:

HOSTCC  lib/gen_crc32table
  GEN     lib/crc32table.h
  CC      lib/crc32.o
  CC      lib/genalloc.o
  LD      lib/reed_solomon/built-in.o
  LD      lib/zlib_deflate/built-in.o
  CC      lib/zlib_inflate/inffast.o
  CC      lib/zlib_inflate/inflate.o
  CC      lib/zlib_inflate/inftrees.o
  CC      lib/zlib_inflate/inflate_syms.o
  LD      lib/zlib_inflate/zlib_inflate.o
  LD      lib/zlib_inflate/built-in.o
  CC      lib/textsearch.o
  CC      lib/percpu_counter.o
  CC      lib/audit.o
  LD      lib/built-in.o
  CC      lib/argv_split.o
  CC      lib/bitmap.o
  CC      lib/bug.o
  CC      lib/cmdline.o
  CC      lib/cpumask.o
  CC      lib/ctype.o
  CC      lib/dec_and_lock.o
  CC      lib/dump_stack.o
  CC      lib/extable.o
  CC      lib/idr.o
  CC      lib/int_sqrt.o
  CC      lib/ioremap.o
  CC      lib/irq_regs.o
  CC      lib/klist.o
  CC      lib/kobject.o
lib/kobject.c: In function 'kobject_kset_add_dir':
lib/kobject.c:545: warning: format not a string literal and no format arguments
  CC      lib/kobject_uevent.o
  CC      lib/kref.o
  CC      lib/prio_tree.o
  CC      lib/radix-tree.o
  CC      lib/rbtree.o
  CC      lib/reciprocal_div.o
  CC      lib/rwsem.o
  CC      lib/semaphore-sleepers.o
  CC      lib/sha1.o
  CC      lib/string.o
  CC      lib/vsprintf.o
  AR      lib/lib.a
  CC      arch/i386/lib/msr-on-cpu.o
  LD      arch/i386/lib/built-in.o
  CC      arch/i386/lib/bitops.o
  AS      arch/i386/lib/checksum.o
  CC      arch/i386/lib/delay.o
  AS      arch/i386/lib/getuser.o
  CC      arch/i386/lib/memcpy.o
  AS      arch/i386/lib/putuser.o
  AS      arch/i386/lib/semaphore.o
  CC      arch/i386/lib/string.o
  CC      arch/i386/lib/strstr.o
  CC      arch/i386/lib/usercopy.o
  AR      arch/i386/lib/lib.a
  GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
kernel/built-in.o: In function `getnstimeofday':
(.text+0x26c73): undefined reference to `__umoddi3'
kernel/built-in.o: In function `getnstimeofday':
(.text+0x26c93): undefined reference to `__udivdi3'
kernel/built-in.o: In function `do_gettimeofday':
(.text+0x26dc0): undefined reference to `__udivdi3'
kernel/built-in.o: In function `do_gettimeofday':
(.text+0x26ddb): undefined reference to `__umoddi3'
kernel/built-in.o: In function `timekeeping_resume':
timekeeping.c:(.text+0x27006): undefined reference to `__umoddi3'
timekeeping.c:(.text+0x27026): undefined reference to `__udivdi3'
kernel/built-in.o: In function `update_wall_time':
(.text+0x27450): undefined reference to `__umoddi3'
kernel/built-in.o: In function `update_wall_time':
(.text+0x27470): undefined reference to `__udivdi3'
kernel/built-in.o: In function `update_wall_time':
(.text+0x278cb): undefined reference to `__umoddi3'
kernel/built-in.o: In function `update_wall_time':
(.text+0x278eb): undefined reference to `__udivdi3'
make[1]: ** [.tmp_vmlinux1] Erro 1
make[1]: Saindo do diretório `/usr/src/linux-2.6.23'
make: ** [debian/stamp-build-kernel] Erro 2

alguem pode ajudar?

Obrigado,

Ivo




akaihen

#1
que manual você ta falando? você já deu uma olhada nos tópicos mantidos pela comunidade sobre isso? digo, alguns tópicos muito bons é so procurar! e quando você for por erro poe entre codeassim oh! beleza?

PS: verifique se você realmente  baixou o kernel certo para esse tal patch RTAI
Kubuntu 10.04
Athlon 64 XP2 2.6+ Geforce 9600 GT
150 gb MAxtor +40 gb samsung +2 gb ram

ivodalves

olá,

sim verfiquei.

Estou a seguir  "how to istall rtai in hubuntu hardy" de cristovão sousa ... e não funciona.

Aceitam-se sugestões.  ???

akaihen

ta punk, to sem idéias... talvez você devesse ver esse tópico, que apesar de ser kubuntu funciona para todos os outros.
http://ubuntuforum-br.org/index.php/topic,29799.0.html
todo mundo fala bem do kernel omnislash do Hqxriven
Kubuntu 10.04
Athlon 64 XP2 2.6+ Geforce 9600 GT
150 gb MAxtor +40 gb samsung +2 gb ram

ivodalves

Olá,

já resolvi.

Eu estava a tentar compilar um kernell 2.6.24 vanilla para depois instalar o RTAI.

Mas como tinha dito estava a ter o seguinte problema:

CC      arch/x86/lib/usercopy_32.o
  AR      arch/x86/lib/lib.a
  GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
kernel/built-in.o: In function `timespec_add_ns':
/usr/src/linux-build-2.6.24-rtai/include/linux/time.h:177: undefined reference to `__umoddi3'
/usr/src/linux-build-2.6.24-rtai/include/linux/time.h:177: undefined reference to `__udivdi3'
kernel/built-in.o: In function `timespec_add_ns':
/usr/src/linux-build-2.6.24-rtai/kernel/time/timekeeping.c:127: undefined reference to `__udivdi3'
/usr/src/linux-build-2.6.24-rtai/kernel/time/timekeeping.c:127: undefined reference to `__umoddi3'
kernel/built-in.o: In function `timespec_add_ns':
/usr/src/linux-build-2.6.24-rtai/include/linux/time.h:177: undefined reference to `__umoddi3'
/usr/src/linux-build-2.6.24-rtai/include/linux/time.h:177: undefined reference to `__udivdi3'
/usr/src/linux-build-2.6.24-rtai/include/linux/time.h:177: undefined reference to `__umoddi3'
/usr/src/linux-build-2.6.24-rtai/include/linux/time.h:177: undefined reference to `__udivdi3'
/usr/src/linux-build-2.6.24-rtai/include/linux/time.h:177: undefined reference to `__umoddi3'
/usr/src/linux-build-2.6.24-rtai/include/linux/time.h:177: undefined reference to `__udivdi3'
make[1]: *** [.tmp_vmlinux1] Error 1
make[1]: Leaving directory `/usr/src/linux-build-2.6.24-rtai'
make: *** [debian/stamp-build-kernel] Error 2

Pelo que vi isto tem a ver com o facto de o gcc-4.3 querer optimizar um loop numa função da libraria time.h (pelo menos foi o que percebi dos artigos que li na web).

a solução também foi encontrada na web  ;D

e fica aqui  :

# adicionar a arquivo include/linux/time.h: a linha a seguir ao "while" /* The following asm() prevents the compiler from * optimising this loop into a modulo operation.  */ asm (.....) -----> ver em baixo.
               


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++;
        }
        a->tv_nsec = ns;
}


o link para o site onde encontrei a solução:

http://www.infoblogs.com.br/view.action?contentId=39623&Erro+compilando+kernel+2622+no+OpenSuse11+gcc431


Espero que faça jeito a alguém  :) ....

Cumps,

Ivo