Aller au contenu

Toolchain & Cross Compilation Pour Les Nuls


Madmax

Messages recommandés

(suite)

segmentation fault signifie en général que tu as chargé un module kernel avec une mauvaise allocation en mémoire (relocation dans les options kernels)

le kernel est chargé dans un emplacement de mémoire bien précis sur lequel on ne peut pas tricher, donc tu dois utiliser sans doute un mauvais fichier config ou pas à jour,

car c'est dans ce fichier que l'on règle via les options du configure le début et fin de la mémoire allouée au kernel, tout module chargé dans la partie réservé de la mémoire provoque un plantage sur le syno

tu as du sans doute du rebooter électriquement dans le pire des cas..

chaque modèle de syno vu ces caractéristiques physiques, mémoire et carte flash embarquées possède ces propres réglages...

donc à toi de bien faire comme il se doit un oldconfig puis un prepare, puis un menuconfig et tu dois si il y a des erreurs affichées à ce niveau, toutes les corriger

la principale source d'ennuis vient du fait en général d'un mauvais choix du fichier config, d'une information sur la taille mémoire non renseignée...

sur la machine sur laquelle tu fais ta compilation tu as un outil pour visionner le contenu binaire de ton module.. et voir le code des instructions ELF.

What is ELF? ELF (Executable and Linking Format) is file formatthat defines how an object file is composed and organized. With thisinformation, your kernel and the binary loader know how to loadthe file, where to look for the code, where to look the initializeddata, which shared library that needs to be loaded and so on.

la syntaxe

readelf -h ton_module.ko

je te conseille de récupérer sur le syno un module déjà compilé dans /lib/modules

tu compile le même sur ta machine et tu les compare en ouvrant deux consoles root

readelf -h module_cible_du_syno

readelf -h modue_compilé_avant test

dedans tu dois regarder l'allocation mémoire en hexadécimal, début et fin , c'est une petite astuce pour cibler la relocation mémoire, ou piger le comportement de la fonction MAP sur le syno pour l'approcher au mieux sur le module à compiler doit être dans la même plage, selon sa taille bien sur.

exemple:

si starting at offset 0x80c sur module syno et le même cross-compilé 0c0x770c il est clair que ca planteras tu es en dehors du mappage possible en mémoire.

entrer plus loin dans des explications sur la compilation de module et construire un fichier config si il n'y a pas d'info, sur ces paramètres indispensables dépasse le cadre de ce topic et du forum ;)

je te laisse avec ce propos des axes de recherches si tu as le courage d'aller plus loin

j'ai des soucis de surchauffe sur mon serveur ou est ma station de dev, je ne peux pas te donner d'exemple concret pour l'instant, et en attente d'un ventilateur

Lien vers le commentaire
Partager sur d’autres sites

  • 5 mois après...
  • Réponses 63
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

bonjour à tous,

Dans le cadre d'un petit projet perso, j'ai besoin de compiler pour mon syno préféré (un 207+) un soft qui s'appelle AtomicParsley, non dispo via ipkg bien entendu.

Je me suis donc attelé à mettre en place une VM pour cross compiler tout ça. J'ai bien récupéré et installé la toolchain via sourceforge, installé comme il se faut.

Pour tester le fonctionnement, j'ai compilé le petit prog "sysinfo" du pdf de synology. Jusque là, pas de soucis, ça compile sans erreur et ça fonctionne comme il se doit sur le syno.

A la suite de ça, je me suis dit, corsons un peu les choses avant de nous lancer sur AtomicParsley, puisque le tuto du site indique qu'il est possible de compiler screen (même s'il est dispo via ipkg, c'est pour l'exercice...), testons...et là, ça se gate. Je récupère les sources de la version 4.0.3. Je lance :

  • # env CC=/usr/local/arm-marvell-linux-gnu/bin/arm-marvell-linux-gnu-gcc LD=/usr/local/arm-marvell-linux-gnu/bin/arm-marvell-linux-gnu-ld RANLIB=/usr/local/arm-marvell-linux-gnu/bin/arm-marvell-linux-gnu-ranlib CFLAGS="-I/usr/local/arm-marvell-linux-gnu/include" LDFLAGS="-L/usr/local/arm-marvell-linux-gnu/lib" ./configure --host=armle-unknown-linux --target=armle-unknown-linux --build=i686-pc-linux --prefix=/usr/local tel qu'indiqué par Synology, j'obtiens invariablement "configure: error: cannot run test program while cross compiling"
  • ./configure --host=armle-unknown-linux => ça semble se dérouler correctement, je fais donc un "make". là aussi, tout va bien, donc "make install" et copie de tous les fichiers vers le syno. Après l'avoir rendu exécutable, "./screen" et je n'obtiens que syntax error: unexpected "("; après vérification, ce screen s'exécute sur la machine de compilation. en gros, il n'y a pas de cross compilation, mais juste une compilation native :(

J'en conclue donc que ne fais pas tout correctement, mais quoi ??? Si vous avez une piste, je suis preneur...

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Bonjour,

J'essaie de faire un cross compilation et j'ai l'erreur suivante :

../../hidapi/linux/hid.c:44:21: error: libudev.h: No such file or directory
cc1: warnings being treated as errors
../../hidapi/linux/hid.c: In function 'utf8_to_wchar_t':

Est-ce que vous savez où je peux trouver libudev.h ?

Merci d'avance

Thomas

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...
  • 1 an après...
  • 1 an après...

2 messages, et à chaque fois tu renvoies vers ton site...

Tu peux aussi refaire un vrai post sur le forum, et d'ailleurs éventuellement en créer un nouveau car l'actuel n'est plus lisible du fait du transfert de la Db.
En plus, tu ne précises pas que ton tuto est dédié avant tout au Mac, et un peu à Ubuntu, mais rien pour windows qui représente la majeure partie des utilisateurs (je ne cherche pas à ouvrir un troll, c'est factuel).

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.


×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.