Vous êtes sur la page 1sur 8

MALARD Elise PIERRE-NICOLAS Fabien E3 SE

TP de mise en uvre de Linux embarqu : CLinux


Lvolution des techniques permet de raliser des systmes embarqus capables deffectuer de plus en plus de tche. Dans ces conditions il devient ncessaire de faire appel un systme dexploitation pour les ordonnancer. De plus, la complexit et le nombre de ces tches allant en grandissant, il est beaucoup plus simple, voir indispensable, de faire appel un systme dexploitation dj existant ; cela permet de rduire grandement les temps de conception et davoir ds le dbut une base de travail solide. Le systme CLinux est un systme dexploitation dvelopp spcialement pour les systmes embarqus. Il prsente donc toutes les caractristiques de ces derniers savoir une faible empreinte mmoire et des besoins en ressources rduits. De plus, il a lavantage dtre libre. Nous allons dans ces TP voir quelques utilisations de ce systme travers quelques applications pratiques.

TP 0 : Prise en main
Pour la mise en place de CLinux nous avons besoin de deux systmes. Le premier est le systme qui nous sert de poste de travail. Il sagit dun PC sous distribution Linux (Fedora) classique qui sert dhte. Le second est la carte dvaluation sur laquelle nous allons implanter CLinux. Elle est munie dun processeur ColdFire EVB5407C3. Il y a deux connectivits permettant la communication entre ces deux architectures : Une liaison srie standard. Une liaison Ethernet. Les deux postes sont relis un routeur. Ladresse IP du PC est 192.196.4.6, celle de la carte 192.196.4.106 et celle du routeur 192.196.4.0. Lapplication minicom permet de communiquer directement avec la carte en effectuant une lecture/criture sur le port srie ou par la communication Ethernet. Il est possible grce elle de tlcharger un fichier binaire par le rseau Ethernet en utilisant la commande :
dn i image.bin

On peut aussi tlcharger par le rseau Ethernet un fichier S-Record avec la commande:
dn s srec.out -o 20000

Le point dentre des excutables prcdemment charg se trouve en mmoire ladresse 20000. Pour les excuter, il suffit de taper :
go 20000

Le format S-Record de Motorola est un encodage en caractres ASCII dun fichier binaire excutable par un processeur compatible.

TP 1 : Prise en main
Nous allons maintenant tlcharger et utiliser le systme CLinux sur la carte dvaluation. Pour cela on utilise la commande :
dn image0.bin

Elle copie le binaire du noyau CLinux dans la mmoire par lintermdiaire de la liaison Ethernet. On lance ensuite le programme avec :
go 20000

On a alors accs une console lmentaire sous CLinux. La puissance de la cible est de 149,4 BogoMIPS. La taille du noyau (kernel code) est de 416 ko. Nous sommes connects sous lutilisateur superuser. Avec la commande ps on peut observer les diffrents processus qui tournent : - Le serveur web boa - Le daemon inetd - Le serveur hcp dhcpcd - sh - nfsiod - kflushd - init La commande free nous permet de savoir tout moment la taille de lespace mmoire libre sur la cible. Nous allons maintenant configurer le rseau pour pouvoir communiquer depuis la machine cible avec la machine hte. On commence par dfinir ladresse IP, le netmask ainsi que ladresse de broadcast :
ifconfig eth0 192.168.4.106 netmask 255.255.255.0 broadcast 192.168.4.255

Puis on indique que la connexion doit passer par le routeur


route add net 192.168.4.0

On vrifie ensuite que la connexion entre la machine cible et la machine hte est effective en effectuant un ping :
ping 192.168.4.6

Ce test tant russi, nous allons maintenant tester le serveur WWW embarqu sur la cible. Pour cela on lance un navigateur web sur le PC hte et on se rend ladresse http://192.148.4.106. Ce lien fonctionne et lon a accs la page hberge sur le serveur WWW de la carte. Par contre les scripts CGI ne sont pas disponibles. Le package permettant la mise en place du serveur WWW est le package boa.

TP 2 : Gnration dun noyau CLinux et tests


Dans ce TP, nous allons gnrer notre propre noyau CLinux pour ColdFire. Cette opration permet notamment de choisir la version du noyau Linux que nous voulons et surtout de choisir les packages que lon dsire installer. Aprs avoir dcompress et install le package CLinux pour ColdFire on configure le noyau en utilisant la commande
make xconfig

On choisit alors notre noyau (noyau 2.4.x) ainsi que la carte cible (Motorola M5407C3). On ajoute aussi le package dungeon du menu Games (jeu daventure en mode texte) pour quil soit accessible sur notre carte cible. On sauvegarde les dpendances :
make dep

Puis on compile :
make

Le fichier image.bin ainsi gnr se trouve dans le rpertoire images. On gnre le fichier SRecord du noyau laide de la commande :
m68k -elf -objcopy --input -target=binary --output -target=srec images/image.bin images/image.srec

On envoie maintenant, par le port srie, le fichier ainsi crer sur la cible en revenant sur minicom et en faisant Ctrl+A, Z puis S et en choisissant le fichier image.srec. Cette opration prend un temps consquent, dmontrant lintrt dune connexion Ethernet, nettement plus rapide. On vrifie maintenant que le package dungeon est bien install en le lanant grce la commande dungeon. Il nous est alors possible de jouer au jeu On a ainsi pu voir quil est trs facile de configurer son noyau pour y inclure les applications que lon veut afin dobtenir les fonctionnalits dsires et de supprimer les packages inutiles afin de rduire lempreinte mmoire du noyau.

TP 3 : Mise en uvre de NFS sous CLinux

Il pourrait savrer intressant de mettre en uvre le montage NFS sur notre cible. Le montage NFS permet daccder aux dossiers dune machine distante comme sils sagissaient de rpertoires locaux. Pour cela il nous faut de nouveau gnrer notre noyau en incluant ce dernier. On doit donc de nouveau choisir notre configuration. On choisit maintenant le noyau 2.0.x et lon slectionne mount/umount dans uCLinux application Configuration puis lon gnre le noyau. On tlcharge et on excute le noyau sur la cible. On configure ensuite le rseau (cf. TP1) puis on effectue le montage NFS en utilisant comme rpertoire de montage /mnt :
mount -t nfs 192.168.4.6:/home/uclinux /mnt

Pour trouver le point de montage, on regarde le fichier /etc/exports :


/home/uclinux 192.168.4.106 (rw, root-squash, sync)

dossiers mis disposition

machine cible droits passe la cible en simple user

Il nous est dsormais possible daccder aux fichiers prsents dans le dossier /home/uclinux de la machine hte depuis la machine cible comme sil sagissait de fichiers locaux. Cela nous permet de profiter de la capacit de stockage et de la puissance de la machine hte tout en restant dans notre environnement cible. Il est donc par exemple possible de crer et de compiler un programme depuis notre machine hte pour notre machine cible (compilation croise) dans le rpertoire /home/uclinux afin que celui-ci soit excutable directement par la machine cible. La compilation sera plus rapide (puisque la machine hte est plus puissante) et il ny aura pas transfrer lexcutable ou les sources chaque nouvelle version pour tester.

TP 4 : Cration dune application userland sous CLinux


Nous allons maintenant crer une application userland sous CLinux c'est--dire une application qui fera partie des applications standards installes avec le noyau et qui feront parties de lenvironnement user. Le programme que nous allons utiliser pour cet exemple est le classique Hello World ! . Le fichier source hello.c et le makefile de cette application existent dj, il nous suffit de les rcuprer et de les placer dans le dossier uCLinux-dist/user/hello. Il faut lgrement modifier le fichier hello.c n en ajoutant exit(0) la fin du main pour le rendre oprationnel. On ajoute ensuite la directive suivante dans le fichier uClinux-dist/user/Makefile :
dir_$(CONFIG_USER_HELLO_HELLO) += hello

Ainsi que cette directive dans le fichier uClinux-dist/config/config.in :


bool hello CONFIG_USER_HELLO_HELLO

Puis on configure le noyau. On valide lajout de lapplication hello (ainsi que le NFS). Lors de la compilation, on peut voir que le fichier hello.c est lui aussi bien compil. Puis on envoie le noyau sur la cible par le rseau. Pour tester que lapplication fonctionne bien, on peut dabord taper la commande hello. Le message Hello World ! saffiche bien. Il est aussi possible de tester lapplication en copiant lexcutable hello du dossier uCLinuxdist/user/ dans le dossier /home/uclinux. On se place alors dans le dossier /mnt de la cible o lon a accs lexcutable hello (grce au NFS) puis on lexcute avec la commande ./hello. On constate ici aussi que cela fonctionne. Nous avons donc pu voir dans ce TP deux techniques diffrentes pour excuter des programmes sur notre cible. La premire, en lincluant dans luserland, permet davoir accs facilement notre application ds le tlchargement du noyau. Elle est donc trs utile dans le cas dapplications finies que lon souhaite voir implantes sur notre cible par dfaut avec le noyau. La deuxime faon, par le NFS, est trs utile pour le debuggage. En effet, on peut compiler le fichier depuis le PC hte et profiter ainsi de sa puissance (cross-compilation) et on vite aussi de transfrer les fichiers de lhte vers la cible. On gagne donc beaucoup en vitesse.

TP 5 : Dveloppement dune application serveur embarque sous CLinux et dune application cliente Linux pour le contrle de la carte cible
Ce TP nous propose dajouter lapplication myserver luserland comme nous venons de le faire dans le TP prcdent (rcupration des sources, modification des fichiers uClinux-dist/user/Makefile, uClinux-dist/config/config.in puis configuration et compilation du noyau). On charge ensuite notre noyau sur la cible et on configure le rseau (cf. TP 1). Puis on lance notre application sur le numro de port 2000 :
myserver 2000

Puis depuis le PC hte, on compile le fichier source du client myclient0.c puis on lexcute en lui prcisant ladresse de notre carte cible ainsi que le port 2000 :
./a.out uc6 2000

Il est alors possible de piloter les leds de la carte cible en envoyant des requtes laide du client TCP. Cette mthode de connectivit IP est trs pratique car trs simple mettre en place. Cependant elle nest pas trs sre car il suffit de connatre ladresse de la cible ainsi que le port sur lequel est lanc le serveur pour y avoir accs.

TP 6 : Mise en uvre dun client SMTP sous Linux


Nous souhaitons ici envoyer un mail depuis la carte cible lutilisateur uclinux sur la machine hte grce un client SMTP. Aprs avoir configurer les paramtres de connexion, on cre la connexion SMTP avec loutil telnet :
telnet 192.168.4.6 smtp

Puis, pour envoyer un mail depuis la cible vers la machine hte il nous suffit de taper :
mail from root@localhost to uclinux@kiwi6

Pour rcuprer ce mail, il faut, sur le PC hte, taper mail. On constate alors que lutilisateur uclinux a bien reu un nouveau mail provenant de la carte cible. Cette mthode de connectivit semble plus sre que la prcdente car le destinataire est cibl par son adresse IP. Cependant, il est toujours possible dintercepter ce mail en utilisant ladresse IP de la cible. De plus ces fonctionnalits sont limites. Par contre, le protocole SMTP tant trs utilis, elle savre trs pratique pour effectuer un retour dinformations depuis la carte cible

TP 7 : Mise en uvre dun client SMTP embarqu sous CLinux


La prochaine tape consiste inclure le client SMTP luserland en vue dune application embarque. Pour cela, on utilise la mme procdure que prcdemment savoir modification des fichiers uClinux-dist/user/Makefile et uClinuxdist/config/config.in puis configuration du noyau, gnration des dpendances, compilation. On tlcharge ensuite le noyau sur la cible, on le lance et on tape la commande smtp pour lancer le client SMTP. Ainsi embarque, le client SMTP est parfait pour effectuer des rapports non confidentiels (pour indiquer ltat de la carte par exemple). En effet, comme nous lavons vu le protocole SMTP nest pas scuris.

TP 8 : Mise en uvre dun serveur web embarqu sous CLinux


Toujours en vue dexprimenter plusieurs mthodes de connectivit, nous allons mettre en uvre un serveur web embarqu qui nous permettra de contrler lallumage de leds sur la carte cible distance. On commence par ajouter le programme cgi_generic luserland et lon valide lapplication boa lors de la configuration du noyau. Ce programme contient un script CGI qui permet dteindre ou dallumer une led. Une fois le noyau charg sur la cible, on configure le rseau et on lance le serveur avec la commande :
boa c /home/httpd

Puis, pour contrler les leds, depuis le PC hte, il faut se connecter au serveur web en utilisant un navigateur web, dans notre cas, nous utiliserons Netscape. Puis on se connecte ladresse de notre carte sur le port 80 (port utilis par le serveur web). Le script CGI se trouve dans le

rpertoire cgi-bin et se nomme enseirb. On lui passe les arguments en suivant le nom du script dun ? puis de largument (1 ou 0 pour ce script). Ainsi, pour allumer la led, il faut donc taper dans la barre dadresse du navigateur :
http://192.168.4.106:80/cgi-bin/enseirb?1

Cette mthode de connectivit est trs puissante car elle permet de contrler trs facilement la carte cible distance. Cependant, il est impossible de savoir si la carte ragit correctement nos demandes. De plus, cette mthode nest pas forcment trs scurise. Dans notre exemple, nimporte qui connaissant ladresse de la cible et le port utilis peut prendre le contrle des leds.

TP 9 : Mise en uvre de SNMP sous Linux


Comme nous lavons vu prcdemment, le serveur web ne permet pas de connatre ltat de la carte mais juste de lui envoyer des instructions. Ce protocole nest donc pas trs fiable. Nous allons maintenant regarder la connectivit IP par SNMP dun quipement lectronique connect sur le port parallle et constater quelle offre un meilleur contrle. On commence par lancer lagent SNMP avec la commande :
snmpd

En utilisant loutil netstat, on observe que cet agent se trouve sur le port dcoute 161. Il est possible deffectuer diffrents contrles pour connatre ltat de la carte. La commande suivante nous permet parcourir la MIB :
snmptranslate -Tp

On peut aussi connatre ltat des 8 leds qui se trouvent sur la carte en tapant cette commande :
snmpset v 1 c tst localhost enseirb.leds 0.0

Lagent SNMP permet donc, non seulement de donner des instructions la carte cible distance, mais aussi de rcuprer des informations sur son tat. Cest donc un mode de connectivit particulirement adapt lembarqu.

TP 10 : Mise en uvre dun agent SNMP embarqu sous CLinux


Nous allons donc mettre en uvre cet agent SNMP sur notre carte cible. On commence par configurer le noyau pour quil utilise le package SNMP en validant lapplication ucd snmpd dans luserland. Puis, on tend lagent SNMP avec la MIB ENSEIRB (qui est similaire la MIB Linux) en le patchant avec mysnmppatch. Il faut complter le fichier enseirb.c de contrle des leds en remplissant les switch case des diffrentes actions pour chaque led. Par exemple pour la led 0 :
case ACTION if (* long-ret = = 0) *PADAT &= 0xFF7F;

if (* long-ret = = 1) *PADAT |= 0x0080; break;

Il faut aussi complter les fonctions denvoi des TRAPs :


send_easy_trap(7,led7) ;

Puis, on modifie le fichier uClinux-dist/user/ucdsnmp/mysnmpd.conf pour quil corresponde aux adresses IP de la cible et de lhte. Une fois cela fait, on compile et on tlcharge le noyau sur la cible. Il est alors possible, de la mme faon que dans le TP 9, de commander les leds et de connatre leur tat depuis le PC hte. On se rend donc bien compte de lintrt de la connectivit IP par SNMP qui permet un contrle efficace distance dun systme embarqu.

Vous aimerez peut-être aussi