Forum Linux.embarqué Création d'un makefile pour cross-compilation

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
11
fév.
2015

Bonjour à tous,

J'ai fais l'acquisition d'une carte électronique qui embarque un système d'exploitation linux du magazine elektor. Cette carte tourne autour du projet Gnublin.

J'essaie tant bien que mal de faire fonctionner un autre adaptateur USB/LAN que celui qui est préconisé dans le magazine pour des raisons de stocks. Mon adaptateur est celui-ci : Texte du lien
La version de l'adaptateur est celle-ci : H/W ver c1 DUB-E100 D'LINK
La puce est de nom : asix ax88772B d'après ce que j'ai pu observer.

Le makefile présent dans le dossier du driver linux est fait pour la compilation PC. J'aimerais faire une cross-compilation de ce driver. Apparement il vaut mieux faire un makefile que de tout faire à la main. Si quelqu'un a un début de piste pour en créer un je suis preneur.

Les outils utilisés pour la cross-compilation d'un simple fichier hello.c sont :

1/ La chaîne d'outil armv5te-qte-5.0

jo@008:~$ armv5te-gcc --version
armv5te-gcc (GCC) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

2/ Installer ceci :

sudo apt-get install gcc-arm-linux-gnueabi

3/ Activer le script suivant :

#!/bin/bash

P1=/opt/eldk-5.0/armv5te/sysroots/i686-oesdk-linux/usr/bin/armv5te-linux-gnueabi/
P2=/opt/eldk-5.0/armv5te/sysroots/i686-oesdk-linux/bin/armv5te-linux-gnueabi/

export ARCH=arm 
export CROSS_COMPILE=arm-linux-gnueabi-
export PATH=$P1:$P2:$PATH

4/ Compiler le fichier .c :

sudo arm-linux-gnueabi-gcc -o hello hello.c

Pour un seul fichier sans avoir besoin de plus de header que stdio.h ça fonctionne.

Lorsqu'on veut compiler le driver avec cette commande :

sudo arm-linux-gnueabi-gcc -o asix asix.c

Voici le résultat :

jo@008:~/Bureau/Driver_adaptateur_usb_lan/PAS_MAL/AX88772B_772A_760_772_178_LINUX_Driver_v4.4.1_Source$ sudo arm-linux-gnueabi-gcc -o asix.o asix.c
asix.c:29:26: erreur fatale: linux/module.h : Aucun fichier ou dossier de ce typjo@008:~/Bureau/Driver_adaptateur_usb_lan/PAS_MAL/AX88772B_772A_760_772_178_LINUX_Driver_v4.4.1_Source$

Le makefile qui est déjà présent est pour le PC mais pas pour la carte, j'aimerai faire en sorte de pouvoir compiler pour la carte.

Merci d'avance

  • # Module noyau

    Posté par  . Évalué à 2.

    Bonjour,

    Il s'agit d'un module noyau, cela ne se compile pas tout seule mais c'est déjà adapté pour la cross compilation.

    Voici la documentation officiel sur la compilation des modules Linux.

    • [^] # Re: Module noyau

      Posté par  . Évalué à 1.

      Merci pour la documentation, je note ton site internet pour regarder ça.

      Bonne journée à toi

  • # sudo ?

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

    Pourquoi utiliser sudo qui fait passer root pour compiler ? D'autant que, vu que c'est de la cross-compilation, il n'y aura pas d'installation sur ton système (donc pas besoin de root).

    Par ailleurs, concernant ton matériel, as-tu vérifié que le module nécessaire n'était pas déjà présent dans le noyau dont tu disposes  ?

    (la commande lsusb, à lancer en tant que root, va lister les périphériques branchés, ce qui permettra d'identifier un pilote prenant en charge le matériel, en se basant sur vid/pid)

    • [^] # Re: sudo ?

      Posté par  . Évalué à 1.

      C'est plus par "habitude" pour le sudo car parfois quelques commandes ne s'exécutent pas autrement qu'avec les droits de l'administrateur.

      Le module nécessaire était présent mais il fallait en fait changer deux paquets de ligne de code pour que mon adaptateur soit reconnu et pour enlever une erreur.

      Merci pour ta précision pour lsusb.

      J'ai réussi à faire fonctionner le driver mais en règle général tout se compile avec des makefile car on a trop de dépendance entre les fichiers. Desfois ça peut être utile de savoir comment créer un makefile.

      Bonne journée à toi et merci

  • # lui donner à manger

    Posté par  . Évalué à 2.

    il te dit qu'il lui manque des fichiers :

    asix.c:29:26: erreur fatale: linux/module.h : Aucun fichier ou dossier de ce

    general pour compiler un module, il faut les sources du kernel ou au moins les headers du kernel qui sera sur la machine de destination

Suivre le flux des commentaires

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