Linux sur une plateforme ARM

Gazette Linux n°145 — Décembre 2007

Adaptation française : François SERMAN

Relecture de la version française : Deny

Article paru dans le n°145 de la Gazette Linux de décembre 2007.

Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières

Spécifications de l'Armadillo 9 ?
Installation de l'environnement de développement
Installation de la chaîne de compilation croisée GNU et des logiciels associés.
Bonjour, Armadillo !
Un module noyau simple pour Armadillo 9
Pour aller plus loin
Références

Résumé

GNU/Linux est rapidement devenu le système d'exploitation de référence pour les applications embarquées.principalement grâce à l'efficacité et à la portabilité du schéma du noyau Linux. Le portage pour Linux de l'ARM, dirigé par Russell M King, rend la vie plus facile aux gens qui utilisent (ou qui veulent l'utiliser) Linux dans leurs dipositifs embarqués,

La carte Amadillo 9 est une petite carte tout-en-un de la taille d'une disquette, commercialisée par tmark Techno, Inc. Bien que petite, elle fournit un support pour les cartes mémoires (Comptact Flash), l'usb2, un port réseau ethernet, et une sortie vidéo. En plus, l'outil de chaîne de développement croisé GNU, le noyau (version 2.4 et 2.6) et le système de fichier sont déjà intégrés par les vendeurs de la carte pour « réduire le temps de développement »;. Sa faible consommation et sa petite taille de fabrication (90.2 x 95.9 mm) font d'elle la carte idéale pour l'observation et la surveillance de périphériques, de bornes-internet, ou, avec un module GPS et un logiciel adéquat comme gpsdrive, un système de navication basé sur Linux.

Spécifications de l'Armadillo 9 ?

La carte Armadillo 9 SBC contient :

Un Processeur Cirrus Logic EP9315 cadencé à 200mhz
64Mo de mémoire SDRAM
8Mo de mémoire FLASH
Un controlleur ethernet 10/100Mb
Une interface RS232
Une interface JTAG pour débugger ou « programmer »
Un connecteur USB 2.0 type A
Une interface Compact Flash
Une interface d'entrée/sortie pour un usage général de 12bits (General Purpose Input/Output)
Une sortie vidéo (connecteur D-Sub 15 broches (mini))
Une interface IDE

La carte Armadillo 9 utilise le chargeur de démarrage 'Hermit' .

Installation de l'environnement de développement

L'installation standard pour développer devrait être similaire à celle-ci. La machine linux que j'utilise tourne sous Fedora Core 6 avec tout le matériel standard (bells and whistles), avec un processeur cadencé à 1.6Hgz, 256Mo de RAM, et 80Go de Disque Dur. Le connecteur série peut-être fabriqué en soudant deux fiches DB9 males et quelques câbles de récupération.

(pin to pin connection)

DB9 -1           DB9 - 2 
2         <->       3
3         <->       2
5         <->       5

Pour nous connecter à la carte, nous allons utiliser un programme de communication par port série : minicom. Connectons le port série de la carte à notre machine de developpement, via notre câble série. À l'invite bash, saisissez :

minicom -m -s /dev/ttyS0

Si vous utilisez le premier port série de votre machine (c'est-à-dire, COM1: sous windows), configurez le port utilisé par minicom comme suit :

 A -    Serial Device      : /dev/ttyS0    
 B - Lockfile Location     : /var/lock   
 C -   Callin Program      :         
 D -  Callout Program      :        
 E -    Bps/Par/Bits       : 115200 8N1    
 F - Hardware Flow Control : No     
 G - Software Flow Control : No    

Maintenant, identifions-nous sur la carte avec les identifiants de connexion par défaut :

nom d'utilisateur : root
mot de passe : root

Installation de la chaîne de compilation croisée GNU et des logiciels associés.

Une des fonctionnalités attractives de la carte Armadillo 9, c'est son support du système GNU/Linux : l'environnement de compilation croisée GNU pour Armadillo est disponible sur le cédérom livré avec la carte. La dernière version est disponible sur le site atmark-techno

La carte Armadillo 9 nous laisse le choix d'utiliser les paquets au format RPM, DEB ou les fichiers tar.gz comme source de la chaîne. Les logiciels suivant sont cependant requis pour un développement minimal d'un système pour Armadillo 9 :

binutils-arm-linux
gcc-arm-linux
libc6-arm-cros

On peut les trouver sur tout ordinateur sous linux en exécutant les commandes suivantes :

# Pour les systèmes basés sur le format de paquets  RPM "rpm -ivh nom_logiciel". Par exemple:
rpm -ivh binutils-arm-linux.rpm

# Pour les systèmes Debian/Ubuntu : "dpkg -i nom_logiciel". E.g.:
dpkg -i binutils-arm-linux.deb

# Pour une installation indépendante de la distribution linux, depuis le source:
tar zxvf binutils-arm-linux.tar.gz
cd binutils-arm-linux
./configure
make 
make install

D'autres logiciels sont nécéssaires pour développer sur l'Armadillo 9 - Par exemple shoehorn, hermit, etc .. - et devront être installés dans le système de développement en utilisant la même méthode.

Bonjour, Armadillo !

Une fois que nous avons installé notre plateforme Armadillo 9 avec Linux à l'intérieur, faisons-lui dire "bonjour" en lançant le fameux "Hello, world!" (que nous appelerons "hello.c")


#include <stdio.h>
int main(){
	printf("hello, world\n");
	return 0;
}

Nous allons le compiler en utilisant le compilateur croisé pour carte Armadillo :

arm-linux-gcc hello.c -o hello

Maintenant, lançons la commande "file" pour voir ce qu'elle a à nous dire à propos de "hello":

file hello
hello: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), for GNU/Linux 2.2.0, not stripped

L'exécutable 'hello' est exécutable sur une carte Armadillo, puisque nous l'avons compilé pour l'architecture ARM - donc nous devons envoyer le binaire à la carte pour le lancer. De nombreuses méthodes (FTP? NFS, etc ...) sont disponibles pour celle-ci, mais je vais utiliser HTTP (via la commande 'wget'). D'abord, lançons le serveur Apache sur la machine hôte.

/etc/init.d/httpd start

Maintenant, copions le fichier 'hello' à la racine du serveur Apache.


cp hello /var/www/html

Ensuite, invoquez minicom et identifiez-vous sur l'Armadillo. Depuis la carte, invoquez les commandes suivantes (192.168.0.1 est l'ip de mon serveur web)

wget http://192.168.0.1/hello
Connecting to 192.168.0.1[192.168.0.1]:80                                     
hello                100% |*****************************|  9475       00:00 ETA

# Donner la permission d'exécution à 'hello' 
chmod +x hello

# Et le lancer
./hello
hello, world 

Ça marche !

Un module noyau simple pour Armadillo 9

Les dernières sources du noyau peuvent-être obtenue depuis le site d'Armadillo.

wget http://download.atmark-techno.com/armadillo-9/source/linux-2.6.12.3-a9-10.tar.gz 
#décompresser la source pour compiler le module pour le noyau
tar zxvf linux-2.6.12.3-a9-10.tar.gz
cd linux-2.6.12.3-a9-10
#puis créer un .config préconfiguré pour l'armadillo 9
make armadillo9_defconfig

Ensuite, explorons l'espace noyau à l'aide du module simpliste 'simple.c'


#include <linux/kernel.h>
#include <linux/module.h>

int init_module(void){
	printk("hello, armadillo!\n");
	return 0;
}

void cleanup_module(void){
	printk("bye, armadillo\n");
}

et compilons le module en utilisant ce Makefile.

# Sur ma machine, je garde les sources du noyau décompressés ici :
# /root/arm/linux-2.6.12.3-a9-10. Modifier ceci pour votre installation. 
obj-m:=test.o
all:
        make -C /root/arm/linux-2.6.12.3-a9-10 M=`pwd` modules
clean: 
        make -C /root/arm/linux-2.6.12.3-a9-10 M=`pwd` clean

Après avoir lancé 'make', nous obtenons un module 'simple.ko' dans le dossier courant. Maintenant, suivons la méthode précédement utilisée pour copier le module sur la carte.

cp simple.ko /var/www/html

Utiliser 'minicom' pour se connecter à la carte de développement, et envoyer le module.

wget http://192.168.0.1/simple.ko

# Inserer le module via insmod
insmod simple.ko

# Affiche 'simple' dans la liste des modules chargés
lsmod 

# Décharger le module
rmmod simple

Nous allons voir le message "armadillo" à la fin si nous lançons la commande 'dmesg'.

Pour aller plus loin

Les possibilitées sont infinies dans le monde de Linux et ARM. L'une des nouvelles tendances dans le monde de l'embarqué s'appelle debootstrap. Cela permet au développeur d'installer une distribution basée sur debian sur la plateforme ARM. Pourvu que nous disposions d'une carte Compact Flash suffisament grande pour contenir une installation minimale de debian (256 ou 512Mo est plus que suffisant), alors le developpement de l'application pour Armadillo 9 devient aussi facile que de saisir :

apt-get install application

Nous explorerons plus en détail "Debootstrapping" dans la partie suivante de cet article.

Références

Le chargeur d'amorçage, le noyau et l'installation du système de fichiers sous une carte Armadillo 9 sont abordés dans le manuel du logiciel Armadillo9. Les informations spécifiques à armadillo sont disponibles sur le site webtmark-techno. La principale source d'information à propos d'ARM Linux est le site web ARM linux .

Maxin B. John travaille pour HCL Infosystems Ltd®, à Pondicherry (Inde) et il est MCA Graduate du Collège gouvernemental de Thrissur. Il aime pratiquer Python et Bash. Il remercie son gourou, Mr. Pramode C.E de l'avoir initié au monde merveilleux de Linux.