Forum Linux.débutant Problème de compilation de uClinux

Posté par  .
Étiquettes : aucune
0
5
fév.
2008

Hello,

J'essai donc de compiler un uClinux pour tester sur une carte Freescale. uClinux est dispo avec les noyaux 2.0, 2.4 et 2.6. Pour les 2 derniers ca se compile sans trop de soucis, en revanche pour le 2.0 j'obtiens un truc infame du genre :


francois@debian:~/uClinux-dist$ make
make -C tools/ucfront
make[1]: entrant dans le répertoire « /home/francois/uClinux-dist/tools/ucfront »
make[1]: Rien à faire pour « all ».
make[1]: quittant le répertoire « /home/francois/uClinux-dist/tools/ucfront »
ln -sf /home/francois/uClinux-dist/tools/ucfront/ucfront tools/ucfront-gcc
ln -sf /home/francois/uClinux-dist/tools/ucfront/ucfront tools/ucfront-g++
ln -sf /home/francois/uClinux-dist/tools/ucfront/ucfront-ld tools/ucfront-ld
make ARCH=m68knommu CROSS_COMPILE=m68k-elf- -j1 -C linux-2.0.x || exit 1
make[1]: entrant dans le répertoire « /home/francois/uClinux-dist/linux-2.0.x »
m68k-elf-gcc -g -D__KERNEL__ -I/home/francois/uClinux-dist/linux-2.0.x/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce -I../include -pipe -DNO_MM -DNO_FPU -m5200 -Wa,-S -Wa,-m5200 -D__ELF__ -DMAGIC_ROM_PTR -DUTS_SYSNAME='"uClinux"' -DUTS_MACHINE='"m68knommu"' -c -o init/version.o init/version.c
set -e; for i in arch/m68knommu/kernel arch/m68knommu/mm arch/m68knommu/lib arch/m68knommu/platform/5407 kernel drivers fs net ipc lib mmnommu; do make -C $i; done
make[2]: entrant dans le répertoire « /home/francois/uClinux-dist/linux-2.0.x/arch/m68knommu/kernel »
make[2]: Rien à faire pour « all ».
make[2]: quittant le répertoire « /home/francois/uClinux-dist/linux-2.0.x/arch/m68knommu/kernel »
make[2]: entrant dans le répertoire « /home/francois/uClinux-dist/linux-2.0.x/arch/m68knommu/mm »
make all_targets
make[3]: entrant dans le répertoire « /home/francois/uClinux-dist/linux-2.0.x/arch/m68knommu/mm »
make[3]: Rien à faire pour « all_targets ».
make[3]: quittant le répertoire « /home/francois/uClinux-dist/linux-2.0.x/arch/m68knommu/mm »
make[2]: quittant le répertoire « /home/francois/uClinux-dist/linux-2.0.x/arch/m68knommu/mm »
make[2]: entrant dans le répertoire « /home/francois/uClinux-dist/linux-2.0.x/arch/m68knommu/lib »
make all_targets
make[3]: entrant dans le répertoire « /home/francois/uClinux-dist/linux-2.0.x/arch/m68knommu/lib »
m68k-elf-gcc -g -D__KERNEL__ -I/home/francois/uClinux-dist/linux-2.0.x/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce -I../include -pipe -DNO_MM -DNO_FPU -m5200 -Wa,-S -Wa,-m5200 -D__ELF__ -DMAGIC_ROM_PTR -DUTS_SYSNAME='"uClinux"' -c -o checksum.o checksum.c
In file included from /home/francois/uClinux-dist/linux-2.0.x/include/asm/system.h:6,
from /home/francois/uClinux-dist/linux-2.0.x/include/linux/sched.h:26,
from /home/francois/uClinux-dist/linux-2.0.x/include/linux/mm.h:4,
from /home/francois/uClinux-dist/linux-2.0.x/include/linux/malloc.h:4,
from /home/francois/uClinux-dist/linux-2.0.x/include/linux/skbuff.h:146,
from /home/francois/uClinux-dist/linux-2.0.x/include/linux/netdevice.h:62,
from /home/francois/uClinux-dist/linux-2.0.x/include/net/ip.h:27,
from /home/francois/uClinux-dist/linux-2.0.x/include/net/checksum.h:22,
from checksum.c:34:
/home/francois/uClinux-dist/linux-2.0.x/include/asm/segment.h: In function ‘__generic_memcpy_tofs’:
/home/francois/uClinux-dist/linux-2.0.x/include/asm/segment.h:136: warning: implicit declaration of function ‘memcpy’
/home/francois/uClinux-dist/linux-2.0.x/include/asm/segment.h:136: warning: incompatible implicit declaration of built-in function ‘memcpy’
/home/francois/uClinux-dist/linux-2.0.x/include/asm/segment.h: In function ‘__constant_memcpy_tofs’:
/home/francois/uClinux-dist/linux-2.0.x/include/asm/segment.h:171: warning: incompatible implicit declaration of built-in function ‘memcpy’
/home/francois/uClinux-dist/linux-2.0.x/include/asm/segment.h: In function ‘__generic_memcpy_fromfs’:
/home/francois/uClinux-dist/linux-2.0.x/include/asm/segment.h:241: warning: incompatible implicit declaration of built-in function ‘memcpy’
/home/francois/uClinux-dist/linux-2.0.x/include/asm/segment.h: In function ‘__constant_memcpy_fromfs’:
/home/francois/uClinux-dist/linux-2.0.x/include/asm/segment.h:276: warning: incompatible implicit declaration of built-in function ‘memcpy’
In file included from /home/francois/uClinux-dist/linux-2.0.x/include/linux/termios.h:5,
from /home/francois/uClinux-dist/linux-2.0.x/include/linux/tty.h:20,
from /home/francois/uClinux-dist/linux-2.0.x/include/linux/sched.h:31,
from /home/francois/uClinux-dist/linux-2.0.x/include/linux/mm.h:4,
from /home/francois/uClinux-dist/linux-2.0.x/include/linux/malloc.h:4,
from /home/francois/uClinux-dist/linux-2.0.x/include/linux/skbuff.h:146,
from /home/francois/uClinux-dist/linux-2.0.x/include/linux/netdevice.h:62,
from /home/francois/uClinux-dist/linux-2.0.x/include/net/ip.h:27,
from /home/francois/uClinux-dist/linux-2.0.x/include/net/checksum.h:22,
from checksum.c:34:
/home/francois/uClinux-dist/linux-2.0.x/include/asm/termios.h: In function ‘trans_from_termio’:
/home/francois/uClinux-dist/linux-2.0.x/include/asm/termios.h:70: warning: incompatible implicit declaration of built-in function ‘memcpy’
/home/francois/uClinux-dist/linux-2.0.x/include/asm/termios.h: In function ‘trans_to_termio’:
/home/francois/uClinux-dist/linux-2.0.x/include/asm/termios.h:84: warning: incompatible implicit declaration of built-in function ‘memcpy’
In file included from /home/francois/uClinux-dist/linux-2.0.x/include/linux/netdevice.h:62,
from /home/francois/uClinux-dist/linux-2.0.x/include/net/ip.h:27,
from /home/francois/uClinux-dist/linux-2.0.x/include/net/checksum.h:22,
from checksum.c:34:
/home/francois/uClinux-dist/linux-2.0.x/include/linux/skbuff.h: In function ‘skb_put’:
/home/francois/uClinux-dist/linux-2.0.x/include/linux/skbuff.h:411: error: label at end of compound statement
/home/francois/uClinux-dist/linux-2.0.x/include/linux/skbuff.h: In function ‘skb_push’:
/home/francois/uClinux-dist/linux-2.0.x/include/linux/skbuff.h:424: error: label at end of compound statement
checksum.c: In function ‘csum_partial_copy_fromuser’:
checksum.c:143: warning: pointer targets in passing argument 1 of ‘csum_partial’ differ in signedness
checksum.c: In function ‘csum_partial_copy’:
checksum.c:154: warning: pointer targets in passing argument 1 of ‘csum_partial’ differ in signedness
make[3]: *** [checksum.o] Erreur 1
make[3]: quittant le répertoire « /home/francois/uClinux-dist/linux-2.0.x/arch/m68knommu/lib »
make[2]: *** [first_rule] Erreur 2
make[2]: quittant le répertoire « /home/francois/uClinux-dist/linux-2.0.x/arch/m68knommu/lib »
make[1]: *** [linuxsubdirs] Erreur 2
make[1]: quittant le répertoire « /home/francois/uClinux-dist/linux-2.0.x »
make: *** [linux] Erreur 1


Pouvez vous me donner des conseils pour résoudre ce genre de problèmes ?
  • # version de gcc

    Posté par  . Évalué à 3.

    Je pense que tu pourrais essayer avec une version différente de gcc. Il est possible que les compilos plus récents soient plus stricts et que les headers du kernel 2.0 ne soient pas compilables. Regarde dans les sources du noyau quelle version de gcc ils préconisent.

    Dans le fichier Documentation/Changes du noyau 2.0.40, voici ce qu'ils préconisent :


    - Dynamic linker (ld.so) 1.7.14
    - GNU CC 2.7.2.1
    - Binutils 2.8.1.0.23
    [...]
    Note that it is _very_ unlikely that you will be able to compile the
    2.0 kernel with gcc-3.x or binutils 2.9.x, and even if it compiles, it
    might not work properly.
    • [^] # Re: version de gcc

      Posté par  . Évalué à 1.

      Merci pour cette réponse rapide !

      Alors pour gcc, j'avais déja essayé avec la 2.95, même chose, en revanche je ne m'étais pas penché sur les autres outils genre ld ou binutils. Mais comment changer de version pour binutils ? Parceque sur les dépots il n'y a qu'une version dispo. Il faut que je télécharge les sources et les compile moi-meme ?
      • [^] # Re: version de gcc

        Posté par  . Évalué à 2.

        Si tu n'a pas de version dispo oui, il faut les télécharger et les compiler. Ceci-dit, dans le cas qui te concerne, c'est clairement une erreur du compilateur, donc avant de changer de binutils ou de linker, il faut résoudre le problème du compilateur. Dans ton cas je pense que c'est les lignes :
                if(skb->tail>skb->end)
        {
        __label__ here;
        panic("skput:over: %p:%d", &&here, len);
        here:;
        }


        Qui posent problème. Essaye de voir avec quel compilateur tu peux compiler une fonction de ce genre (en particulier le
        here:;
        ).
        • [^] # Re: version de gcc

          Posté par  . Évalué à 1.

          je viens d'essayer avec gcc 2.95 3.3 3.4 et 4.1, c'est toujours la même chose, je ne vois pas quoi faire d'autre en fait..
          • [^] # Re: version de gcc

            Posté par  . Évalué à 1.

            En fait je crois que je suis en train de dire de grosses bétises. J'ai effectivement changé de compilateur en changeant donc le lien symbolique de gcc dans /usr/bin/ mais en fait je me rend compte que c'est le gcc utilisé pour la compilation croisée qu'il faut que je change car ce n'est pas le meme, n'est ce pas ?
            • [^] # Re: version de gcc

              Posté par  . Évalué à 3.

              C'est exact, c'est ton m68k-elf-gcc qu'il faut changer.

              Etienne
  • # support du PCI

    Posté par  . Évalué à 1.

    yep ca compile merci !
    Seulement la j'ai ajouté le support du port PCI, et il ne trouve pas la définition de certaines fonctions associées :


    m68k-elf-ld -g -T arch/m68knommu/platform/5407/MOTOROLA/ram.ld arch/m68knommu/platform/5407/MOTOROLA/crt0_ram.o init/main.o init/version.o \
    arch/m68knommu/kernel/kernel.o arch/m68knommu/mm/mm.o arch/m68knommu/platform/5407/platform.o kernel/kernel.o fs/fs.o ipc/ipc.o net/network.a mmnommu/mm.o \
    fs/filesystems.a \
    drivers/block/block.a drivers/char/char.a drivers/net/net.a drivers/pci/pci.a \
    /home/francois/uClinux-dist/linux-2.0.x/lib/lib.a arch/m68knommu/lib/lib.a /usr/local/lib/gcc-lib/m68k-elf/2.95.3/./m5200/libgcc.a -o linux
    kernel/kernel.o: In function `process_timeout':
    /home/francois/uClinux-dist/linux-2.0.x/kernel/sched.c:125: undefined reference to `pcibios_present'
    /home/francois/uClinux-dist/linux-2.0.x/kernel/sched.c:126: undefined reference to `pcibios_find_class'
    /home/francois/uClinux-dist/linux-2.0.x/kernel/sched.c:129: undefined reference to `pcibios_find_device'
    /home/francois/uClinux-dist/linux-2.0.x/kernel/sched.c:129: undefined reference to `pcibios_read_config_byte'
    /home/francois/uClinux-dist/linux-2.0.x/kernel/sched.c:129: undefined reference to `pcibios_read_config_word'
    /home/francois/uClinux-dist/linux-2.0.x/kernel/sched.c:130: undefined reference to `pcibios_read_config_dword'
    /home/francois/uClinux-dist/linux-2.0.x/kernel/sched.c:131: undefined reference to `pcibios_strerror'
    /home/francois/uClinux-dist/linux-2.0.x/kernel/sched.c:132: undefined reference to `pcibios_write_config_byte'
    /home/francois/uClinux-dist/linux-2.0.x/kernel/sched.c:133: undefined reference to `pcibios_write_config_word'
    /home/francois/uClinux-dist/linux-2.0.x/kernel/sched.c:133: undefined reference to `pcibios_write_config_dword'
    drivers/net/net.a(ne.o): In function `ne_probe_pci':
    /home/francois/uClinux-dist/linux-2.0.x/drivers/net/ne.c:259: undefined reference to `pcibios_read_config_dword'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/net/ne.c:255: undefined reference to `pcibios_find_device'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/net/ne.c:274: undefined reference to `pcibios_read_config_word'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/net/ne.c:283: undefined reference to `pcibios_write_config_word'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/net/ne.c:266: undefined reference to `pcibios_read_config_byte'
    drivers/pci/pci.a(pci.o): In function `sprint_dev_config':
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:971: undefined reference to `pcibios_read_config_byte'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:972: undefined reference to `pcibios_read_config_dword'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:973: undefined reference to `pcibios_read_config_word'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1064: undefined reference to `pcibios_read_config_dword'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1091: undefined reference to `pcibios_read_config_dword'
    drivers/pci/pci.a(pci.o): In function `scan_bus':
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1168: undefined reference to `pcibios_read_config_byte'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1172: undefined reference to `pcibios_read_config_dword'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1174: undefined reference to `pcibios_read_config_dword'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1205: undefined reference to `pcibios_read_config_byte'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1207: undefined reference to `pcibios_write_config_byte'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1209: undefined reference to `pcibios_read_config_byte'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1212: undefined reference to `pcibios_write_config_byte'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1216: undefined reference to `pcibios_read_config_byte'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1284: undefined reference to `pcibios_read_config_word'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1286: undefined reference to `pcibios_write_config_word'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1316: undefined reference to `pcibios_write_config_dword'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1329: undefined reference to `pcibios_write_config_dword'
    drivers/pci/pci.a(pci.o): In function `pci_init':
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1349: undefined reference to `pcibios_init'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1351: undefined reference to `pcibios_present'
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1362: undefined reference to `pcibios_fixup'
    make[1]: *** [linux] Erreur 1
    make[1]: quittant le répertoire « /home/francois/uClinux-dist/linux-2.0.x »
    make: *** [linux] Erreur 1


    pourtant si je prends le cas de cette ligne :
    /home/francois/uClinux-dist/linux-2.0.x/drivers/pci/pci.c:1168: undefined reference to `pcibios_read_config_byte'
    l'include <linux/bios32.h> , qui contient l'entete de la fonction pcibios_read_config_byte, est bien présent dans le fichier pci.c, donc comment il ne trouve pas la définition ?
    • [^] # Re: support du PCI

      Posté par  . Évalué à 2.

      Ici ce n'est pas la compilation mais la phase de link (m68k-elf-ld) qui ne marche pas. Il dois y avoir une problème dans ta configuration du noyau.
      Verifie que CONFIG_PCI est bien activé et que tu as bien tout recompilé. Au besoin fait un "make distclean" ou repart de zero pour t'assurer que bios32.c est bien recompilé.


      Etienne
      • [^] # Re: support du PCI

        Posté par  . Évalué à 1.

        Effectivement il fallait faire un make clean puis recompiler. Pourtant je pensais avoir lu qu'on n'était pas obligé de tout recompiler à chaque changement, apparement si ..

        Merci beaucoup pour ton aide !

        Francois

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.