51, rue Barthélémy de Laffemas 26901 Valence Cedex 9 Z.I. Les Illons, 07250 Le Pouzin Serveur VoIP sur platine ARM et CANOpen Annexes - Documentations ROGER Mathieu Licence Pro. SIL option SIRE Maître de Stage : M. Christophe Duhoux Professeur tuteur : M. Denis Genon-Catalot Année Universitaire 2007-2008 Rapport rédigé avec L A TEX
Table des matières I Platine ARM I I.1 Restauration de la configuration d usine.............. I I.2 Script d installation.......................... IV I.3 Installation du compilateur...................... V I.4 Configuration manuelle de la carte réseau.............. VI I.5 Compilation d Asterisk........................ VII I.6 Compilation du noyau........................ VIII I.7 Compilation de CanFestival..................... IX I.8 Protocole Client-Serveur Sprinte................... X I.8.1 Création de la connection et arret de la connection.... X I.8.2 Requete client-serveur.................... X I.9 Nagios................................. XIII
I. Platine ARM I.1 Restauration de la configuration d usine La restauration de la configuration d usine permet une remise à zéro totale de la carte. Pour ce faire nous rechargeons dans un premier temps le bootloader et le kernel, puis dans un second temps nous réinstallons le filesystem. Il est possible de faire un simple formatage de la carte en commençant seulement au point 11. Avant de commencer vous avez besoin : De la carte Olimex SAM9-L9260 D un PC sous Windows D un PC sous Linux (de préférence Ubuntu) D un cable USB D une clef USB De l utilitaire gparted (téléchargeable via sudo apt-get install gparted sous ubuntu) De l utilitaire gtkterm (téléchargeable via sudo apt-get install gtkterm sous ubuntu) Voici la marche à suivre : 1. Installer l utilitaire ATMEL présent sur le CD de la carte (ATMEL/Install AT91-ISP v1.9.exe) 2. Redémarrer l ordinateur si nécessaire 3. Copier le fichier NANDFLASH.tcl dans C :/Program Files/ATMEL Corporation/AT91- ISP v1.9/sam-ba v2.5/lib/at91sam9260-ek 4. Copier le dossier sam9-l9260-samba présent sur le CD, à un endroit sur l ordinateur (ex : C :/) 5. Retirer les jumpers NANDF-E et DF-E de la carte 6. Alimenter la carte 7. Connecter la carte via le port USB-D à l ordinateur et attendre de la carte soit détecter ; si c est la première connexion il faudra probablement installer les drivers (présent dans : ATMEL/samba driver/ sur le CD).
I. Platine ARM II 8. Une fois la carte correctement détectée replacer le jumper NANDF-E. 9. Lancer le programme AT91SAM9260 demo linux NandFlash.bat présent dans le dossier copié précédemment. 10. Une fois le flashage terminé (environ 1 minute), un fichier texte est ouvert, si aucune erreur est indiquée le flashage c est bien passer, sinon reprendre depuis le début. 11. Prendre une clef USB vide, la formater en ext3 sous linux grâce à l utilitaire gparted (pour formater il faut démonter la clef usb aka umount). 12. Soit /media/cdrom le point de montage du CD de la carte, et /media/disk le point de montage de la clef USB. Tapez dans terminal les lignes suivantes : $ mkdir temp && cd temp $ sudo tar xzvf /media/cdrom/root\ images/root_sam9_fs.tgz $ sudo cp -R * /media/disk/ $ sudo cp /media/cdrom/root\ images/rootjffs2.img /media/disk 13. Démonter la clef puis la débrancher, puis la brancher sur la carte 14. Ouvrir gtkterm, le configurer (vitesse 115200) 15. Débrancher la carte, débrancher l USB, rebrancher la carte 16. Lorsque la ligne Hit any key to stop autoboot apparait appuyer sur une touche. La ligne U-boot> apparait alors 17. Tapez (la liaison se fesant en RS232 il ne faut pas faire de fautes de frappes, si c est le cas reprendre au point 15) : $ setenv bootargs mem=64m console=ttys0,115200 root=/dev/sda1 rootdelay=10 $ boot Ceci permet de dire au noyau Linux présent sur la carte de démarer avec les fichiers présent sur la clef USB. 18. Il se peut que le chargement plante, dans ce cas recommencez le point précédent. 19. Une fois le chargement fini la carte affiche : sam9-l9260 login :. Le login est root le mot de passe olimex. 20. Taper les lignes suivantes : $ cd /install $./faflash.sh rootjffs2.img
I. Platine ARM III Ceci permet de lancer le flashage de la carte de manière à écrire les fichiers sur celle-ci. 21. Débrancher la carte, replacer le jumper DF-E, débrancher la clef USB, rebrancher la carte 22. Celle-ci démarre correctement. 23. Pour installer les logiciel pour la carte, taper les lignes suivantes : $ mount /dev/sda1 /media/usb $ cd /media/usb/install $./install La premiere ligne permet que la clef USB ne soit plus qu un matériel, et qu on puisse acceder aux fichiers présent dessus. Les deux suivantes permettent de rentrer dans le dossier et de lancer l installation. 24. Suivre les instruction à l écran, attention aux fautes de frappes, si c est le cas faire Ctrl+C et relancer le programme.
I. Platine ARM IV I.2 Script d installation Le script d installation se lance avec les points 23/24 de la partie précédente. Celui-ci fonctionne en plusieurs parties : 1. Désactivation du DHCP : utile seulement si le réseau ne possède pas de serveur DHCP, dans ce cas il faudra rentrer manuellement les informations par exemple Adresse IP: 172.28.2.1 Masque de sous-réseaux : 255.255.0.0 Réseaux : 172.28.0.0 Broadcast: 172.28.255.255 Passerelle: 172.28.0.1 Ces données doivent être en concordance avec le réseau. 2. Suppression des services inutiles : Des services comme le système de fichiers à distance seront désactivés au démarrage. Cela permet de faire gagner entre 40 et 60 secondes au démarrage. 3. Installation du serveur Web : permet l installation du serveur Web sur la carte, nécessaire à l utilisation des pages Web de configuration du serveur. 4. Installation d Asterisk : Permet l installation du serveur de Voix sur IP 5. Installation des Pages Web Sprinte : Installe les pages de configuration du serveur. 6. Installation de CanFestival et du Driver PEAK : permet l utilisation du CANOpen avec le module USB PEAK, ainsi que le serveur qui permet de récupérer des données via le buf CANOpen
I. Platine ARM V I.3 Installation du compilateur Le compilateur livré avec la carte fonctionnant très mal voir pas du tout, il a fallu trouver un autre compilateur. Celui-ci est beaucoup plus performant. Voici les instructions pour le télécharger et l installer : $ wget ftp://ftp.sunet.se/pub/linux/distributions/eldk/4.1/arm-linux-x86/......iso/arm-2007-01-21.iso $ sudo mkdir /mnt/virtual $ sudo mkdir /opt/eldk $ sudo mount -o loop /mnt/virtual./arm-2007-01-21 $ cd /mnt/virtual $./install -d /opt/eldk $ PATH=$PATH:/opt/eldk/bin:/opt/eldk/usr/bin A la fin de cette étape vous serez en mesure d utiliser les programmes arm-linux-* qui sont les équivalent des programme prévue normalement pour l architecture Intel.
I. Platine ARM VI I.4 Configuration manuelle de la carte réseau La carte perd environ 30 secondes au démarrage à essayer de trouver un serveur DHCP, nous allons donc lui donner une adresse IP fixe de manière à ce que se problème ne se produise plus. Cela se fait grâce à la commande vim, ouvrir le fichier de configuration vim /etc/network/interfaces, puis remplacer son contenu par : auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 172.25.2.200 netmask 255.255.0.0 network 172.25.0.0 broadcast 172.25.255.255 gateway 172.25.1.1 pre-up ifconfig eth0 hw ether 00:de:ad:b0:05:00
I. Platine ARM VII I.5 Compilation d Asterisk Télécharger la nouvelle version d Asterisk sur : http://www.asterisk.org/, décompresser la. Ouvrir une invite de commande dans le répertoire où se trouvent les sources d Asterisk $ sudo mkdir /home/votreuser/asterisk_build $ sudo./configure --host=arm-linux --prefix=/home/votreuser/asterisk_build... configure: Package configured for: configure: OS type : linux-gnu configure: Host CPU : arm configure: Cross Compilation = YES $ sudo make... +--------- Asterisk Build Complete ---------+ + Asterisk has successfully been built, and + + can be installed by running: + + + + make install + +-------------------------------------------+ $ sudo make install Copier le contenu présent dans /home/votreuser/asterisk build sur une clef usb, puis brancher la clef à la carte et copier le contenu de la clef à la racine.
I. Platine ARM VIII I.6 Compilation du noyau 1. Créer un dossier kernel dans lequel nous travaillerons $ mkdir kernel && cd kernel 2. Télécharger le noyau sur http ://www.kernel.org/ (version 2.6.25.3 actuellement) $ wget http://www.eu.kernel.org/pub/linux/kernel/v2.6/......linux-2.6.25.3.tar.bz2 3. Télécharger les patchs pour la platine sur http ://maxim.org.za/at91 26.html $ wget http://maxim.org.za/at91rm9200/2.6/2.6.25-at91.patch.gz 4. Décompresser l archive du noyau et rentrer dans le dossier ainsi créé $ tar xzvf linux-2.6.25.3.tar.bz2 $ cd linux-2.6.25.3 5. Appliquer les patchs du noyau $ gunzip 2.6.25-at91.patch.gz -cd patch -p1 6. Application de la configuration du noyau $ make ARCH=arm CROSS_COMPILE=arm-linux- sam9_l9260_defconfig 7. Lancement de la configuration manuelle (seulement si necessaire) $ make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig 8. Lancement de la compilation $ make ARCH=arm CROSS_COMPILE=arm-linux- uimage Le fichier généré se trouve dans arch/arm/boot/uimage
I. Platine ARM IX I.7 Compilation de CanFestival 1. Télécharger et décompresser l archive de Canfestival puis rentrer dans le dossier $ wget http://lolitech.dyndns.org/canfestival_3_hourly_cvs.tgz $ tar xzvf CanFestival_3_hourly_CVS.tgz $ cd CanFestival-3 2. Configuration et compilation $./configure --cc=arm-linux-gcc --cxx=arm-linux-cpp......--ld=arm-linux-gcc --arch=arm --can=peak_linux $ make && make install Les librairies créées se trouvent dans /usr/arm-linux, en revanche sur la platine il faudra les placer dans /usr.
I. Platine ARM X I.8 Protocole Client-Serveur Sprinte Ce protocole permet de lire et écrire des informations sur le réseaux CANOpen. I.8.1 Création de la connection et arret de la connection La connection s effectue en TCP/IP, les données sont des chaines de caractères. On peut donc se connecter au serveur grace à un client Telnet. Le serveur écoute sur le port 3000. Une fois la connection établie le client doit envoyé «INIT», suivit d un CRLF. Le serveur répond Sprinte VX.x. (où X.x est la version sur serveur par exemple 0.1) Pour arreter la connection : «QUIT»+ CRLF qui ferme la connection. Réponse du serveur «Bye» «KILL»+ CRLF qui ferme la connection et quitte le serveur. Aucun réponse du serveur. I.8.2 Requete client-serveur Code d erreur possible Lors d une requete, si il y a un erreur, le serveur peut retourner deux types de réponses : «ERROR» : Une erreur à eu lieu sur le bus CAN ou avec la pile CANOpen «Requete Invalide» : La requete que l on vient d envoyer n a pas été formatés correctement. Lecture d une donnée Une requete de lecture de donnée dans un dictionnaire d objet d un des noeud du réseau doit etre formaté de la manière suivante : r;a;b;c;d A : Identificateur du node à contacter B : Index de la donnée à acquerir en héxadécimal C : sous-index de la donnée à acquerir en héxadécimal D : Type de données (voir section Type de données)
I. Platine ARM XI La requete est ensuite suivit de CRLF. Le serveur répond soit un code d erreur, soit la donnée. Ecriture d une donnée Une requete d écriture de donnée dans un dictionnaire d objet d un des noeud du réseau doit etre formaté de la manière suivante : w;a;b;c;d;e A : Identificateur du node à contacter B : Index de la donnée à écrire C : sous-index de la donnée à écrire D : Type de données (voir section Type de données) E : Données à écrire soit chaines de caractères, soit nombre en décimal. La requete est ensuite suivit de CRLF. Le serveur répond soit un code d erreur, soit «OK»+CRLF si tout c est bien déroulé. Types de données Voici la liste des types avec le numéro associé. boolean => 01 int8 => 02 int16 => 03 int32 => 04 uint8 => 05 uint16 => 06 uint32 => 07 real32 => 08 visible string => 09 octet string => 0A unicode string => 0B time of day => 0C time difference => 0D domain =>0F int24 => 10
I. Platine ARM XII real64 => 11 int40 => 12 int48 => 13 int56 => 14 int64 => 15 uint24 => 16 uint40 => 18 uint48 => 19 uint56 => 1A uint64 => 1B Configuration de l heure c;d;mmddhhmmyy où : MM : le numéro du mois DD : le numéro du jour HH : le nombre d heure mm : le nombre de minutes YY : l année Par exemple pour régler l heure au 29 juillet 2008 à 16h05 il fautdra la requette suivante : c;d;0729160508 Lire le fichier de log de PDO p;g Le serveur répond la totalité de son fichier journal, dans lequel est stocké tous changement d état des PDO. Chaque ligne est formaté de la manière suivante : Date et heure Numéro de l ascenseur (1 à 4) Etat de la cabine Mode de l ascenseur Vitesse de l ascenseur Niveau de l ascenseur Prochain sens de l ascenseur
I. Platine ARM XIII Sens actuel de déplacement Connecter ou non Suppréssion du fichier de log des PDO p;d Ceci supprime le fichier de log sur le serveur. I.9 Nagios Pour installer Nagios sur la carte, copiez tous les fichiers présent dans le dossier Nagios sur un clef USB. Brancher la clef USB à la platine, la monter, et rentrer dedans. Taper : $ dpkg -i *.deb Ceci va installer tous les paquetages necessaire à nagios et nagios lui-meme. Cette procédure est longue. Il faut maintenant installer les script spécifique à notre application : $ cp check* /usr/lib/nagios/plugins/ On redemare la carte pour que le serveur nagios se lance correctement : $ reboot Nous avons maintenant, en plus des commande NRPE de bases, trois commandes supplémentaire : check voip : qui permet de vérifié que le serveur de VoIP est lancé. check http : qui permet de vérifié que le serveur http est lancé. check sprinte : qui permet de vérifié que le serveur CANOpen est lancé. En ce qui concerne l installation de nagios sur un PC normale, il faut se referer au manuel de celui-ci. Pour ajouter les commande NRPE, il faut se referer au manuel Nagios-Plugins, ou bien utilisé NagiosAdmin