Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tutoriel:freescale_coldfire [Le 31/05/2009, 14:48]
_Val_ Ajout Tag
— (Version actuelle)
Ligne 1: Ligne 1:
-{{tag>​developpement materiel tutoriel processeur Jaunty}} 
- 
----- 
-====== 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 [[http://​www.logicpd.com/​products/​system-modules/​freescale-mcf5329-fire-engine|MCF5329 Fire Engine]] de chez Freescale/​Logicpd. Sur cette carte (disponible chez [[http://​fr.farnell.com/​freescale-semiconductor/​m5329evbe/​kit-mcf532x-evaluation-board/​dp/​1579763|Farnell]]),​ nous installerons [[http://​www.uclinux.org|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 [[http://​doc.ubuntu-fr.org/​tftpd|TFTP]],​ [[http://​doc.ubuntu-fr.org/​nfs|NFS]],​ ... qui disposent déjà de tutoriel respectifs). 
- 
-<note tip> 
-Beaucoup des commandes présentes dans ce tutoriel sont, vraisemblablement,​ exportables pour d'​autres cartes de développement. 
-</​note>​ 
- 
-<note warning>​Note de l'​auteur (_Val_) : 
- 
-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"</​note>​ 
- 
-===== Pré-requis ===== 
-Pour mener à bien ce tutoriel, nous avons besoin de : 
-  - Une machine de développement fonctionnant sous [[http://​www.ubuntu.com/​getubuntu/​download|Ubuntu 9.04 "​Jaunty Jackalope"​]] 32 bits (100% à jour – 22 mai 2009). 
-  - Le [[http://​fr.farnell.com/​freescale-semiconductor/​m5329evbe/​kit-mcf532x-evaluation-board/​dp/​1579763|bundle]] de développement pour le System-On-Module Freescale MCF5329 Fire Engine. 
-  - Le bootloader présent sur la carte est [[http://​www.denx.de/​wiki/​U-Boot/​WebHome|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 : [[http://​www.freescale.com/​webapp/​sps/​site/​prod_summary.jsp?​code=MCF532X&​nodeId=0162468rH3YTLC00M92076&​fpsp=1&​tab=Design_Tools_Tab#​|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''​ 
-     <​code>​ 
-+#if !defined _BYTESWAP_H && !defined _NETINET_IN_H 
-+# error "Never use <​bits/​byteswap.h>​ directly; include <​byteswap.h>​ instead." ​ 
-+#endif 
-</​code>​ 
-qui deviennent 
-<​code>​ 
-+//#if !defined _BYTESWAP_H && !defined _NETINET_IN_H 
-+//# error "Never use <​bits/​byteswap.h>​ directly; include <​byteswap.h>​ instead."​ 
-+//#endif 
-</​code>​ 
- 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 
-<​code>​ 
-+--------------------------------------------------------------------------------+ 
-| 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 ?                                                         | 
-+--------------------------------------------------------------------------------+ ​ 
-</​code>​ 
- 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) 
-<​code>​ 
-sudo mkdir /tftpboot 
-sudo chmod -R 777 /tftpboot 
-sudo chown -R nobody /tftpboot 
-</​code>​ 
-On installe les paquets suivants 
-<​code>​ 
-sudo apt-get install xinetd tftpd tftp 
-</​code>​ 
-On ouvre un éditeur de texte en mode « root » 
-<​code>​ 
-sudo gedit 
-</​code>​ 
-Dans cet éditeur, on insert le texte suivant 
-<​code>​ 
-service tftp 
-{ 
-protocol = udp 
-port = 69 
-socket_type = dgram 
-wait = yes 
-user = nobody 
-server = /​usr/​sbin/​in.tftpd 
-server_args = /tftpboot 
-disable = no 
-} 
- 
-</​code>​ 
-//​(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''​ 
-<​code>​ 
-portmap:​192.168.0.254 
-nfsd:​192.168.0.254 
-mountd:​192.168.0.254 
-</​code>​ 
- 
-Et les lignes suivantes dans /​etc/​hosts.deny 
-<​code>​ 
-portmap:ALL 
-nfsd:ALL 
-mountd:ALL 
-</​code>​ 
- 
-On recharge la configuration 
-<​code>​ 
-sudo /​etc/​init.d/​xinetd reload 
-</​code>​ 
- 
-On peut maintenant relancer le serveur tftp via la commande ​ 
-<​code>​ 
-sudo /​etc/​init.d/​xinetd restart 
-</​code>​ 
- 
-On vérifie la configuration du service tftp via la commande ''​cat /​etc/​xinetd.d/​tftp''​ qui doit retourner 
-<​code>​ 
-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 
-} 
-</​code>​ 
- 
-===== Installation du serveur NFS ===== 
-On crée un lien vers le répertoire rootfs de ltib (commande à lancer dans la console) 
-<​code>​ 
-ln -s /​home/​as/​ltib/​ltib-cf_nommu-20081215/​rootfs /​tftpboot/​ltib 
-</​code>​ 
- 
-On installe le paquets pour un serveur NFS  
-<​code>​ 
-sudo apt-get install nfs-kernel-server 
-</​code>​ 
- 
-On ajoute la ligne suivante dans le fichier ''/​etc/​exports''​ (avec un gedit en mode root) et on sauvegarde 
-<​code>​ 
-/​tftpboot/​ltib 192.168.0.254/​255.255.255.0(rw,​no_root_squash,​async) 
-</​code>​ 
- 
-On recharge le fichier de configuration via la commande (terminal) 
-<​code>​ 
-sudo /​etc/​init.d/​nfs-kernel-server reload 
-</​code>​ 
- 
-Et on relance le serveur via la commande 
-<​code>​ 
-sudo /​etc/​init.d/​nfs-kernel-server restart 
-</​code>​ 
- 
-===== Installation du compilateur C/C++ ===== 
-On télécharge Sourcery G++ Lite Edition for ColdFire (uClinux) à l'​adresse [[http://​www.codesourcery.com/​sgpp/​lite/​coldfire/​portal/​package3499/​public/​m68k-uclinux/​freescale-coldfire-4.3-45-m68k-uclinux.bin|suivante]]. 
- 
-On lance l'​installation via la commande (exécutée dans le répertoire ou se trouve le fichier téléchargé) 
-<​code>​ 
-sh ./​freescale-coldfire-4.3-45-m68k-uclinux.bin -i console 
-</​code>​ 
- 
-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 
-<​code>​ 
-PATH=$HOME/​CodeSourcery/​Sourcery_G++_Lite/​bin:​$PATH 
-export PATH 
-</​code>​ 
- 
-On peut tester le compilateur via la commande ​ 
-<​code>​ 
-m68k-uclinux-g++ 
-</​code>​ 
- 
-Qui doit retourner 
-<​code>​ 
-m68k-uclinux-g++:​ no input files 
-</​code>​ 
- 
-La compilation d'un fichier se fera maintenant via les commandes 
-<​code>​ 
-m68k-uclinux-g++ -o hello helloworld.c 
-</​code>​ 
-//Fichier source en C++ - entrée : helloworld.c - sortie : hello// 
- 
-Et, 
-<​code>​ 
-m68k-uclinux-gcc -o hello helloworld.c 
-</​code>​ 
-//Fichier source en C - entrée : helloworld.c - sortie : hello// 
- 
-===== Génération de l'​image noyau ===== 
-On lance LTIB (depuis ''/​home/​as/​ltib/​ltib-cf_nommu-20081215''​) via : 
-<​code>​ 
-./ltib -c 
-</​code>​ 
- 
-  - On coche l'​option ''​Configure the kernel''​ 
-  - Dans ''​Target System Configuration -> Options -> Network setup'',​ on décoche l'​option ''​get network parameters using dhcp''​ et on modifie le ''​nameserver IP address''​ en ''​192.168.0.2''​. 
-  - Dans ''​Target Image Generation -> Options -> Choose your root filesystem image type'',​ on choisi ''​Target image: (NFS)''​ et on décoche l'​option ''​read-only root filesystem''​ 
-  - On sort des menus et ''​Do you wish to save your new configuration?​ -> yes''​ 
- 
-Nous arrivons dans les options du noyau 
-  - Dans ''​General setup'',​ on coche ''​System V IPC''​ 
-  - Dans ''​File systems -> Miscellaneous filesystems'',​ on décoche ''​ROM file system support''​ 
-  - On sort des menus et ''​Do you wish to save your new configuration?​ -> yes''​ 
- 
-Notre image noyau est maintenant générée. Nous la préparons maintenant à être injecté sur la carte via les commandes (on est toujours dans le répertoire de LTIB !) : 
-<​code>​ 
-sudo gzip -f -9 rootfs/​boot/​vmlinux.bin 
-</​code>​ 
- 
-Puis, 
-<​code>​ 
-/​opt/​freescale/​ltib/​usr/​bin/​mkimage -A m68k -O linux -T kernel -C gzip -a 0x40020000 -e 0x40020000 -n "Linux Kernel Image" -d rootfs/​boot/​vmlinux.bin.gz uImage ​ 
-</​code>​ 
- 
-On place l'​image générée dans le répertoire ''/​tftpboot''​ 
-<​code>​ 
-cp uImage /tftpboot/ 
-</​code>​ 
- 
-L'​image noyau ''​uImage'',​ présente dans ''/​tftpboot''​ est prête à être injectée sur la carte. 
- 
-===== Génération du répertoire racine en JFFS2 ===== 
-On re-lance LTIB (depuis ''/​home/​as/​ltib/​ltib-cf_nommu-20081215''​) via : 
-<​code>​ 
-./ltib -c 
-</​code>​ 
- 
-Dans ''​Target Image Generation -> Options -> Choose your root filesystem image type'',​ on choisi ''​Target image: (jffs2)''​ 
- 
-Toujours dans les options image : 
-  - ''​jffs2 erase block size in KB (NEW)''​ = 16 
-  - on décoche ''​read-only root filesystem''​ 
-  - ''​(/​tmp /var) Place these dirs in writable RAM''​ 
- 
-On sort des menus et ''​Do you wish to save your new configuration?​ -> yes''​ 
- 
-l'​image du répertoire racine est maintenant disponible (''​rootfs.jffs2''​). Nous la copions dans le répertoire boot partagé via la commande : 
-<​code>​ 
-sudo cp rootfs.jffs2 /​home/​as/​ltib/​ltib-cf_nommu-20081215/​rootfs/​boot 
-</​code>​ 
- 
-Le répertoire racine est maintenant prêt à être implémenté sur la carte. 
- 
-===== Installation de l'​image noyau en RAM (et fonctionnement avec répertoire racine en NFS) ===== 
-On branche le port série et Ethernet de la carte sur le PC. 
- 
-{{:​tutoriel:​connectique_carte_coldfire_mcf5329.jpg|}} 
- 
-Nous ouvrons minicom via la commande ''​minicom'' ​ dans un terminal (__l'​ensemble des commandes suivantes se lancent sur la carte via minicom__) 
- 
-On branche l'​alimentation de la carte. 
- 
-Nous observons la séquence de boot du bootloader sur le terminal (et nous interrompons avant la fin du compteur, si il y en a un) 
- 
-Pour imprimer les paramètres du bootloader, on lance la commande ''​printenv''​ 
- 
-Pour modifier un paramètre, c'est via les commandes 
-<​code>​ 
-set paramètre '​valeur'​ 
-save 
-</​code>​ 
- 
-Exemple, 
-<​code>​ 
-set serverip '​192.168.0.2'​ 
-save 
-</​code>​ 
- 
-On vérifie (via ''​printenv''​) de bien avoir les paramètres suivant (et sinon, on modifie) 
-<​code>​ 
-gatewayip=192.168.0.1 
-netmask=255.255.255.0 
-ipaddr=192.168.0.254 
-serverip=192.168.0.2 
-</​code>​ 
- 
-On indique à l'OS ou se situe son répertoire racine (via un paramètre qui sera passé à l'OS au moment du boot par le bootloader) 
-<​code>​ 
-set bootargs '​root=/​dev/​nfs rw nfsroot=192.168.0.2:/​tftpboot/​ltib ip=192.168.0.254:​192.168.0.2:​192.168.0.1:​255.255.255.0::​eth0:​off'​ 
-save 
-</​code>​ 
-//(le répertoire racine est ici en nfs sur la machine de développement)//​ 
- 
-On charge le noyau en RAM via tftp 
-<​code>​ 
-tftp 0x41000000 uImage 
-</​code>​ 
- 
-Et on boot (et ça marche ! ^^) 
-<​code>​ 
-bootm 0x41000000 
-</​code>​ 
- 
-===== Implémentation du répertoire racine en flash NAND ===== 
- 
-Pour ce faire, __sur le uClinux de la carte__ (donc via minicom), on exécute ceci : 
-<​code>​ 
-/​usr/​bin/​flash_eraseall /dev/mtd1 
-cd /boot 
-cp rootfs.jffs2 /​dev/​mtdblock1 
-</​code>​ 
- 
-Il nous reste à rebooter le système et a changer les options du bootloader (on indique que le répertoire racine se trouve sur la flash NAND) 
-<​code>​ 
-set bootargs '​root=/​dev/​mtdblock1 rw rootfstype=jffs2'​ 
-save 
-</​code>​ 
- 
-Le répertoire racine est maintenant opérationnel depuis la carte. 
- 
-===== Installation de l'​image noyau en flash NOR ===== 
-La procédure sera identique à celle de la section "​[[http://​doc.ubuntu-fr.org/​tutoriel/​freescale_coldfire#​installation_de_l_image_noyau_en_ram_et_fonctionnement_avec_repertoire_racine_en_nfs|Installation de l'​image noyau en RAM (et fonctionnement avec répertoire racine en NFS)]]"​ (installation en ram) jusqu'​à la section "On charge le noyau en RAM via tftp" non incluse. 
- 
-On remplace cette commande et celles qui suivent par les commandes suivantes. 
- 
-On enleve la protection d'une partie de la mémoire Flash NOR et nous l'​effaçons (nous sommes toujours sur la carte via minicom) 
-<​code>​ 
-prot off 0x30000 0x1FFFFF 
-erase 0x30000 0x1FFFFF 
-</​code>​ 
- 
-On charge le noyau en ram et on le copie dan la flash NOR 
-<​code>​ 
-tftp 0x40020000 uImage 
-cp.b 0x40020000 0x30000 ${filesize} 
-</​code>​ 
- 
-On indique au bootloader que l'on veut booter depuis cette flash NOR 
-<​code>​ 
-set bootcmd bootm 0x30000 
-set bootdelay 3 
-save 
-</​code>​ 
-Lorsqu'​on reboot la carte, le noyau se lance automatiquement depuis la flash NOR et avec son répertoire racine en flash NAND. La carte est donc maintenant complètement indépendante du PC de développement :-D. 
- 
-<note warning>​Divers (Bug) 
- 
-Une fois sous uClinux (-> minicom) __ET__ avec le noyau en flash NOR, il faut re-activer Ethernet une fois la séquence de boot finie 
-<​code>​ 
-ifconfig eth0 hw ether 0008ee013f7c 
-ifconfig eth0 up 
-</​code>​ 
-//​0008ee013f7c représente la MAC adresse de la carte (présente sur un autocollant collé sur le System-On-Module)//​ 
- 
-On vérifie alors via un ping vers la machine de développement 
-<​code>​ 
-ping 192.168.0.2 
-</​code>​ 
-</​note>​ 
- 
- 
- 
  
  • tutoriel/freescale_coldfire.1243774109.txt.gz
  • Dernière modification: Le 18/04/2011, 14:50
  • (modification externe)