lundi 19 juin 2017

01-Linux Device Drivers on Embedded System (Intro + crosstool)

Voici plusieurs mois déjà que ma petite sœur Gracy m'a offert cette carte électronique, afin que je puisse apprendre à développer les drivers sous Linux, ce dont je rêve d’être capable depuis des années.
Merci pour le cadeau!
La première tentative de développement Linux embarqué s'est soldée par un échec.
Cette fois je m'y remets, et espère que ce sera la bonne.



Sama5D3 Xpld


Contenu de la boite

Les images ci-dessous nous montrent le contenu de la boite





Présentation de la carte

Sur cette page on a une brève présentation de la carte.
http://www.atmel.com/tools/ATSAMA5D3-XPLD.aspx

Parmi les points importants on peut retenir
  • SAMA5D36 Cortex-A5 Microprocessor
  • 256MBytes DDR2
  • 256MBytes NAND Flash
  • LCD connectors
  • Dual Ethernet (GMAC + EMAC) with PHY and connectors
  • Three USB connectors (2 Host + 1 Device)
  • 1x SD/eMMC and 1x MicroSD slots
  • Expansions headers, Arduino R3 Shield compatible
  • Power measurement straps

Le lien ci-dessus contient beaucoup d'informations utiles. Ceci vaut la peine d'y jeter un coup d'oeil. Parmi elles, on trouve, la datasheet, le user guide, le linux 4 sam, les logiciels, les revendeurs, les exemples et bien d'autres choses.


Environnement de travail.

Pour ceci j'utilise comme matériel :
un ordinateur portable ROG qui fonctionne sous Linux Ubuntu, la carte de développement Sama5D3 Xplained

Sur cet ordinateur à la racine de mon 'home' je vais créer l'organisation suivante
Embedded/Linux/toolchain-src


Les autres répertoires seront créer au fur et à mesure du process.

La chaîne de compilation

Cette étape est importante à cause de la différence entre les processeurs, car ce dernier est le 'cerveau' d'un ordinateur.

Par exemple : Un francophone qui veut communiquer avec un anglophone par courrier postal doit le faire en anglais, autrement l'anglophone ne comprendra pas le courrier. Ceci sous-entend aussi que le francophone a des outils pour écrire dans le langage que l'anglophone peut comprendre.

De même mon système d’exploitation Linux compilé pour Intel 64bits ne fonctionnera pas sur un ARM 32 ou 64 bits car les deux architectures sont différentes et leur jeu d’instructions aussi.

Pour corriger cela, il nous faut des outils sur notre ordinateur, qui vont nous permettre de générer un programme que notre système embarqué comprendra, saura interpréter. Dans notre cas c'est elle la chaîne de compilation croisée.

Sans elle il ne nous serait pas possible de générer du code qui serait compris par le système embarqué.

Il en existe des toutes prête pour notre ARM sur le serveur de linaro.
mais c'est aussi important de voir comment utile ça peut être, de créer sa propre chaîne.


Installation des outils.

Il s'agit ici de tous les logiciels qu'il nous faut en plus avant de continuer,  c'est-à-dire de télécharger la chaîne de compilation.

Une autre façon consiste à télécharger la chaîne de compilation, de lancer sa compilation et de résoudre au fur et à mesure les dépendances ou les erreurs de logiciels manquants en les téléchargeant et en les installant.

pour ma part je choisirai pour ce moment la première étape car en fonction des caractéristiques du PC, ceci peut prendre des heures pour la génération.

elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src$ sudo apt-get install automake

Installation de automake

Vérification de l'installation

Suivant le même modèle on installera les autres éléments.

elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src$ sudo apt-get install automake autoconf libtool libexpat1-dev libncurses5-dev bison flex patch curl cvs texinfo git bc build-essential subversion gawk python-dev gperf unzip pkg-config help2man wget

Installation des outils

La chaîne de compilation utilisera la librairie C "uClibc"


Téléchargement de Crosstool-ng

elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src$ wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.23.0.tar.bz2

Crosstol-ng 1.23.0

Download complete

Installation de Crosstool-ng

On peut vérifier le contenu du répertoire avec la commande 'ls'.

Vérification

Une fois l'archive téléchargée, on peut l'extraire avec la commande suivante

elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src$ tar xf crosstool-ng-1.23.0.tar.bz2

Décompression de l'archive

En se déplaçant dans le répertoire on peut vérifier son contenu.

Présentation de Crosstool-ng

Le répertoire 'docs' contient ce dont on a besoin pour comprendre comment configurer et installer l'outil Crosstool-ng.

elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ ls docs/manual/

elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ gedit docs/manual/2_Installation.md &

Crosstool docs

Plusieurs méthodes d'installation y sont indiquées.

Choix d'installation par défaut

Choix d'installation spécifique

Je choisi celle qui me permettra de spécifier le préfixe, choix d’installation spécifique. Pour ce faire voici le préfixe que je choisi :
/home/elyham/Embedded/Linux/Crosstool

Bien sur le répertoire Crosstool devrait exister au moment de l’exécution de la commande de génération de l'outil.

elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ ./configure --prefix=/home/elyham/Embedded/Linux/Crosstool

Début de l’exécution de la commande "configure"

Fin de l’exécution de la commande "configure"

Exécution a présent de la commande 'make' puis 'make install'

elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ make

 Début de l’exécution de la commande "make"

Fin de l’exécution de la commande "make"

elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ make install

Exécution de la commande "make install"

Il ne reste plus qu'à mettre à jour le PATH afin de pouvoir utiliser notre nouvel outil pour générer la chaîne de compilation croisée pour notre carte.

Il peut être prudent d’avoir une sauvegarde de la valeur actuelle de PATH.
Avec la commande suivante vous pouvez afficher PATH dans la console, ensuite copier et sauvegarder dans un fichier

elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ echo $PATH

A ce niveau, l’exécution de la commande "ct-ng help" ne fonctionnera pas, et retournera le message 'ct-ng: command not found'.

"echo" et "ct-ng" cmd

Ce qui est normal. Mettons à présent à jour la variable d’environnement PATH

elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ export PATH="${PATH}:/home/elyham/Embedded/Linux/Crosstool/bin"

Mise à jour de PATH

En exécutant de nouveau la commande 'echo $PATH', on remarque une différence dans le résultat.
Et comme on peut le voir sur limage ci-dessus l'execution de la commande "ct-ng help" retourne un resultat different du precedent.

Ceci conclut la première parti de cette série.
La partie 2 consistera a configurer ct-ng pour générer la chaîne de compilation croisée.

Toutes mes excuses pour les fautes car je n'utilise pas un clavier AZERTY pour le moment.
Merci pour votre compréhension.






Aucun commentaire:

Enregistrer un commentaire