Vous êtes sur la page 1sur 8

Raspberry Pi from scratch 2

Christophe Blaess
Cet article a t publi dans le numro 155 (dcembre 2012) de Gnu Linux Magaine !rance
Pour matriser et ajuster parfaitement la configuration de votre Raspberry
Pi, je vous propose de construire un systme entirement personnalis en
partant de zro. Dans le prcdent article nous avons prpar une chane de
compilation, install les fichiers ncessaires pour le bootloader, compil et
copi le noyau inu! et dmarr notre systme. "e #ui s$est termin sur un
message d$erreur fatale. % prsent nous allons construire un systme de
fichiers et y inscrire les applications utilisateur ncessaire pour naviguer
dans notre environnement.
Kernel panic : no init found, try passing init=...
Comme je l'indiquais en fin d'article prcdent, ce message est, de manire assez surprenante, une
excellente nouvelle puisqu'il indique que nous avons parfaitement russi la premire phase de mise au point
de notre systme embarqu. la mise sous tension, le processeur a charg les fichiers du bootloader et les
a excuts. Ces derniers ont cherch un fichier nomm kernel.img !qui est une copie renomme du fichier
arch/arm/boot/zImage produit lors de notre compilation du noyau "inux# et l'ont plac en mmoire avant de
lui transmettre le contr$le.
%n peut suivre le dtail du boot de "inux en examinant la fonction start_kernel() se trouvant dans le
fichier init/main.c des sources du noyau. &n exercice intressant consiste ' comparer les traces du (ernel
!obtenues par exemple sur la console srie comme dcrit dans l'article prcdent# et les routines invoques
par start_kernel() ) on arrive ' reprer les tapes principales et ' comprendre la succession des
oprations ralises.
*u moment o+ se produit le , (ernel panic - rencontr, le noyau se trouve dans l'tat suivant .
/ toutes les tables et structures de donnes internes utiles au fonctionnement du (ernel ont t initialises )
/ le C0&, la mmoire, les interruptions ont t dtects et configurs correctement )
/ les protocoles rseau !par exemple 1C0230 ou &40230# sont pr5ts ' 5tre utiliss )
/ les fonctions d'initialisation des drivers compils statiquement !pas en modules#, dont le matriel a t
reconnus, ont t invoques )
/ le (ernel a mont !en lecture seule# le systme de fichiers dont le nom a t fourni dans le paramtre de
dmarrage root=/dev/mmcblk0p2. 3ci il s'agit de la seconde partition de la carte 64 du 7asberry 0i. 8ous
l'avions prcdemment formate en utilisant un systme de fichiers ext2, ce qui est indiqu !bien que cela
ne soit pas indispensable# dans le paramtre rootfstype=ext2.
0our poursuivre l'initialisation du systme, le noyau doit
lancer le processus init !de 034 9#. 0our cela, il
cherche son fichier excutable successivement sur
/sbin, /etc et /bin. Ceci est parfaitement visible dans
la routine init_post() du fichier init/main.c
mentionn plus haut. 8ous allons devoir crer ces
rpertoires.
Arborescence des fichiers
"'outil :uildroot prsent dans l'article prcdent serait
tout ' fait capable de nous prparer une image complte
de l'arborescence des fichiers, contenant tout ce que nous allons construire ici ; et m5me plus ; mais je
trouve qu'' titre pdagogique !voire ludique# il est plus intressant de raliser manuellement l'ensemble de la
mise en <uvre de notre systme.
6i nous insrons ' nouveau la carte 64 sur le 0C de dveloppement, la partition contenant la racine de
l'arborescence est accessible sous /media/!oot. 0our l'instant elle ne contient que le rpertoire lost"fo#nd
cr automatiquement lors du formatage en ext2 !qui sert lors de la vrification du systme de fichiers#.
=uel type de formatage utiliser pour l'embarqu > 3l existe
plusieurs types de systmes de fichiers spcialement con?us
pour optimiser l'emploi des mmoires flash. 0ar exemple
Jffs2 ou le plus rcent Ubifs. 1outefois, ces formats
s'utilisent sur des mmoires flash sans contr$leur !prises
gnralement en charge par le sous/systme @14# et non
pas sur des priphriques blocs comme les cartes 64
qu'emploie le 7asberry 0i. 0our ces dernires mmoires, on
utilise plut$t des systmes de fichiers classiques comme
Vfat !qui prsente l'inconvnient de ne pas prserver
correctement les droits#, ou la famille Ext2/3/4. C'est cette
dernire que j'ai choisie en prenant le systme le plus simple
!Ext2# car nous n'avons aucun besoin de la journalisation
offerte par AxtB, ou des extensions proposes par Ext4.
Crons tout d'abord les rpertoires principaux .
[RaspberryPi]$ cd /media/Root
[Root]$ ls
lost+found
[Root]$ sudo mkdir bin dev etc home lib mnt proc root sbin sys tmp usr var
0uis des sous/rpertoires qui nous serviront pour la
suite .
[Root]$ sudo mkdir dev/pts etc/init.d
usr/bin usr/sbin
[Root]$ cd -
[RaspberryPi]$
%utre les rpertoires habituels que l'on trouve sur tous les systmes "inux, nous avons cr .
/ /dev/pts . un point de montage pour le systme de fichiers virtuel devpts, qui sert ' obtenir des pseudo/
terminaux esclave, par exemple, pour telnet ou ssh.
/ /etc/init.d . ce rpertoire contiendra un script de configuration pour le processus init que nous
installerons plus loin.
Modules du noyau
8ous avons compil un (ernel contenant tous les drivers ncessaires pour dmarrer. 1outefois certains
lments ont t compils sous forme de modules car nous n'en aurons pas systmatiquement besoin. 0our
que les outils classiques de chargement !modprobe par exemple# les trouvent, ces modules doivent 5tre
install dans un emplacement bien prcis de l'arborescence . /lib/mod#les/$n#mero%d#%noya#&/.
Cette installation se fait automatiquement depuis le rpertoire des sources du noyau aprs compilation .
[RaspberryPi]$ cd linux-raspberrypi
[linux-raspberrypi]$ make ARCH=arm IN!A""#$%&#'A!H=/media/Root modules#install
[...]
[linux-raspberrypi]$ ls /media/Root/lib/modules/(.).*-+lm,-/
build modules.dep.bin modules.seriomap
kernel modules.devname modules.softdep
modules.alias modules.ieee139map modules.symbols
modules.alias.bin modules.inputmap modules.symbols.bin
[...]
[linux-raspberrypi]$ cd ..
[RaspberryPi]$
Processus init
8ous pourrions parfaitement crire notre propre processus init. 4ans le cas d'un systme embarqu trs
limit c'est une solution tout ' fait lgitime que j'ai d'ailleurs rencontre lors du portage de logiciels
initialement crits pour des micro/contr$leurs. 8anmoins, il est souvent prfrable d'utiliser un init
, standard - car il faut qu'il remplisse deux r$les diffrents .
/ pour terminer le boot, init doit raliser certaines tCches !monter les systmes de fichiers spciaux comme
/proc, remonter la racine du systme de fichiers en lecture/criture, charger les modules supplmentaires
du (ernel, initialiser les interfaces rseaux, etc.# qu'il est d'usage de sous/traiter ' un script shell )
/ pendant le fonctionnement normal du systme, init doit lire les tats de terminaison des processus
orphelins !dont le processus pre s'est termin auparavant#, ce qu'il ralise ' l'intrieur d'un petit handler
pour le signal 'I()*+, !qui lui est envoy automatiquement par le (ernel dans ce cas#.
8ous utiliserons donc de prfrence un processus init classique qui nous permettra d'ajuster les actions
d'initialisation du systme dans un script shell. "e plus simple sera d'utiliser la version d' init incluse dans
l'outil b#sybox.
"a partition tant formate en ext2, le noyau de notre
systme de dveloppement prend en considration les
proprits et les droits sur les fichiers !contrairement ' la
partition formate en vfat que nous avons utilise pour le
boot#. C'est pour cela qu'il est gnralement ncessaire de
les manipuler avec les droits root par l'intermdiaire de la
commande s#do.
Compilation et installation de Busybox
"e projet :usybox a pour objet de regrouper en un seul fichier excutable l'essentiel des commandes &nix
!environ DEE# utiles au quotidien. Ceci simplifie la mise en <uvre d'un systme embarqu ; en vitant de
grer des dizaines de pac(ages diffrents ; d'autant que l'implmentation des commandes est faite avec un
souci d'conomie de taille de code, en supprimant les options rarement utiles ou en les rendant dsactivables
' la compilation. %n retrouve :usybox sur la plupart des configurations ' base de "inux embarqu, parfois
ajust pour ne contenir qu'une poigne de commandes indispensables.
"e principe de fonctionnement de l'utilitaire b#sybox est simple . lorsqu'il dmarre, il examine la ligne de
commande qui a servi ' l'invoquer ; dans le tableau argv-. de sa fonction main() ; afin de savoir sous quel
nom il a t appel et quels sont ses arguments.
/ si on l'a invoqu sous le nom b#sybox sans autres arguments, il affiche sur la sortie standard la liste des
commandes !applets# qu'il intgre )
/ si il a t appel sous le nom b#sybox avec des arguments, il attend en premire position le nom de l'applet
' invoquer, par exemple , / b#sybox ls %l - auquel cas il se comporte comme la commande ls en
prenant en considration l'argument %l )
/ enfin, si le fichier excutable b#sybox a t invoqu ; via un lien physique ou symbolique ; sous un autre
nom !par exemple ls#, il se comporte comme la commande correspondante.
8ous allons compiler :usybox en intgrant un nombre important d'applets, afin de disposer d'un systme
confortable sur notre 7aspberry 0i. 1outefois, il est possible de rduire fortement leur liste si on souhaite
construire un environnement plus restreint. Commen?ons par tlcharger la dernire version de :usybox et
prparer la compilation .
[RaspberryPi]$ .+et http///busybox.net/do.nloads/busybox-).01.0.tar.b20
[...]
[RaspberryPi]$ tar x3, busybox-).01.0.tar.b20
[RaspberryPi]$ cd busybox-).01.0/
[busybox-1.!".!]$ .+et http///....blaess.,r/christophe/,iles/+lm,/rpi-scratch-
10/con,i+-busybox-).01.0
[busybox-1.!".!]$ mv con,i+-busybox-).01.0 .con,i+
[busybox-1.!".!]$ make menucon,i+
Comme nous en avons l'habitude pour la compilation d'un
noyau "inux, la commande make men#config propose
une interface semi/graphique pour diter la configuration
contenue dans le fichier .config.
"'tendue des commandes implmentes dans les
dernires versions de :usybox est impressionnante, on
pourra s'en rendre compte en parcourant les sous/menus
de configuration.
8otons simplement pour l'instant que nous trouverons un
processus init, un shell sh, et de nombreux utilitaires
usuels !ls, cp, mv, etc. et m5me une version simple de
l'diteur vi#.
0our compiler :usybox une fois la configuration termine
il faut prciser l'emplacement du cross-compiler que nous
avons construit avec :uildroot dans l'article prcdent .
[busybox-1.!".!]$ make CR%#C%$'I"4=/usr/local/cross-rpi/usr/bin/arm-linux-
[...]
#$% &usy&ox.txt
#$% busybox.1
#$% &usy&ox.'tml
[busybox-1.!".!]$ ls -l busybox
-r(xr(xr-x 1 )pb )pb **++" ,uil. 1- 1*.-9 busybox
8ous devons maintenant installer ce fichier binaire dans les rpertoires de notre cible, et crer les liens
symboliques avec les noms de toutes les applets incluses lors de la configuration. Ceci serait extr5mement
fastidieux, aussi laisserons/nous :usybox raliser ce travail lui/m5me en invoquant
[busybox-1.!".!]$ sudo make CR%#C%$'I"4=/usr/local/cross-rpi/usr/bin/arm-linux-
install
"e point de montage o+ se trouve la carte 64 !/media/!oot# a t indiqu lors de la configuration de
:usybox !menu , Busybox Settins -, sous/menu , !nstallation "ptions -, %ption , Busybox !nstallation
#refix -#. 3l est trs important de bien le configurer avant de lancer la commande d'installation. Frifions le
rsultat .
[busybox-1.!".!]$ ls /media/Root/bin/
[ dumpkmap kill po(ertop tar
[[ dumpleases killall printenv t)psvd
add/roup e)'o killall- printf tee
[...]
dnsdomainname iprule pipe0pro/ress syn)
dos!unix iptunnel pkill ta)
du kbd0mode pmap tail
[busybox-1.!".!]$ ls /media/Root/sbin/
a)pid freeramdisk lo/read pivot0root s(it)'0root
ad,timex fs)k losetup po(eroff sys)tl
arp fs)k.minix lsmod raidautorun syslo/d
[...]
fbset insmod nanddump sulo/in 1)ip
fbsplas' klo/d nand(rite svlo/d
fdisk loadfont nbd-)lient s(apoff
findfs loadkmap ntpd s(apon
[busybox-1.!".!]$
Biblioth!ues
"ors de la configuration de :usybox, on peut choisir
!dans le menu , Busybox Settins -, sous/menu
, Build "ptions -# d'activer l'option , Build Busybox as
a static binary - afin que le fichier excutable embarque toutes les fonctions dont il a besoin et soit totalement
autonome. %u au contraire, il est possible de dsactiver cette option pour que le fichier excutable emploie
des bibliothques partages.
"a premire option est intressante si le systme ne comporte qu'un seul excutable !ce qui sera le cas pour
le moment# et qu'aucun ajout ultrieur d'autres programmes n'est envisag. Cela vitera d'avoir ' grer
l'installation des bibliothques dynamiques sur la cible.
l'inverse, ds qu'on envisage d'installer plusieurs fichiers excutables, il est prfrables que le code qu'ils
partagent ne soit pas dupliqu sur la cible mais soit partag dans des bibliothques dynamiques. Ceci permet
en outre de mettre ' jour les bibliothques !corrections, amliorations, etc.# sans avoir besoin de recompiler
les excutables.
3ci, j'ai choisi de compiler :usybox afin qu'il s'appuie sur des bibliothques dynamiques. @ais il est
ncessaire de savoir lesquelles sont ncessaires et o+ les trouver. 1outes les bibliothques disponibles pour
la cible ont t compiles en m5me temps que la cross-toolchain obtenue avec :uildroot. 3l y en a une
vingtaine, installes dans /#sr/local/cross%rpi/#sr/arm%lin#x/sysroot/lib. 0our savoir quelles sont
les bibliothques ncessaires pour notre excutable, nous pouvons invoquer l'utilitaire arm%lin#x%ldd de la
toolchain, nanmoins je prfre toutes les copier sur la cible pour qu'elles soient disponibles lorsque nous
ajouterons des applications ultrieurement.
[busybox-1.!".!]$ cd /media/Root/lib/
[lib]$ cp /usr/local/cross-rpi/usr/arm-linux/sysroot/lib/5 .
3l est possible de demander ' :usybox de crer
automatiquement les liens sur lui/m5me lorsqu'il dmarre, en
ajoutant dans le script de dmarrage la commande
, b#sybox %%install -. Ceci ncessite quand m5me
de crer manuellement les liens init et sh.
"ichiers de #de$
"e rpertoire /dev contient par convention les fichiers spciaux reprsentant les priphriques en mode
caractre ou bloc. 8ous pourrions crer ces fichiers avec la commande mknod en nous basant sur les
numros de priphriques d'un systme existant ou en consultant le fichier ,oc#mentation/devices.txt
des sources du noyau. 1outefois une solution beaucoup plus lgante existe, qui prsente en outre
l'avantage d'5tre compatible avec les drivers modernes qui demandent au noyau de leur attribuer
dynamiquement un numro majeur.
8ous allons invoquer dans notre script de dmarrage l'utilitaire mdev contenu dans :usybox, qui va se
charger de crer dans /dev les fichiers spciaux pour les priphriques dj' identifis. Ceci s'obtient ainsi .
/sbin/mdev -s
An outre, pour les priphriques non encore dtects !parce que leurs drivers sont compils en modules ou
parce qu'ils ne sont pas encore relis ' la carte#, nous allons demander au noyau d'invoquer
automatiquement mdev lorsqu'il les identifie, en inscrivant .
echo /sbin/mdev 6 /proc/sys/kernel/hotplu+
3l nous faudra ajouter des sous/rpertoires dans /dev ultrieurement, mais pour le moment nous pouvons
laisser ce rpertoire vide.
"ichier de configuration
0our notre premire version, la plus simple possible, nous n'allons fournir au systme qu'un seul fichier de
configuration . /etc/inittab qui permet de configurer le comportement du processus init !sur les
distributions courantes, ce fichier, hrit des &nix 6ystme F tend ' disparaGtre au profit de systemd#. 8otre
fichier va contenir les lignes suivantes .
//sysinit//etc/init.d/rc
tty)//respa.n//bin/sh
tty0//respa.n//bin/sh
tty(//respa.n//bin/sh
tty7//respa.n//bin/sh
ttyA$A1//respa.n//bin/sh
"a premire ligne indique ' init qu'il doit excuter au moment du dmarrage le script se trouvant dans
/etc/init.d/rc'. 8otez qu'il s'agit du comportement par dfaut du init de :usybox, m5me en l'absence
de fichier inittab.
"es quatre lignes suivantes lancent directement un shell sur les quatre consoles virtuelles du 7aspberry 0i,
entre lesquelles on peut commuter avec les touches *lt/H9, *lt/HI, *lt/HB et *lt/HD. "a dernire ligne lance
galement un shell sur le port srie 76/IBI dont nous avons parl dans l'article prcdent, et sur lequel nous
avons jusqu'' prsent lu les messages de boot du (ernel.
7emarquez bien qu'il n'y a aucune identification des utilisateurs. 4s le dmarrage les consoles sont
directement accessibles, sans authentification avec les droits root. Cette approche est courante du moins
durant la phase de mise au point, dans les systmes embarqus ou ; ' l'inverse des postes de bureautique
; on travaille souvent sous l'identit root. 8ous nous intresserons ' la scurisation de ces accs
ultrieurement.
0our copier le script inittab sur la cible, nous pouvons le tlcharger ainsi .
[lib]$ cd /media/Root/etc/
[et)]$ .+et http///....blaess.,r/christophe/,iles/+lm,/rpi-scratch-10/inittab
%cript de d&marrage
Anfin, crire un script de dmarrage est la dernire action ' raliser avant de booter notre systme
personnalis. Ce script doit au minimum remplir les r$les suivants .
/ monter les systmes de fichiers spciaux /proc et /sys,
/ remonter l'arborescence principale en lecture/criture,
/ appeler mdev pour remplir le rpertoire /dev,
8ous rajouterons d'autres tCches par la suite.
Foici le contenu du script .
89 /bin/sh
mount none /proc -t proc
mount none /sys -t sys,s
mount / -o remount:r.
/sbin/mdev -s
echo /sbin/mdev 6/proc/sys/kernel/hotplu+
%n peut le tlcharger directement .
[et)]$ cd /media/Root/etc/init.d
[init.d]$ .+et http///....blaess.,r/christophe/,iles/+lm,/rpi-scratch-10/rc
*ttention ' ne pas oublier de le rendre excutable avec
[init.d]$ chmod -x rc
'est du systme
*prs avoir proprement dmont la carte 64, et l'avoir insre dans son support sur le 7aspberry 0i, nous
pouvons procder ' un premier boot. Fous avez deux possibilits pour accder ' votre systme .
/ brancher un cran et un clavier !la souris n'est pas encore utile# sur le 7aspberry 0i $ia les interfaces J4@3
et &6: )
/ brancher un cCble sur le port srie et utiliser un mulateur de terminal !comme minicom# sur votre poste de
travail.
4ans un cas comme dans l'autre, vous devriez voir dfiler les messages
2n)ompressin/ 3inux... done4 bootin/ t'e kernel.
[ ".""""""] 5nitiali1in/ )/roup subsys )pu
[ ".""""""] 3inux version 3.1.9-/lmf+ 6)pb78tation-%P&9 6/)) version .-.3 6&uildroot
!"1!."-9 9 :!" PR;;<P= 8at >ul !1 "9.31.!! %;8= !"1!
[?]
[ .+*-931] usb 1-1.1. @e( 28& devi)e found4 idAendorB"!4 idProdu)tBe)""
[ .*"--9-] usb 1-1.1. @e( 28& devi)e strin/s. <frB"4 Produ)tB"4 8erial@umberB"
[ .*!-1*+] sms)9-xx v1.".
[ .9"13-C] sms)9-xx 1-1.1.1.". et'". re/ister Dsms)9-xxD at usb-b)m!+"*0usb-1.14
sms)9-xx 28& !." ;t'ernet4 b*.!+.eb.33."1.!b
E :
3l arrive parfois que le prompt soit affich avant la reconnaissance du contr$leur &6:/Athernet. 4ans ce cas,
pressez simplement Antre pour l'afficher ' nouveau. Axplorons un peu notre environnement .
E : ls
bin 'ome lost+found root tmp
dev lib mnt sbin usr
et) linuxr) pro) sys var
8ous pouvons vrifier que nous trouvons bien dans /bin, /etc, lib/ et /sbin les fichiers que nous avons
inscrits sur notre carte. Foyons les fichiers spciaux crs par mdev .
E : ls /dev/
1-1.1 ram13 tty!3 tty--
1-1.3 ram1 tty! tty-C
[?]
ram11 tty!1 tty-3
ram1! tty!! tty-
0uis observons quelques informations systme .
E : )at Epro)E)puinfo
Pro)essor . FR<vC-)ompatible pro)essor rev + 6vCl9
&o/o<5P8 . C9+.9-
Geatures . s(p 'alf t'umb fastmult vfp edsp ,ava tls
%P2 implementer . "x1
%P2 ar)'ite)ture. +
%P2 variant . "x"
%P2 part . "xb+C
%P2 revision . +
Hard(are . &%<!+"*
Revision . """!
8erial . """"""""a"33"1!b
"e processeur contient un c<ur appartenant ' l'architecture *7@vK ! *7@ 99LKMNH/6# sur un System-"n-
%hip :C@ILEO.
E : free
total used free s'ared buffers
<em. !!3"+! -" !1+C3! " 1**
-E+ buffers. -!-! !1+*!"
8(ap. " " "
3l y a environ IID @io libres, ce qui correspond au choix que nous avons fait dans l'article prcdent pendant
l'installation du bootloader.
E : ps
P5# 28;R =5<; %$<<F@#
1 " "."1 init
! " "."" [kt'readd]
3 " "."" [ksoftirIdE"]
[?]
31 " "."" [mm)IdE"]
3C " "."" [flus'-1+9."]
39 " "."" EbinEs'
" " "."" EbinEs'
3 " "."" EbinEs'
C " "."" EbinEs'
9 " "."" EbinEs'
-9 " "."" ps
E :
8ous voyons qu'outre les threads du (ernel !entre crochets#, il y a un processus init et cinq shells !sur les
quatre consoles et sur le port srie#.
Configuration du cla$ier
6i vous utilisez votre 7aspberry 0i via la liaison srie, tout se passe correctement en principe. An connexion
directe avec un clavier &6: et un cran J4@3 vous avez sPrement eu la surprise de voir que votre clavier
est reconnu suivant une organisation =Qerty et non *zerty.
0our configurer le clavier correctement, il faut appeler, au sein du script de dmarrage, la commande
loadkmap de :usybox en lui envoyant sur son entre standard le contenu d'un fichier de configuration. @ais
comment obtenir ce fichier > 6implement en invoquant l'applet d#mpkmap de :usybox aprs l'avoir recompil
sur un systme o+ le clavier est configur correctement !par exemple votre 0C de dveloppement#.
3nsrons donc ' nouveau la carte 64 sur le 0C et excutons .
[J]$ sudo busybox dumpkmap 6 a2erty.kmap
[J]$ sudo cp a2erty.kmap /media/Root/etc/
6i vous prfrez tlcharger un fichier azerty.kmap tout pr5t excutez plut$t .
[J] $ cd /media/Root/etc/
[et)]$ .+et http///....blaess.,r/christophe/,iles/+lm,/rpi-scratch-10/a2erty.kmap
0uis r/ditons etc/init.d/rc' pour ajouter la ligne suivante en fin de fichier .
loadkmap ; /etc/a2erty.kmap
8ous pouvons redmarrer le 7aspberry 0i et constater que le clavier est bien *zerty.
Arr(t du systme
partir de maintenant, vous disposez d'un systme "inux complet, dont la partition principale est monte en
lecture/criture, aussi est/il dangereux de l'teindre , brutalement - en coupant l'alimentation !certaines
critures sont diffres de plusieurs dizaines de secondes#.
0our arr5ter proprement votre systme 7aspberry 0i, il
faudra appeler la commande halt de :usybox !qui
tuera tous les processus actifs et invoquera sync pour
enregistrer les donnes contenues dans le cache du
disque#. M'ai m5me tendance dans ce cas ' remonter le
systme de fichiers principal en lecture/seule en
excutant .
E : mount / -o ro:remount < halt
=erminated
[ *--*."*+C"] 8ystem 'alted.
Conclusion
8ous avons mis au point un systme "inux embarqu minimal. %n peut noter la rapidit du boot, puisqu'il
s'coule ' peine six secondes entre la mise sous tension et l'accs au shell. Cette dure peut encore 5tre
rduite ' cinq secondes si l'on supprime les traces du (ernel !en dsactivant l'option , Enable support for
print& - du sous/menu , %onfiure standard &ernel features - dans le menu , 'eneral setup - de
configuration du noyau#. 1outefois, l'absence de message du (ernel est risque car aucune information ne
sera disponible en cas de problme au boot ) cette solution ne doit 5tre envisage qu'au moment du
basculement en phase de production.
"es oprations ralises dans cet article n'taient pas trs spcifiques au 7aspberry 0i, mais s'appliquent '
beaucoup d'autres environnements "inux embarqu. 3l nous reste encore plusieurs domaines ' approfondir
sur le 7aspberry 0i . la configuration rseau Athernet, l'authentification des utilisateurs, le son,
l'environnement graphique, les entres/sorties par R03%... Ceci fera l'objet du prochain article.
Pour en sa$oir plus
/ "e site de documentation principale !officielle et officieuse# sur le 7aspberry 0i se trouve ' l'adresse .
http"##elinux$org#%&'i()ub )
/ Me vous conseille la lecture de la quatrime dition du , (inux embar)u* - de 0ierre Hicheux et Aric :nard,
rfrence incontournable du domaine )
/ Anfin, on peut trouver sur mon blog ' l'adresse http"##christophe$blaess$*r diffrents articles sur des
systmes "inux embarqus et temps rel !notamment 0andaboard et 3gep vI#.
Christophe Blaess + christophe,blaess$*r
3l m'est arriv de prparer des systmes embarqus o+
l'alimentation risquait d'5tre interrompue inopinment et o+ il
ne fallait pas perdre de donnes en cas d'arr5t brutal. 0our
cela, la racine du systme de fichiers tait monte en
lecture/seule et les rpertoires /tmp, /var, etc. taient
crs sur une partition en mmoire !ramdis&# formate au
boot. "e rpertoire /home dans lequel des donnes
cruciales taient collectes se trouvait galement en
mmoire mais tait synchronis toutes les trente secondes
avec une partition sur carte 64 monte temporairement en
lecture/criture. 0our 5tre exact, la synchronisation se faisait
alternativement sur deux partitions diffrentes, afin de
disposer dans le pire des cas !coupure d'alimentation
pendant une criture corrompant la partition# des donnes
vieilles de trente secondes avant le crash sur l'autre partition.

Vous aimerez peut-être aussi