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 NeoX . É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 DELTA67 . É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 TheBreton . Évalué à 1.
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 Mali (site web personnel) . Évalué à 2.
Du coup, je te conseille de regarder du côté de buildroot
[^] # Re: cross-compilation ?
Posté par DELTA67 . É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 NeoX . É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 DELTA67 . É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 NeoX . É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 DELTA67 . É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:
Une idée ?
[^] # Re: cross-compilation ?
Posté par NeoX . Évalué à 2. Dernière modification le 15 novembre 2014 à 20:07.
chercher le fichier asm/param.h dans les sources
[^] # Re: cross-compilation ?
Posté par DELTA67 . É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 NeoX . É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 DELTA67 . É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 nigaiden . É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 DELTA67 . É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 NeoX . Évalué à 2.
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.
[^] # Re: cross-compilation ?
Posté par DELTA67 . Évalué à -4.
Oui ça marche avec la toolchain native (gcc, binutils, glibc) car j'ai compilé le busybox avec!!
Je veux juste remplacer la glibc par uClibc, le reste de la chaine (gcc, binutils) je le touche pas.
[^] # Re: cross-compilation ?
Posté par nigaiden . Évalué à 2.
La documentation de uClibc stipule qu'il faut une chaîne de compilation dédiée. Avant ce n'était pas nécessaire mais cela reposait sur des bricolages qui cassaient parfois. Les développeurs ont donc décidé d'adopter une solution pérenne et robuste consistant à imposer une chaîne de compilation croisée. Si tu veux utiliser uClibc, je ne vois pas comment tu peux y échapper (du moins en faisant les choses proprement).
[^] # Re: cross-compilation ?
Posté par DELTA67 . Évalué à -4.
J'ai trouvé ce guide:
http://lennartb.home.xs4all.nl/rescuedisk
Mais apparemment c'est très ancien.
ça ce compile pas chez moi avec la dernière version de uClibc, est-ce que qqn peut essayer? SVP.
[^] # Re: cross-compilation ?
Posté par DELTA67 . Évalué à -4.
J'ai aussi trouvé:
http://ymettier.free.fr/articles_lmag/lmag43/lmag43.html
et:
http://www.linuxfromscratch.org/hints/downloads/files/uclibc-bootfloppy.txt
J'ai réussi à compiler uClibc mais après l'installation je trouve pas le repertoire uclibc-dev/usr/bin !!!!
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.