Ceci est une ancienne révision du document !
Installation d'uClinux via LTIB sur le module Freescale MCF5329 Fire Engine
Prélude
Ce document s'adresse aux personnes intéressées par la mise en œuvre, sous Ubuntu, du System-On-Module MCF5329 Fire Engine de chez Freescale/Logicpd. Sur cette carte (disponible chez Farnell), nous installerons uClinux via le générateur d'image fourni par Freescale : LTIB.
Les commandes et notions présentes dans ce tutoriel sont souvent "simples", mais on peux perdre énormément de temps à les retrouver et à les utiliser correctement (surtout avec de petits Linux embarqués). La philosophie retenue, est donc ici, de les toutes les retranscrire (y compris celles pour le TFTP, NFS, … qui disposent déjà de tutoriel respectifs).
Ce document est une synthèse d'une nombre important d'informations, trucs et astuces, tutoriel, etc. trouvés sur le web. N'étant pas un expert Linux/Ubuntu, mais plutôt un "google boy", certaines de ces commandes ne seront sans doutes pas optimales et/ou "propres"
Pré-requis
Pour mener à bien ce tutoriel, nous avons besoin de :
- Une machine de développement fonctionnant sous Ubuntu 9.04 "Jaunty Jackalope" 32 bits (100% à jour – 22 mai 2009).
- Le bundle de développement pour le System-On-Module Freescale MCF5329 Fire Engine.
- Le bootloader présent sur la carte est U-Boot 2008.10 (Dec 15 2008 – 11:03:39). Son installation est décrites dans la suite du document (Il n'est pas toujours présent d'origine sur la carte).
- Une connexion internet.
Conventions pour ce tutoriel
- IP machine développement : 192.168.0.2
- OS : Ubuntu Desktop 9.04 (100% à jour – 22 mai 2009)
- User : as
- Pass : azerty
- Pass root : azerty
- IP carte Freescale : 192.168.0.254
- Passerelle : 192.168.0.1
- Masque : 255.255.255.0
- Bootloader présent sur le System-On-Module : U-Boot 2008.10 (Dec 15 2008 – 11:03:39)
- Ce document, ainsi que l'ensemble des fichiers téléchargés, se situent dans
/home/as/tuto
Documents de références
- « BSP Targeting the Freescale Coldfire M5239EVB User's Guide » (User_Manual_MCF5329.pdf)
- « Using MCF5329EVB NAND Flash to Host μClinux Root File System » (AN3757.pdf)
- « Building a Sample CGI Application » (AN3408.pdf)
Installation LTIB
LTIB est notre générateur d'image uClinux pour la carte freescale.
- On extrait m53xxevb-20081215-ltib.iso (source : Linux BSP for Freescale M5329EVB )
- Clique-droit sur le fichier → Extraire ici
- Nous avons maintenant accès à la (très bonne !) documentation :
/home/as/tuto/m53xxevb-20081215-ltib/START_HERE.htm
- (Dans cette documentation, se trouve le tutoriel pour installer U-Boot - nécessite une machine windows
)
- Installation de LTIB
- On se place avec un terminal dans le répertoire :
/home/as/tuto/m53xxevb-20081215-ltib
- On lance la commande :
sh ./install
- On répond yes partout
- On installe les fichiers dans :
/home/as/ltib
- Installation des paquets nécessaires à LTIB
- Lancer dans un terminal :
sudo apt-get install bison libncurses5-dev build-essential rpm tcl8.5 libghc6-zlib-dev
- Mise en place des autorisations pour LTIB
- On modifie le fichier visudo via la commande :
sudo /usr/sbin/visudo
- On y ajoute la ligne :
as ALL = NOPASSWD: /usr/bin/rpm, /opt/freescale/ltib/usr/bin/rpm
- On sauvegarde via [ctrl+o], puis [enter]
- Exit via [ctrl+x]
- Premier lancement de LTIB (il décompresse ses packages → long)
- On se place avec un terminal dans le répertoire :
/home/as/ltib/ltib-cf_nommu-20081215
- On lance la commande :
./ltib
- Nous avons un bug (normal) (Exiting on error or interrupt)
- Pour le résoudre, on modifie les lignes 46, 47 et 48 du fichier
/opt/freescale/pkgs/mtd-utils-20060302-cf-byteswap_h-1.patch
+#if !defined _BYTESWAP_H && !defined _NETINET_IN_H +# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead." +#endif
qui deviennent
+//#if !defined _BYTESWAP_H && !defined _NETINET_IN_H +//# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead." +//#endif
6. Et on supprime le répertoire (et son contenu) : /opt/freescale/ltib/usr/src/rpm/BUILD/mtd
7. On re-lance la commande : ./ltib
8. Après ça, LTIB est installé ! (ouf )
Installation de Minicom
- On installe minicom. Pour ça on lance dans une console :
sudo apt-get install minicom
- Pour le configurer, on lance dans un terminal :
minicom -s
- Dans « configuration du port série », on veillera à avoir les valeurs suivantes
+--------------------------------------------------------------------------------+ | A - Port série : /dev/ttyUSB0 | | B - Emplacement du fichier de verrouillage : /var/lock | | C - Programme d'appel intérieur : | | D - Programme d'appel extérieur : | | E - Débit/Parité/Bits : 115200 8N1 | | F - Contrôle de flux matériel : Non | | G - Contrôle de flux logiciel : Non | | | | Changer quel réglage ? | +--------------------------------------------------------------------------------+
4. Le lancement de minicom se fera par la commande suivante dans le terminal : minicom
Installation du serveur TFTP
On crée un répertoire tftpboot (via la console)
sudo mkdir /tftpboot sudo chmod -R 777 /tftpboot sudo chown -R nobody /tftpboot
On installe les paquets suivants
sudo apt-get install xinetd tftpd tftp
On ouvre un éditeur de texte en mode « root »
sudo gedit
Dans cet éditeur, on insert le texte suivant
service tftp { protocol = udp port = 69 socket_type = dgram wait = yes user = nobody server = /usr/sbin/in.tftpd server_args = /tftpboot disable = no }
(attention, il faut un [enter] après la dernière accolade !!)
Et on sauvegarde dans le répertoire /etc/xinet.d/ avec comme nom de fichier tftp
Toujours avec gedit en root, on ajoute les autorisations suivantes dans le fichier /etc/hosts.allow
portmap:192.168.0.254 nfsd:192.168.0.254 mountd:192.168.0.254
Et les lignes suivantes dans /etc/hosts.deny
portmap:ALL nfsd:ALL mountd:ALL
On recharge la configuration
sudo /etc/init.d/xinetd reload
On peut maintenant relancer le serveur tftp via la commande
sudo /etc/init.d/xinetd restart
On vérifie la configuration du service tftp via la commande cat /etc/xinetd.d/tftp
qui doit retourner
as@as-desktop:~$ cat /etc/xinetd.d/tftp service tftp { protocol = udp port = 69 socket_type = dgram wait = yes user = nobody server = /usr/sbin/in.tftpd server_args = /tftpboot disable = no }
Installation du serveur NFS
On crée un lien vers le répertoire rootfs de ltib (commande à lancer dans la console)
ln -s /home/as/ltib/ltib-cf_nommu-20081215/rootfs /tftpboot/ltib
On installe le paquets pour un serveur NFS
sudo apt-get install nfs-kernel-server
On ajoute la ligne suivante dans le fichier /etc/exports
(avec un gedit en mode root) et on sauvegarde
/tftpboot/ltib 192.168.0.254/255.255.255.0(rw,no_root_squash,async)
On recharge le fichier de configuration via la commande (terminal)
sudo /etc/init.d/nfs-kernel-server reload
Et on relance le serveur via la commande
sudo /etc/init.d/nfs-kernel-server restart
Installation du compilateur C/C++
On télécharge Sourcery G++ Lite Edition for ColdFire (uClinux) à l'adresse suivante.
On lance l'installation via la commande (exécutée dans le répertoire ou se trouve le fichier téléchargé)
sh ./freescale-coldfire-4.3-45-m68k-uclinux.bin -i console
On laisse l'ensemble des options par défaut.
On ajoute les entrées suivantes dans le fichier .bashrc
(/home/as/.bashrc
) et on sauve
PATH=$HOME/CodeSourcery/Sourcery_G++_Lite/bin:$PATH export PATH
On peut tester le compilateur via la commande
m68k-uclinux-g++
Qui doit retourner
m68k-uclinux-g++: no input files
La compilation d'un fichier se fera maintenant via les commandes
m68k-uclinux-g++ -o hello helloworld.c
Fichier source en C++ - entrée : helloworld.c - sortie : hello
Et,
m68k-uclinux-gcc -o hello helloworld.c
Fichier source en C - entrée : helloworld.c - sortie : hello
Génération de l'image noyau