Forum Linux.débutant Comment configurer et compiler uClibc?

Posté par  . Licence CC By‑SA.
Étiquettes :
0
13
nov.
2014

Bonjour,
J'utilse linuxmint16 (noyau 3.11) et je veux compiler uClibc pour l'utilser avec un systeme avec un noyau 2.6.
1- Est-ce qu'il faut les "headers" ou les sources du 2.6? Si oui comment faire?
2- Comment configurer,compiler et installer uClibc?
3- Comment l'utiliser pour compiler des programmes?
Merci

  • # cross-compilation ?

    Posté par  . Évalué à 4.

    je penses qu'il faut deja se renseigner sur ce qu'est uClibc, à quoi ca sert, et finalement savoir si tu as vraiment besoin de ca pour tes programmes.

    si je ne me trompes pas et http://www.uclibc.org/about.html le confirme,
    c'est une libc pour environnement embarqué, donc c'est prevu pour des programmes minimalistes

    il faut donc commencer par definir ce sur quoi tu vas lancer tes programmes embarqués (x86, arm, mips …)
    puis probablement regarder du coté de la cross-compilation pour installer l'environnement necessaire pour compiler vers l'architecture embarquée.

    si tu veux compiler uclibc pour simplement utiliser tes programmes sur du x86, il doit te suffire de compiler uclibc sur ta machine, en suivant les procedures habituelles (./configure, make, make install)

    s'il demande des fichiers du kernel, il demandera probablement les headers du kernel de destination.

    • [^] # Re: cross-compilation ?

      Posté par  . Évalué à -4.

      Merci NeoX pour votre réponse.
      En effet, le systeme cible est un X86 (un ancien PC qui j'utilise pour m'entrainer) donc pas besoin de cross compilation. Le systeme de fichier sur la cible est minimal, juste busybox compilé statiquement à qui
      Je veux ajouter d'autres outils, compilés avec uClibc sur mon systeme de developpement (linuxmint).
      Je pense que c'est plus claire maintenant.
      Merci encore.

      • [^] # Re: cross-compilation ?

        Posté par  . Évalué à 1.

        donc pas besoin de cross compilation
        

        Je te conseille au contraire de faire comme si tu faisait de la cross compilation.
        Cela te permettra d'avoir un environnement dédié à ta cible sur ton pc (host) qui d'ailleurs est peut être en 64 bits non?
        Une évolution de ton host (update de gcc par exemple) sera transparent pour ta target qui disposera de son propre gcc etc etc.
        Que des avantages de bien séparé les univers, d'autant plus que uclibc semble être destiné au 386 et que la plupart des distributions linux actuelle sont en 586 ou 686 (quand elle ne sont pas en AMD64)

        • [^] # Re: cross-compilation ?

          Posté par  (site web personnel) . Évalué à 2.

          Je te conseille au contraire de faire comme si tu faisait de la cross compilation.

          Du coup, je te conseille de regarder du côté de buildroot

          • [^] # Re: cross-compilation ?

            Posté par  . Évalué à -4. Dernière modification le 14 novembre 2014 à 18:52.

            Le PC host est un X86 aussi mais la version du noyau est différente de la cible.
            Comment installer les "headers" du 2.6 sur le host (3.11) ? Car le uClibc en a besoin pour se compiler.
            Comment configurer uClibc pour utiliser les headers 2.6?

            • [^] # Re: cross-compilation ?

              Posté par  . Évalué à 2.

              en lisant ce que l'on te recommande dans les reponses precedentes :

              1°) regarder la cross-compilation (pour avoir un environnement x86, avec un noyau 2.6 ou au moins les fichiers necessaires)
              2°) regarder buildroot

              • [^] # Re: cross-compilation ?

                Posté par  . Évalué à -4.

                Je cherche pas une solution automatique avec buildroot ou crosstool-ng, je veux apprendre la façon de le faire manuellement.
                1-Est-ce que les headers se trouvent dans les sources du noyau? Dans quel répertoire? Sinon où les trouver?
                2- Comment configurer uClibc?
                Quelles options choisir pour:
                - General Library Settings.
                - Library Installation Options.
                Merci

                • [^] # Re: cross-compilation ?

                  Posté par  . Évalué à 2.

                  pour le faire vraiment à la main,

                  1°) les headers du noyau 2.6.32 se trouve ici (dossier include des sources du noyau)
                  https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/include?id=refs/tags/v2.6.32.63

                  2°) comment configurer uclibc ?
                  peut-etre en allant lire la documentation du projet qui explique :

                  mais tu etais probablement deja passé par ce site pour recuperer le code de uclibc afin de pouvoir le compiler

                  • [^] # Re: cross-compilation ?

                    Posté par  . Évalué à -4. Dernière modification le 15 novembre 2014 à 20:06.

                    Bon:
                    1- j'ai téléchargé les sources du noyau 2.6 dans /tmp/linux.
                    2- j'ai configuré uClibc pour utiliser les headers comme ceci:
                    KERNEL_HEADERS="/tmp/linux/include"
                    2- ensuite un : sudo make
                    3- voici ce que j'ai obtenu:

                    GEN include/bits/uClibc_config.h
                    CC ldso/ldso/ldso.oS
                    In file included from ./include/sys/param.h:27:0,
                                     from ./ldso/include/ldso.h:44,
                                     from ldso/ldso/ldso.c:33:
                    /tmp/linux/include/linux/param.h:4:23: fatal error: asm/param.h: No such file or directory
                    #include <asm/param.h>
                                           ^
                    compilation terminated.
                    make: *** [ldso/ldso/ldso.oS] Error 1

                    Une idée ?

                    • [^] # Re: cross-compilation ?

                      Posté par  . Évalué à 2. Dernière modification le 15 novembre 2014 à 20:07.

                      /tmp/linux/include/linux/param.h:4:23: fatal error: asm/param.h: No such file or directory
                      Une idée ?

                      chercher le fichier asm/param.h dans les sources

                      • [^] # Re: cross-compilation ?

                        Posté par  . Évalué à -4.

                        ok j'ai trouvé le fichier dans /include/linux.
                        Est-ce que je dois copier tout le contenu de "linux" dans "asm-genric" ?

                        • [^] # Re: cross-compilation ?

                          Posté par  . Évalué à 2.

                          pourquoi vouloir le mettre dans asm-generic ?

                          il cherche asm/param.h
                          tu as trouvé le fichier dans linux/include/

                          donc il faut le mettre là ou il est recherché, dans asm/
                          ou corrigé le makefile pour prendre le fichier là ou il est reellement.

                          Bienvenu dans le monde du DIY

                          • [^] # Re: cross-compilation ?

                            Posté par  . Évalué à -4.

                            pourquoi vouloir le mettre dans asm-generic ?

                            en fait, il n'y a pas de repertoir "asm" dans "include" il y'a "asm-genric" donc j'ai créé un lien sympolique du nom asm.

            • [^] # Re: cross-compilation ?

              Posté par  . Évalué à 2.

              Ce n'est pas clair pour moi si l'objectif est de faire tourner certains programmes spécifiques sur la cible ou alors si c'est simplement éducatif.

              Comme indiqué par les autres intervenants, tu devrais considérer que tu réalises de la compilation croisée car l'architecture de ta cible (i386-uclibc) est différente de l'architecture de ton poste de développement (i686-glibc). Voir aussi le point 10 de la FAQ de uClibc. Sinon, qu'est-ce que tu avais prévu de faire pour GCC - qui essaye le lier les exécutables à une libc à la fin de la compilation ? Ce point est abordé dans les questions 10 et 11 de la FAQ de uClibc.

              Si tu es pressé d'avoir une solution qui fonctionne, tu peux essayer une chaîne de compilation déjà existante (point 12 de la FAQ uClibc). Si c'est à but éducatif, je te recommande de creuser les outils que tu connais déjà (crosstool-ng, buildroot).

              • [^] # Re: cross-compilation ?

                Posté par  . Évalué à -4.

                1- Le but et purement éducatif. Je ss pas contre de condidérer l'opération comme une sorte de cross-compilation même si c'est pour le même processeur.
                2- qu'est-ce que tu avais prévu de faire pour GCC - qui essaye le lier les exécutables à une libc à la fin de la compilation ?
                Justement ! Comment dire à GCC d'utiliser uClibc au lieu de glibc (supposant que j'ai réussi la compilation de uClibc) ?
                3- Je cherche pas une toolchain prête ou utiliser des scripts tout faits (buildroot ou autre), je veux tout faire à la main pour bien apprendre. Est-ce que c'est impossible??

                • [^] # Re: cross-compilation ?

                  Posté par  . Évalué à 2.

                  Je cherche pas une toolchain prête ou utiliser des scripts tout faits (buildroot ou autre), je veux tout faire à la main pour bien apprendre. Est-ce que c'est impossible??

                  peut-etre vaut-il mieux commencer par le faire avec un toolchain (pour verifier que cela fonctionne)
                  puis faire ce que fait le toolchain etape par etape, en regarde comment est fait le toolchain.

Suivre le flux des commentaires

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