You are on page 1of 16

Sommaire

Formation au Noyau Linux


Prsentation gnrale
Compiler

Jrme Pouiller <j.pouiller@sysmic.org>

Les concepts de dveloppement


Debugguer
LAPI
Contribuer

Sysmic - J. Pouiller

Prsentation de la cible

Quest-ce que Linux ?

La cible : Calao USB-A9260

Formation au Noyau Linux

Prsentation de la cible

2 / 182

Quest-ce que Linux ?

La cible : Calao USB-A9260

Architecture trs classique dans le milieu de Linux embarqu :


Microcontrolleur Atmel AT91SAM9260
Core ARM926EJ-S 180MHz
64Mo de RAM
256Mo de flash
64Ko dEEPROM
Choisie car compacte et trs bien supporte par Linux

Sysmic - J. Pouiller

Formation au Noyau Linux

3 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

4 / 182

Prsentation de la cible

Quest-ce que Linux ?

Composants de Linux

Prsentation de la cible

Quest-ce que Linux ?

Elements

GNU/Linux est finalement un agglomra :


App
App

App
GNU App

Bash

Il y a trois lments important de GNU/Linux :

App

Le noyau : Linux
GNU lib

Le projet GNU et plus particulirement la glibc, bash et les


coreutils

Lib

Les normes : SystemV, Posix, etc...

GNU libc
Noyau Linux
Matriel

Sysmic - J. Pouiller

Formation au Noyau Linux

Prsentation de la cible

5 / 182

Quest-ce que Linux ?

La Norme Posix

Sysmic - J. Pouiller

Formation au Noyau Linux

Prsentation de la cible

6 / 182

Quest-ce que Linux ?

Le Projet GNU

Cr en 1983 par Richard Stallman


Pose les bases politiques de GNU/Linux

Portable Operating System Interface [for Unix]


Uniformise les OS

GPL publie en 1989


GPLv2 en 1991
GPLv3 en 2006

Premire version publie en 1988


Souvent implment en partie

gcc apparait en 1985

... et parfois sen inspire simplement

bash et les Coreutils apparaissent en 1988 (inspirs de sh


1971/1977)

Posix 9 Linux
Linux 9 Posix

Nombre darchitectures supportes incalculable

Sysmic - J. Pouiller

Formation au Noyau Linux

7 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

8 / 182

Prsentation de la cible

Quest-ce que Linux ?

Prsentation de la cible

Quest-ce que Linux ?

Le noyau Linux

Le noyau Linux

Quelques chiffres

15 millions de lignes de code dans 30000 fichiers (+15%/an)

Cr en 1991 par Linus Torvalds :

Environ 1200 dveloppeurs dans 600 entreprises (+35%/an)

http://groups.google.com/group/comp.os.minix/
browse_thread/thread/76536d1fb451ac60
Inspir de Minix
just a hobby, wont be big and professional like gnu

Environ 5000 contributeurs depuis la premire version de Linux


Environ 650 mainteneurs (cest--dire responsables dune partie
du noyau)

Noyau monolithique

26 architecures (= jeux dinstructions)

Dbat TanenbaumTorvalds
http://groups.google.com/group/comp.os.minix/
browse_thread/thread/c25870d7a41696d2
Modulaire depuis la version 2.6

Des centaines de plateformes


Plus dun millier de drivers
Une centaine de versions publies

Systme communautaire

Environ 10000 contributions sur chaque version

La licence GPL t choisie par pragmatisme et non par conviction


Eternels dbats dopinions entre Stallman et Torvalds

Sysmic - J. Pouiller

Formation au Noyau Linux

Enormment de forks et de version non-officielles


Domaine dapplication trs large, du DSP au super-calculateurs
en passant pas les grille de calcul
9 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

10 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

3
4

Les BSP
Obtenir le noyau
Tlcharger les sources
Comprendre le versionning

Deuxime partie II

Utiliser Git
Organisation des sources
Les sous-rpertoires de la racine

Compiler

Le rpertoire arch/
Compiler le noyau
Le systme de compilation du noyau
Grer les configurations
Modifier les configurations
Compiler
Options de Kbuild
Rsultats de la compilation
Compiler les modules

Sysmic - J. Pouiller

Formation au Noyau Linux

11 / 182

Faire le mnage
Options principales Sysmic - J. Pouiller
Configuration globale

Formation au Noyau Linux

12 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Quest-ce quun BSP ?

Rcupration des sources

Board Support Package (BSP)


Normalement fourni par lintgrateur.
Contient au minimum la toolchain (compilateur, linker,
debuggueur) pour la cible, au minimum les sources, et souvent
des versions pr-compiles
Cette toolchain est souvent compile avec une libc (glibc, clibc,
newlib, bionic, eglibc, dietlibc, klibc, etc...) et une version des
binutils. Si ca nest pas le cas, elle pourra compiler le noyau
Linux, mais aucune binaire utilisateur.
Contient souvent le bootloader (sources et/ou binaire) le noyau
Linux (au minimum les sources, et parfois une version
pr-compile).
Si la cible possde des drivers spcifique externes Linux, ils
doivent (devraient) tre fournis avec la toolchain.
De mme, si la cible doit utiliser certaine bibliothques
spcifiques, elle sont normalement fournies
Contient la documentation (parfois incomplte...)
Assez souvent, un rootfs est fourni
Sysmic - J. Pouiller

Formation au Noyau Linux

Ou rcuprer les sources du originales noyau ?


Utiliser les sources souvent fournies avec le BSP. Il arrive
souvent quelles contiennent des drivers particuliers et quelles
soient dj configures
Tlcharger sur kernel.org
host$ wget http://www.kernel.org/pub/linux/
kernel/v3.x/linux-3.3.tar.bz2
host$ tar xvjf linux-3.3.tar.bz2
Utiliser git clone

13 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

14 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Versionning

Versionning

Au dbut, le noyau sincrmentait de deux en deux : 2.0, 2.2, 2.4,


etc... Les version impaires indiquait les noyau en dveloppement.
Chaque version du noyau apportait des ruptures importantes
avec la version prcdente
Avec le noyau 2.5 puis 2.6, le noyau est arriv une certaine
maturit. Les gros changements sont devenus rares et les
dveloppements sont devenus de plus en plus itratifs
Finalement dans la version 2.6, toutes les versions mineures
sont stables
Les versions stables de la 2.6 peuvent recevoir des correctifs et
sont alors numrots sur 4 chiffres : (exemple : 2.6.32.59)
Le dveloppement dune nouvelle version du noyau 2.6 en
intgrant les patchs provenant des sous-systmes. Les noyaux
produit lors de lintgration de ses patchs est suffixs par rcX
(release candidate).
Le dveloppement noyau alterne les fentres de merge pendant
lesquels, les mainteneurs des sous-systmes envoient leurs
dveloppements Linus Torvalds et fentres de stabilisation.
Sysmic - J. Pouiller

Formation au Noyau Linux

La version 3.0 correspond en fait la version 2.6.40 renomme :


Il ny a eu aucune refonte de larchitecture entre les version 2.6 et 3
Pour fter les 20ans du kernel
Pour marquer lintgration de la branche RT-Preempt dans le
mainstream
Parce quavec le cycle de dveloppement itratif, la version 2.6 ne
sincrmentera jamais. Les version stable quant elles peuvent
recevoir des correctif et se retrouver sur 4 chiffres. Il y avait par
consquent un chiffres en trop. Le passage en 3.Y.Z permettait de
revenir sur un modle classique 3 chiffres.
Le passage en 3.X marque ainssi la stabilisation du cycle de
dveloppement du noyau

Rfrence : Documentation/development-process

15 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

16 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Git

Git
Pour rcuprer un dpt :

git est loutil de gestion de sources du noyau


Il est fortement recommander de lutiliser dans le cadre du
dveloppement du noyau
Il sagit dun systme de gestion dcentralis.
Pour expliquer la dcentralisation, imaginez que :

git clone <dept>


Quelques dpts notables :
git://git.kernel.org/pub/scm/linux/kernel/git/
torvalds/linux-2.6.git Le dpt de Linus Torvalds. Il
contient les derniers patchs du noyau en dveloppement
git://git.kernel.org/pub/scm/linux/kernel/git/
stable/linux-stable.git Le dpt stable. Contient la
dernire version stable du noyau, ainsi les mises jours des
versions stables
git://git.kernel.org/pub/scm/linux/kernel/git/
next/linux-next.git Les dpt une dizaine de sous-projets
importants sont mergs automatiquement dans ce dpt. Utilis
principalement par des robots afin didentifier les problmes de
merge en amont des phases dintgrations
git://git.kernel.org/pub/scm/linux/kernel/git/
tglx/history.git Lhistorique des versions entre 2.5.0 et
2.6.12.

Un utilisateur duplique un dpt svn


Des modifications sont apportes sur les deux dpts
On essaye de resynchronisez les deux dpts...

Considrez git comme un svn capable deffectuer cette opration


trs simplement.
Lorsquun utilisateur rcupre le code dun dpt, il devient
lui-mme dpt
Si lutilisateur laisse un moyen quelconque daccs en lecture
son dpt, dautres personnes pourrons leur tour le cloner ou
tirer les modification quil a effectu
http://git.kernel.org liste les dpts publiques des
principaux dveloppeurs du noyau
Sysmic - J. Pouiller

Formation au Noyau Linux

17 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

18 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Git

Organisation des sources


Rcuprons la version stable

On remarque quil existent dnorme diffrences de tailles entre les


rpertoires :

host$ git clone git://git.kernel.org/pub/scm/linux/


kernel/git/stable/linux-stable.git
Chaque version du noyau est marque avec un tag
host$ git tag
Puis il est possible de rcuprer une version avec
host$ git checkout v3.3
9

Votre dpt est alors non-modifiable. Vous devez crer une branche
de travail :
host$ git checkout -b mybranch v3.3

Sysmic - J. Pouiller

Formation au Noyau Linux

19 / 182

$ du -s */ | sort -n | column
40
usr
4092 scripts
156
samples
5248 kernel
160
init
6436 firmware
180
virt
19524 Documentation
232
ipc
21332 net
884
block
22728 include
1904 crypto
24016 sound
1932 lib
32436 fs
2076 security
121584 arch
2400 mm
252688 drivers
3536 tools

Sysmic - J. Pouiller

Formation au Noyau Linux

20 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Organisation des sources

Organisation des sources

Les services indispensables un OS :


kernel Le scheduler de tches, les frameworks de gestion des
IRQ, le loader de binaires, diverses autre fonctionnalits ne
rentrant dans aucune autre catgories.
mm Le gestionnaire de mmoire. Considr comme la partie la plus
complexe du noyau
init La fonction de dmarrage du noyau (start_kernel).
arch Le code spcifique chaque architecture. En particulier, le
code ncessaire au boot, la gnration des images, les routine
assembleur pour la gestion des interruptions, etc...
On peut estimer que lintelligence rside principalement dans
kernel et mm. On remarque cette partie est finalement
relativement petite dans le noyau.

Sysmic - J. Pouiller

Formation au Noyau Linux

Les services supplmentaires du noyau :


fs Les systmes de fichiers : ext3, NTFS, NFS, etc...
net La gestion du rseau et plus particulirement la stack IP
ipc La gestion des communication inter-processus (shmem, mq,
etc..)
security Les frameworks de gestion de la scurit (selinux,
apparmor, etc..)

21 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

22 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Organisation des sources

Organisation des sources


Des bibliothques utilitaires :

Les drivers

lib Divers utilitaires


crypto Fonctions utilitaires relatives la cryptographie

drivers/* Tous les autres drivers et frameworks de


dveloppements. De loin la plus grosse partie du code du noyau.
sound Les drivers de cartes son.
firmware Certains priphriques ncessitent lupload dun
firmware pour sinitialiser. firmware contient les binaires de ces
firmwares (sans les sources !). La politique de Linux au sujet du
code de ces firmwares est quil sagit de donnes dinitialisation de
ces priphriques et que par consquent, ils ont leurs place dans
larborescence du noyau.
block Le framework des priphriques de block.
virt/kvm Le framework de virtualisation kvm.

Sysmic - J. Pouiller

Formation au Noyau Linux

Le code annexe :
include Les headers exposs du noyau.
scripts Les scripts ou les programmes utilitaires ncessaires
la compilation ou lexploitation du noyau
usr Script ncessaire la gnration des initramfs
tools Les outils permettant la communication de certains
frameworks avec le noyau (particulirement perf)

La documentation
Documentation La documentation
sample Des exemples de code pour certains frameworks

23 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

24 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Les architectures

Le code spcifiques aux architectures

Regardons arch/ de plus prs :

On retrouve dans les sous-rpertoire de arch/ certains


rpertoires de la racine.

Les PC : x86
Les workstations et les serveurs : alpha, sparc (Sun), ia64
(Intel), powerpc, s390 (Mainframes dIBM) parisc
(Workstation HP)
Lembarqu : arm, mips, sh (STMicroelectronics), avr32, m68k,
score, mn10300, m32r h8300
Les architectures ddies : cris (Embedded Network), frv
(Futjisu, Traitement dimage)
Les DSP : c6x (Texas Instrument), heaxgon (Qualcomm),
blackfin
Les softcores : microbaze, xtensa
Les exprimentaux tile (Architecture distribue), unicore32
(Universit de Pekin), openrisc
User Mode Linux : um

mach-, plat-, plateforms contiennent du code spcifique


un type de plateformes : Ti Omap, Atmel AT91, PowerPC 85xx
On pourra trouver des fichiers spcifique aux board.
Particulirement vrai pour les architectures non plug-and-play qui
ncessite que les priphriques soient dclars manuellement
include/ contient des headers spcifiques larchitecture.
Lors de la compilation, un lien symbolique sera cr entre
arch/<ARCH>/include/asm et include/asm. Ce lien
permet au noyau de sabstraire de la plateforme
boot/ contient le code ncessaire au dmarrage de la cible :
Le code du bootloader et les scripts associs permettant la
dcompression du noyau en mmoire
Les scripts ncessaire la gnration dune image au format du
bootloader, du flasher ou de la sonde JTAG

On retrouve nos 26 (+1) architectures supportes


Sysmic - J. Pouiller

Formation au Noyau Linux

25 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

26 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Fonctionnement de Kconfig

Le systme de compilation
Pour obtenir de laide sur les diffrentes cibles :

Systme de compilation du noyau

host$ make help

Application de la rgle : Pas gnrique mais simple hacker


Dpend principalement de gmake
Pas un systme de compilation rel. Compos de :

La variable ARCH= spcifie larchitecture cible utiliser. Elle


impacte les options du noyau. Comparez make help avec make
ARCH=arm help.

Kconfig : Systme de gestion de configuration


Kbuild : Ensemble de rgles de Makefile bien penses

Si ARCH nest pas spcifie, Kconfig utilise larchitecture host.

Adapt aux environnements proposant beaucoup doptions de


configuration

Lorsque vous avez commenc spcifier ARCH, vous devez


toujours la spcifier.

Trs bien adapt la cross-compilation

Il est toutefois possible de placer cette variable dans le Makefile


racine ou dans lenvironnement pour viter de loublier.

Utilis dans dautre projets : clibc, busybox, buildroot (tous


dans le milieu de lembarqu)

Sysmic - J. Pouiller

Formation au Noyau Linux

host$ export ARCH=arm

27 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

28 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Travailler avec les configurations

Travailler avec les configurations


Lorsque votre fichier .config nest parfaitement compatible
avec vos sources (import, mise jours des sources, dition
manuelle, ...), il recommand (ncessaire ?) de lancer

make help propose des configurations prtablies. Il est


possible dimporter une de ces configuration :

host$ make oldconfig

host$ make ARCH=arm usb-a9260_defconfig

oldconfig vous indique dventuelles incompatibilit entre


votre configuration et vos sources et vous demande votre avis
sur les nouvelles options
Pour rpondre systmatiquement avec la rponse par dfaut :

Kconfig sauvegarde la configuration dans .config.


Le fichier .config sera ensuite :
Sourc dans les systmes de Makefile
Transform en include/generated/autoconf.h et inclut dans
les headers de compilations

host$ yes "" | make oldconfig


Obtenir la liste des nouvelles options par rapport votre
configuration :

Certains constructeur vous fournirons un patch ajoutant une


cible _defconfig

host$ make listnewconfig

... dautres vous fournirons un .config

Sysmic - J. Pouiller

Formation au Noyau Linux

Vous pouvez normalement trouver la configuration du noyau de


votre host dans /boot/config-uname -r
Sauver votre configuration en effectuant un sanity check
29 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

host$ make savedefconfig

30 / 182

Rfrence : Documentation/kbuild/kconfig.txt

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Configurer le noyau

Configurer le noyau
En Qt4

Pour configurer les options :


En ligne de commande (inutilisable pour un humain)

host% apt-get install libqt4-dev


host$ make xconfig

host$ make config

En Gtk

En ncurses

host% apt-get install libglade2-dev


host$ make gconfig

host% apt-get install libncurses5-dev


host$ make menuconfig

Dans toutes les interfaces, il est possible dobtenir de la


description sur llment slectionn (<h> ou <?>)
Il est possible de rechercher dans les descriptions des lments
(</>)
Dans la recherche et dans laide, vous trouverez des
informations sur les dpendances entre les options
Les script scripts/config permet de changer les
configuration la main

Avec la nouvelle version de ncurses


host% apt-get install libncurses5-dev
host$ make nconfig

Sysmic - J. Pouiller

Formation au Noyau Linux

31 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

32 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Les cibles de compilation

Options de Kbuild
Certaines options peuvent tre passes sur la ligne de commande
afin de modifier le comportement gnral du systme.

La compilation du noyau se lance juste avec

ARCH= spcifie larchitecture utiliser. (Nous lavons dj vu)


CROSS_COMPILE= spcifie le prfixe de la toolchain. Ainsi, si
vous compilez avec
/opt/arm/usr/bin/arm-linux-ulibc-gcc, vous devez
spcifier :
CROSS_COMPILE=/opt/arm/usr/bin/arm-linux-ulibc-.
Par commodit, on prfrera ajouter /opt/arm/usr/bin la
variable denvironnement PATH. Il est aussi possible de
configurer CROSS_COMPILE par Kconfig
V=1 permet dafficher les commandes lances par le systme de
compilation plutt que la version abrge. Pas trs lisible lors
des compilations parallles mais indispensable pour comprendre
certaines erreurs de compilation
De base, le noyau nactive que les warnings utiles (ainsi, les
warnings produits sont rarement ignorer). W=[123] permet
dactiver des warnings supplmentaires

host$ make
Le systme choisi les cible approprie en fonction de votre
architecture (principalement, une image et les modules)
Il est souvent prfrable (ncessaire ?) de spcifier le type
dimage voulue avec
host$ make XXImage
XX fait rfrence au format de la binaire produite :
Le code commence=t=il au premier octet ?
Respecte-t-il le format ELF ?
Y a-t-il un format particulier dentte respecter ?

Dans le doute, il faut consulter la documentation de votre


bootloader
Sysmic - J. Pouiller

Formation au Noyau Linux

33 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

34 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Options de Kmake

Rsultats de la compilation
Fichiers produits (ou productibles) par la compilation :

C={1,2} lance loutil sparse sur les sources. Nous y


reviendrons.
-jX est une option de make qui permet de lancer X compilation
simultanes. Grosso modo, X devrait tre plus ou moins votre
nombre de coeurs CPU.

vmlinux : Limage ELF du noyau. Lisible par les debugueurs,


certains flasheurs, certain bootloaders
vmlinuz : parfois quivalent du bzImage, mais normalement, il
sagit devmlinux compress et stripp des informations inutiles
au dmarrage. Inutilisable dans ltat, il est ncessaire de lui
adjoindre un bootloader pour le dcompresser et lexcuter.
Image : vmlinux stripp et prfix par un mini-bootloader
permettant de sauter sur la fonction start_kernel de
vmlinux.

O= permet de compiler out-of-source :


host$ mkdir build
host$ make ARCH=arm CROSS_COMPILE=arm-linux- O=
build menuconfig
Tous les fichier issus de la gnration seront placs dans build.
Une fois que votre configuration est cre, vous pouvez lancer
make directement partir de build. La compilation
out-of-source permet une grande souplesse de dveloppement
et est fortement recommande.

bzImage et zImage : vmlinuz avec le bootloader bz2 ou gz.


xipImage : Idem Image mais destin tre excut
directement sur un eeprom sans tre copier en mmoire au
pralable.
uImage : Image avec une entte spciale pour u-boot.

Rfrence : Documentation/kbuild/kbuild.txt
Sysmic - J. Pouiller

Formation au Noyau Linux

35 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

36 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Le format S3

Les modules
Une grosse partie du noyau peut tre compil directement dans le
noyau ou sous forme de modules.
Ils sont marqus par < > (non-compil), <*> (link en statique)
ou <M> (compil en module).
Les modules peuvent tre apparents des plugins pour le
noyau. Il peuvent tre charg et dchargs dynamiquement.
Les modules doivent tre prsent sur la cible
Les modules permettent dallger la taille (et amliorer les
performances) du noyau et vitent de redmarrer la cible lors du
dveloppement
Les modules ne peuvent tre charg quaprs le dmarrage du
noyau. Par consquent, certaines fonctionnalits ne peuvent pas
tre sous forme de modules
Les drivers ncessaire au chargements des modules ne peuvent
pas tre des modules. Ainsi, si vos modules sont sur une flash,
tous les drivers ncessaires laccs cette flash doivent tre
statiques
Il est possible de dvelopper des modules en dehors de
Sysmic - J. Pouiller
Formation au Noyau Linux
larborescence du noyau.

Il est possible de gnrer des image au format SRecord en utilisant


objcopy
host$ objcopy -O srec vmlinux vmlinux.srec

Sysmic - J. Pouiller

Formation au Noyau Linux

37 / 182

38 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Les modules et linstallation


make modules permet de compiler les modules
make INSTALL_MOD_PATH=$(pwd)/../target
modules_install copie les modules dans
$INSTALL_MOD_PATH (= dans le rootfs de la cible)
make modules_prepare prepare les sources pour que les
modules extrieur puissent compiler
make INSTALL_PATH=$(pwd)/../target install appelle
arch/$ARCH/boot/install.sh qui appelle
~/bin/installkernel ou copie le noyau dans
$INSTALL_PATH
make *-pkg cre des packages (nafs) pour diverses
distributions. Ces packages contiennent le noyau et les modules.
make INSTALL_HDR_PATH=$(pwd)/../BSP/include
headers_install copie les headers dans
$INSTALL_HDR_PATH. Ces headers sont suffisants pour
compiler les programmes de lespace utilisateur. Si votre
toolchain est correctement compile, vous ne devriez pas en
avoir besoin.
Sysmic - J. Pouiller
Formation au Noyau Linux
Rfrence : Documentation/kbuild/kbuild.txt,
Documentation/make/headers_install.txt

Clean

make clean Supprime les fichier objets (qui ne sont plus utiles
une fois le noyau compil)
make mrproper Supprime tous les rsultats de la compilation
ainsi que les fichiers de configuration
make distclean Supprime les rsultats de compilation, les
configurations et fichiers originaires de lintgration de patchs ou
de ldition de fichiers (*~, *.orig, *.rej, etc...)

39 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

40 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Configuration globale

Configuration globale

General setup :
Prompt for development and/or incomplete code/drivers :
Dbloque les options de compilation pour les drivers/option
instables (staging, etc...)
Cross-compiler tool prefix : Affecte la variable CROSS_COMPILE
Local version : Ajoute un identifiant la version. Indispensable
dans les phases dintgration. La version peut tre lue dans
/proc/version. Il est aussi possible de faire
make kernelrelease dans un rpertoire de compilation du
noyau.
Automatically append version information : Ajoute lidentifiant git
la version. Indispensable dans les phases de dveloppement
Kernel compression mode : Permet de choisir le type de
compression. Chaque algorithme a ces inconvnients et ses
intrts.
SWAP : Permet de grer un espace dchange dur un disque
Sysmic - J. Pouiller

Formation au Noyau Linux

SYSVIPC et MQUEUE : Communication inter-processus dfinis


par Posix
IKCONFIG : Embarque le .config dans le noyau
EXPERT et EMBEDDED Dbloque les options permettant
principalement de rduire la taille du noyau en supprimant des
modules importants
CC_OPTIMIZE_FOR_SIZE : Compile avec -Os
KPROBES, PERF_EVENTS, PROFILING, GCOV_KERNEL : Active
les diffrentes instrumentations du noyau

41 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

42 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Les priphriques de block

Options de lhorloges
Kernel features

MODULES : Active la gestion des modules

HZ (pas sur ARM) : Dfinit lintervalle de rordonnancement de


lordonnanceur. Plus cette valeur est forte, plus loverhead
introduit par le changement de contexte est important et plus les
temps de rponses des tches sont courts

BLOCK : Il est possible de dsactiver la gestion des priphrique de


block si votre systme nutilise que de la mmoire flash.
IO Schedulers : Permet de choisir un ordonnanceur dE/S
diffrent de celui propos en standard

NO_HZ : Permet de rendre la priode de rordonnancement des


tches dynamique. Devrait permettre un lger gain de CPU
(finalement ngligeable avec lordonnanceur en o(1)). Permet
surtout de gagner en consommation lectrique.

System type :
Permet de choisir le type darchitecture et de chipset

HIGH_RES_TIMER : Gre les timers avec une horloge diffrente


de lordonnanceur (lhorloge est alors gr comme un
priphrique part). Permet dobtenir une bien meilleure
prcision sur les mesure de temps, condition que votre
matriel possde une horloge HighRes.

Il est possible de dsactiver certains cache lors des phases de


dveloppement
Vous trouverez aussi dans ce menu les options relative au jeu
dinstructions accept

Sysmic - J. Pouiller

Formation au Noyau Linux

43 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

44 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Options de lordonnanceur

Option de gestion de la mmoire

Preemption Model : Permet dactiver la premption du noyau. Le


pire temps rponse sont amliors, mais le temps moyen est
gnralement moins bon. Un noyau premptif stresse beaucoup
plus de code. Ne pas activer si vous utilisez des drivers extrieur
non garanti pour cette option.

EABI, OABI, etc... : Diffrentes format dappel des fonctions.


Spcifique ARM (mais trs important)
Memory Model : Permet de grer les futurs systmes mmoire
asymtriques entre les CPU
COMPACTION : Permet de compresser les page de mmoire
plutt que les mettre en swap. Particulirement utile dans les
systmes sans swap !

RT_PREEMPT (sur certaines architectures seulement) : Permet


de threader les IRQ et ainsi de remplacer les spinlock par des
mutex. Ajoute un protocole dhritage de priorit aux mutex. Le
kernel devient alors totalement premptif. A nutilisez que lors
dapplication temps relle. Etudiez des solutions base
dhyperviseurs.

KSM : Permet de fusionner les page mmoire identiques.


Uniquement utile avec des machines virtuelles ou des chroot.
Sinon, les noyau sait que le fichier est dj en mmoire et ne
duplique pas la page

Ne confondez pas la premption du noyau avec la premption


des tches utilisateur.

Sysmic - J. Pouiller

Formation au Noyau Linux

45 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

46 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Configuration du boot et du FPE

Configuration rseau

Boot options :
Networking :

Flattened Device Tree : Utilise OpenFirmware, le nouveau format


de description matriel appel aussi Flatten Device Tree

Possibilit dactiver les innombrables protocoles rseaux de


niveaux 1, 2 et 3

Default kernel command string : Permet de passer des


paramtres par dfaut au noyau (nous verrons cela un peu plus
loin)

Network options : Beaucoup de fonctionnalit rseau : client


dhcp, bootp, rarp, ipv6, ipsec, les protocole de routage, gestion
de QoS, support des VLAN, du multicast,

boot loader address : Permettent de dmarrer le noyau partir


dune ROM, dune MMC, etc...

Unix domain sockets : Les sockets UNIX (cf. sortie de netstat)

Kernel Execute-In-Place from ROM : Permet dexcuter un


noyau non compress partir dune ROM

TCP/IP networking : Les sockets bien connue TCP/IP


Netfilter : Le firewall de Linux. Dinnombrable options. Permet
lutilisation diptables si loption IPTABLES est active.

Floating point emulation : Si une instruction sur des nombres


virgule flottante est rencontre et ne peut pas tre excute, le noyau
peut alors muler linstruction (voir aussi -msoft-float)

Sysmic - J. Pouiller

Formation au Noyau Linux

47 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

48 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Configuration des systmes de fichiers

Configuration des systmes de fichiers

File systems :
Second extended, Ext3 journalling file, The Extended 4
filesystem : Le file system standard de Linux

Miscellaneous filesystems Contient des systmes de fichiers


spcifiques
eCrypt filesystem layer : Gestion transparent dun file system cod
Journalling Flash File System v2 : Spcialis pour les Flash avec
gestion de lcriture uniforme, des bad blocks et des erase blocks.
Compressed ROM file system : Spcialis pour ROM sans accs
en criture.
Squashed file system : Idem cramfs mais fortement compress

FUSE : Permet de dvelopper des systmes de fichiers en


espace utilisateur
Pseudo filesystems Systmes de fichiers sans supports
physiques
TMPFS : File system volatile en RAM. Trs utilis avec des

systme en flash vu que laccs la Flash est coteux en temps et


destructeur pour la flash
SYSFS et PROC_FS : Permettent au noyau dexporter un certain
nombre de donne interne vers le userland. Beaucoup doutils
systme tirent lors informations de ces systmes de fichiers. Ils
doivent tre monts dans /sys et /proc. /proc est plutt
orient processus alors que /sys est orient modules et
paramtrage du noyau.
Sysmic - J. Pouiller

Formation au Noyau Linux

Network File Systems


NFS client support : File system sur ethernet. Trs utilis dans
lembarqu durant les phases de dveloppement
Root file system on NFS : Permet de dmarrer le noyau sur une
partition NFS

49 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

50 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Configuration des Drivers

Configuration du noyau

Device Drivers Des centaines de drivers. Notons :

Mais aussi :

path to uevent helper : Le programme apell lorsquun nouveau


priphrique est dtect (cf. /proc/sys/kernel/hotplug et
/sys/kernel/uevent_helper)

Kernel Hacking : Options concernant le dbugging du noyau.


Security Options : Plusieurs framework permettant de grer des
droits plus fin sur les programmes excuts et/ou de garantir
lintgrit des donne laide de TPM.
Cryptographic API : Fonctions de cryptographies slectionnes
automatiquement par dautres modules (particulirement les
protocoles rseaux)

Maintain a devtmpfs filesystem to mount at /dev : Un tmpfs


spcifique pour les devices automatiquement mont sur /dev.
Les fichiers devices sont alors automatiquement crs sans
laide dun programme extrieur.
Memory Technology Device : Les flashs

Library routines : Idem Cryptographic API mais avec


principalement des calculs de checksum.

Staging drivers : Des drivers en cours de bta

Sysmic - J. Pouiller

Formation au Noyau Linux

51 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

52 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Boot par tftp/nfs

Notre cas
Dans notre cas, nous utilisons U-Boot (standard)
Compilation

Pour le dveloppement du noyau, il est commun dutiliser les


technologies :

host% apt-get install uboot-mkimage


host$ make O=build ARCH=arm usb-a9260_defconfig
host$ make O=build ARCH=arm CROSS_COMPILE=armlinux- -j3 uImage

tftp : Il sagit dun protocole de transfert de fichier trs simple.


Beaucoup de bootloaders limplmentent. Il permet un
dmarrage rapide dun nouveau noyau lors du dveloppement.
On pourra aussi trouver des protocole sur RS232 ou sur USB
permettant la mme fonctionnalit. Comme pour un dmarrage
normal, on indique au bootloader quelle adresse le noyau doit
tre charg et on jump cette adresse

Partage de limage par TFTP


host% cp build/arch/arm/boot/uImage /srv/tftp/
uImage-2.6.33.7
host% ln -s uImage-2.6.33.7 /srv/tftp/uImage

nfsroot : On demande au noyau de monter une partition rseau.


On dispose ainsi dun espace de stockage illimit et il est simple
et rapide de mettre jour le rootfs.

Sysmic - J. Pouiller

Formation au Noyau Linux

Au redmarrage, le bootloader passe par un registre lidentifiant


de la carte. Cet identifiant (spcifique larchitecture ARM) est
erron. A ce stade, il est plus facile de corriger ce problme dans
le noyau dans le fichier arch/arm/tools/mach-types.
53 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

54 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Passage doptions au noyau

Le rootfs

Il est possible de passer des options au dmarrage du noyau


Cest normalement le bootloader qui se charge de passer la
ligne de commande au noyau
Le bootloader utilise un protocole prdfini (lorsquil donne la
main au noyau, un des registre contient un pointeur sur la ligne
de commande)
Il est possible de surcharger la ligne de commande lors de la
compilation avec loption CMDLINE
Les diverses options acceptes sont dcrites dans
Documentation/kernel-parameters.txt
Il est possible daccder la ligne de commande aprs le
dmarrage dans /proc/cmdline
Il existe des paramtres globaux au kernel et des paramtres
spcifiques un module. Lorsque le module est compil dans en
statique, il est possible de lui passer des paramtres avec la
syntaxe <MODULE_NAME>.<PARAM>=<VALUE>
Beaucoup doptions sont modifiable posteriori par /sys
Sysmic - J. Pouiller

Formation au Noyau Linux

root= indique le disque monter sur /


Srement loption la plus utilise
Il est possible de spcifier le nom dune partition. Par exemple
root=/dev/sda1 (PC) ou root=/dev/mtd0 (partition flash)
root=/dev/nfs demande au noyau de dmarrer sur NFS
Remarque : la partition / ntant pas encore monte, ces nom
de partition ne correspondent pas des fichiers existants dans
/dev. Le kernel utilise simplement la mme syntaxe.

55 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

56 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

La configuration rseau

La configuration rseau
Il est alors possible de spcifier le nfsroot dans la
configuration du serveur DHCP :

Il est possible dinitialiser le rseau avant de montage du rootfs


Indispensable pour le dmarrage par NFS

host target {
option root-path "192.168.1.10:/srv/nfs";
next-server 192.168.1.10;
hardware ethernet 00:26:24:3a:14:5c;
fixed-address 192.168.1.72;
}

Syntaxe : ip=<client-ip>:<server-ip>:<gw-ip>:<
netmask>:<hostname>:<device>:<autoconf>
Exemple : ip=192.168.1.72:::::eth0:
Pour le dmarrage par nfs, il est aussi ncessaire de spcifier le
rpertoire partag par le serveur :
nfsroot=192.168.1.10:/srv/nfs

Lors du dmarrage NFS, attention aux modifications de la


configuration rseau postrieure au montage du rootfs

Il aussi possible de dmarrer en utilisant un DHCP (ou un autre


protocole dauto-ngociation) : ip=on

Sysmic - J. Pouiller

Formation au Noyau Linux

Rfrence :
Documentation/filesystems/nfs/nfsroot.txt

57 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

58 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Dmarrage du noyau

La console

A la fin du dmarrage du noyau, celui donne la main


lexcutable dclar avec init=. Par dfaut, il sagit de
/sbin/init

Srement la deuxime option la plus utilise

init ne se termine jamais

console= permet de demander au noyau dafficher la sortie de


printk sur un priphrique spcifique.

Les arguments non-utiliss par le noyau sont pass init


On peut estimer que notre systme dmarre partir du moment
ou nous obtenons un shell (cest en tous cas la que la plupart
des intgrateur Linux embarqu sarrteront)
Du moins complexe au plus complexe dmarrer :

Sur PC, souvent limit console=ttyS0,115200n8.


Sur un systme embarqu, il existe beaucoup de driver de ports
sries diffrents. console peut alors prendre des valeurs
exotiques. A voir au cas par cas pour chaque driver.

init=/hello-arm-static
init=/hello-arm
init=/bin/sh
init=/sbin/init

Effectuons ces tests avec le Rootfs original et un Rootfs vierge.


Sysmic - J. Pouiller

Formation au Noyau Linux

59 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

60 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun Les
BSPBSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Panic

La mmoire
Il est parfois ncessaire de donner des instructions au kernel sur
lutilisation quil peut faire des espaces mmoires

Un kernel panic est une erreur dtecte mais irrcuprable

mem=nn Force la taille de la mmoire que le noyau peut utiliser.


Sur beaucoup de plateformes, le noyau nest pas capable de
dtecter la capacit de la mmoire.

panic=X permet demande au noyau de redmarrer aprs X


secondes en cas de kernel panic

memmap=nn@ss et memmap=nn$ss Force le noyau nutiliser


que la mmoire entre ss et ss+nn

Par dfaut, le noyau ne redmarre pas en cas de kernel panic

memmap=nn@ss et memmap=nn$ss Force le noyau ne pas


utiliser la mmoire entre ss et ss+nn
Il est possible dutiliser plusieurs fois ces options
Utiles pour rapidement rservs des espace dadresse dE/S pas
encore dfini dans la configuration ou se rserver des blocs de
mmoire particuliers pour la communication avec dautres
priphriques

Sysmic - J. Pouiller

Formation au Noyau Linux

61 / 182

Les BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP

Etape de fabriquation dun BSP


Commencez par compiler une toolchain si celle-ci nest pas
fournie.
Si le bootloader est fourni, travaillez avec celui-ci. Il arrive
souvent que les bootloader initialisent certains paramtres du
CPU sans lesquels le noyau ne peut dmarrer
Si vous navez pas de bootloader, vous devrez commencez par
paramtrer une sonde JTAG
Sinon, vous pouvez dvelopper le noyau et le bootloader en
parallle. Sans bootloader, vous devrez utiliser une sonde JTAG
pour dmarrer votre cible
Configurer le noyau jusqu pouvoir dmarrer lespace utilisateur
Compiler un busybox pour lespace utilisateur
Faites fonctionner les diffrents priphriques
Intgrer votre toolchain, votre bootloader, les fichiers de
configuration de votre noyau et de votre busybox, vos outils et
drivers spcifique dans un outil tel que BuildRoot
Zipper lensemble
Compilez lensemble et zipper le rsultat
Sysmic - J. Pouiller
Formation au Noyau Linux
Intgrez vos modification
dans lupstream

63 / 182

Sysmic - J. Pouiller

Formation au Noyau Linux

62 / 182

You might also like