Académique Documents
Professionnel Documents
Culture Documents
Sysmic - J. Pouiller Formation au Noyau Linux 2 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 3 / 182
Prsentation de la cible Quest-ce que Linux ? Prsentation de la cible Quest-ce que Linux ? Prsentation de la cible Quest-ce que Linux ?
App App
Architecture trs classique dans le milieu de Linux embarqu :
Il y a trois lments important de GNU/Linux :
Microcontrolleur Atmel AT91SAM9260 App Bash GNU App App
Core ARM926EJ-S 180MHz Le noyau : Linux
64Mo de RAM GNU lib Lib Le projet GNU et plus particulirement la glibc, bash et les
256Mo de flash coreutils
64Ko dEEPROM GNU libc Les normes : SystemV, Posix, etc...
Matriel
Sysmic - J. Pouiller Formation au Noyau Linux 4 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 5 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 6 / 182
Prsentation de la cible Quest-ce que Linux ? Prsentation de la cible Quest-ce que Linux ? Prsentation de la cible Quest-ce que Linux ?
Sysmic - J. Pouiller Formation au Noyau Linux 7 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 8 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 9 / 182
Prsentation de la cible Quest-ce que Linux ? 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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
3 Les BSP
Le noyau Linux 4 Obtenir le noyau
Quelques chiffres
Tlcharger les sources
Comprendre le versionning
15 millions de lignes de code dans 30000 fichiers (+15%/an)
Utiliser Git
Environ 1200 dveloppeurs dans 600 entreprises (+35%/an)
Environ 5000 contributeurs depuis la premire version de Linux
Deuxime partie II 5 Organisation des sources
Les sous-rpertoires de la racine
Environ 650 mainteneurs (cest--dire responsables dune partie
Le rpertoire arch/
du noyau)
Compiler le noyau
26 architecures (= jeux dinstructions) Compiler 6
Configuration globale
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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP Fonctionnalits du noyau
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
Sysmic - J. Pouiller Formation au Noyau Linux 19 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 20 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 21 / 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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
Sysmic - J. Pouiller Formation au Noyau Linux 22 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
Le systme de compilation Travailler avec les configurations Travailler avec les configurations
Lorsque votre fichier .config nest parfaitement compatible
Pour obtenir de laide sur les diffrentes cibles : avec vos sources (import, mise jours des sources, dition
make help propose des configurations prtablies. Il est manuelle, ...), il recommand (ncessaire ?) de lancer
host$ make help possible dimporter une de ces configuration :
host$ make oldconfig
La variable ARCH= spcifie larchitecture cible utiliser. Elle host$ make ARCH=arm usb-a9260_defconfig
oldconfig vous indique dventuelles incompatibilit entre
impacte les options du noyau. Comparez make help avec votre configuration et vos sources et vous demande votre avis
make ARCH=arm help. Kconfig sauvegarde la configuration dans .config.
sur les nouvelles options
Si ARCH nest pas spcifie, Kconfig utilise larchitecture host. Le fichier .config sera ensuite : Pour rpondre systmatiquement avec la rponse par dfaut :
Sourc dans les systmes de Makefile
Lorsque vous avez commenc spcifier ARCH, vous devez Transform en include/generated/autoconf.h et inclut host$ yes "" | make oldconfig
toujours la spcifier. dans les headers de compilations
Obtenir la liste des nouvelles options par rapport votre
Il est toutefois possible de placer cette variable dans le Makefile Certains constructeur vous fournirons un patch ajoutant une configuration :
racine ou dans lenvironnement pour viter de loublier. cible _defconfig
host$ make listnewconfig
host$ export ARCH=arm ... dautres vous fournirons un .config
Vous pouvez normalement trouver la configuration du noyau de
votre host dans /boot/config-uname -r
Sauver votre configuration en effectuant un sanity check
Sysmic - J. Pouiller Formation au Noyau Linux 28 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 29 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 30 / 182
host$ make savedefconfig
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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
Rfrence : Documentation/kbuild/kconfig.txt
BSP Obtenir le noyau Organisation des sources Compiler le noyau
Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
host$ make config En Gtk Le systme choisi les cible approprie en fonction de votre
architecture (principalement, une image et les modules)
En ncurses host% apt-get install libglade2-dev Il est souvent prfrable (ncessaire ?) de spcifier le type
host$ make gconfig dimage voulue avec
host% apt-get install libncurses5-dev
host$ make menuconfig Dans toutes les interfaces, il est possible dobtenir de la host$ make XXImage
description sur llment slectionn (<h> ou <?>)
Avec la nouvelle version de ncurses Il est possible de rechercher dans les descriptions des lments XX fait rfrence au format de la binaire produite :
(</>) Le code commence=t=il au premier octet ?
host% apt-get install libncurses5-dev Respecte-t-il le format ELF ?
host$ make nconfig Dans la recherche et dans laide, vous trouverez des
Y a-t-il un format particulier dentte respecter ?
informations sur les dpendances entre les options
Les script scripts/config permet de changer les Dans le doute, il faut consulter la documentation de votre
configuration la main bootloader
Sysmic - J. Pouiller Formation au Noyau Linux 31 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 32 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 33 / 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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
Documentation/make/headers_install.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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
Sysmic - J. Pouiller Formation au Noyau Linux 43 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 44 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 45 / 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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
Boot options :
EABI, OABI, etc... : Diffrentes format dappel des fonctions. Flattened Device Tree : Utilise OpenFirmware, le nouveau format Networking :
Spcifique ARM (mais trs important) de description matriel appel aussi Flatten Device Tree Possibilit dactiver les innombrables protocoles rseaux de
Memory Model : Permet de grer les futurs systmes mmoire Default kernel command string : Permet de passer des niveaux 1, 2 et 3
asymtriques entre les CPU paramtres par dfaut au noyau (nous verrons cela un peu plus Network options : Beaucoup de fonctionnalit rseau : client
COMPACTION : Permet de compresser les page de mmoire loin) dhcp, bootp, rarp, ipv6, ipsec, les protocole de routage, gestion
plutt que les mettre en swap. Particulirement utile dans les boot loader address : Permettent de dmarrer le noyau partir de QoS, support des VLAN, du multicast,
systmes sans swap ! dune ROM, dune MMC, etc... Unix domain sockets : Les sockets UNIX (cf. sortie de netstat)
KSM : Permet de fusionner les page mmoire identiques. Kernel Execute-In-Place from ROM : Permet dexcuter un TCP/IP networking : Les sockets bien connue TCP/IP
Uniquement utile avec des machines virtuelles ou des chroot. noyau non compress partir dune ROM
Sinon, les noyau sait que le fichier est dj en mmoire et ne Netfilter : Le firewall de Linux. Dinnombrable options. Permet
duplique pas la page Floating point emulation : Si une instruction sur des nombres lutilisation diptables si loption IPTABLES est active.
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 46 / 182 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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
BSP 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 Configuration des Drivers
File systems :
Second extended, Ext3 journalling file, The Extended 4 Miscellaneous filesystems Contient des systmes de fichiers Device Drivers Des centaines de drivers. Notons :
filesystem : Le file system standard de Linux spcifiques
FUSE : Permet de dvelopper des systmes de fichiers en eCrypt filesystem layer : Gestion transparent dun file system cod path to uevent helper : Le programme apell lorsquun nouveau
espace utilisateur Journalling Flash File System v2 : Spcialis pour les Flash avec priphrique est dtect (cf. /proc/sys/kernel/hotplug et
gestion de lcriture uniforme, des bad blocks et des erase blocks. /sys/kernel/uevent_helper)
Pseudo filesystems Systmes de fichiers sans supports Compressed ROM file system : Spcialis pour ROM sans accs
physiques Maintain a devtmpfs filesystem to mount at /dev : Un tmpfs
en criture.
TMPFS : File system volatile en RAM. Trs utilis avec des Squashed file system : Idem cramfs mais fortement compress
spcifique pour les devices automatiquement mont sur /dev.
systme en flash vu que laccs la Flash est coteux en temps et Les fichiers devices sont alors automatiquement crs sans
Network File Systems
destructeur pour la flash laide dun programme extrieur.
SYSFS et PROC_FS : Permettent au noyau dexporter un certain NFS client support : File system sur ethernet. Trs utilis dans
lembarqu durant les phases de dveloppement Memory Technology Device : Les flashs
nombre de donne interne vers le userland. Beaucoup doutils
systme tirent lors informations de ces systmes de fichiers. Ils Root file system on NFS : Permet de dmarrer le noyau sur une Staging drivers : Des drivers en cours de bta
doivent tre monts dans /sys et /proc. /proc est plutt partition NFS
orient processus alors que /sys est orient modules et
paramtrage du noyau.
Sysmic - J. Pouiller Formation au Noyau Linux 49 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 50 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 51 / 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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
Sysmic - J. Pouiller Formation au Noyau Linux 58 / 182 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
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun
Les
BSP
BSP Obtenir le noyau Organisation des sources Compiler le noyau Options principales Les drivers Le boot tftp/nfs Options de dmarrage Fabrication dun BSP
12 Macros de base
13 Licenses des modules Les modules noyau
my_module
14 Dveloppement des modules
15 Ecriture des Makefile
A lextrieur du noyau
Un template de module :
Troisime partie III A lintrieur du noyau
// Declare special functions
16 Charger des modules
module_init(m_init);
17 Utiliser des paramtres
module_exit(m_exit);
Le Coding Style
Les modules La documentation // These uppercase macro will be added to
Rgles de documentation informative section of module (.modinfo)
MODULE_AUTHOR("Jrme Pouiller");
O trouver la documentation
MODULE_DESCRIPTION("A pedagogic Hello World");
Trouver de laide MODULE_LICENSE("Proprietary");
18 LAPI MODULE_VERSION("1.1");
19 Gestion des erreurs
20 Communiquer avec le noyau
Les appels systmes
Sysmic - J. Pouiller Formation au Noyau Linux 64 / 182
Les fichiers devices
Sysmic - J. Pouiller Formation au Noyau Linux 65 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 66 / 182
Read et write
Macros de base Licenses des modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Les ioctls
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs Communiq
Sysmic - J. Pouiller Formation au Noyau Linux 67 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 68 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 69 / 182
Macros de base Licenses des modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs Communiq
Sysmic - J. Pouiller Formation au Noyau Linux 70 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 71 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 72 / 182
Macros de base Licenses des modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs Communiq
Macros de base Licenses des modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs Communiq
Sysmic - J. Pouiller Formation au Noyau Linux 76 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 77 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 78 / 182
Macros de base Licenses des modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs Communiq
Sysmic - J. Pouiller Formation au Noyau Linux 82 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 83 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 84 / 182
Macros de base Licenses des modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs Communiq
Rfrence : Documentation/CodingStyle
Macros de base Licenses des modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs Communiq
Sysmic - J. Pouiller Formation au Noyau Linux 91 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 92 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 93 / 182
Macros de base Licenses des modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs Communiq
Macros de base Licenses des modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs Communiq
Sysmic - J. Pouiller Formation au Noyau Linux 97 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 98 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 99 / 182
Macros de base Licenses des modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs
Macros de
Communiquer
base Licenses
avec des
le noyau
modules Dveloppement des modules Ecriture des Makefile Charger des modules Utiliser des paramtres LAPI Gestion des erreurs Communiq
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
21 Les frameworks
22 Les fonctions inspirs de la libc Les frameworks
23 Accder au E/S
24 Allouer de la memoire
Le noyau est divis en frameworks.
25 La MMU
Pour bien utiliser un framework, il est ncessaire de comprendre
Quatrime partie IV 26 Les interruptions
Allouer des interruptions
le fonctionnement du noyau et de la technologie dcrite par le
framework.
Les Softirq Un framework est gnralement dcrit dans son fichier .h
27 Les Wait Queues (exemple : linux/usb.h).
LAPI 28 Les DMA Un framework contient gnralement une paire de fonctions
29 Les structures de donnes register/unregister permettant au driver de se dclarer
Les listes auprs du framework (Exemple : usb_register_driver)
30 Mecanismes de synchronisation La fonction register prend souvent en paramtre une
Les fifos structure contenant des pointeurs sur des callbacks appeles
lors des divers vnements pouvant se produire (exemple : la
Les mutex
structure usb_driver)
Dsactivation des interruptions
Parmi les callbacks, il y a souvent une fonction probe
Spin Lock
Les RCU
Sysmic - J. Pouiller Formation au Noyau Linux 103 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 104 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 105 / 182
Les barrires mmoires
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les extensions de gcc sont utilises pour initialiser ces Convertions de nombres et de boolens : strtobool,
structures avec les attributs nomms Taille de chainesstrlen, strnlen kstrto{int,uint,l,ul}
Un framework fourni aussi dautres fonctions permettant de kstrto{s64,u64,s32,u32,s16,u16,s8,u8}
Comparaisons : strcmp, strncmp, strcasecmp,
lancer des actions (exemple : usb_submit_urb) kstrto{s64,u64,s32,u32,s16,u16,s8,u8}_from_user
strncasecmp, strnicmp, memcmp, strstarts
(existe aussi prfix avec simple_, mais destin mourrir)
Un framework peut raffiner un framwork plus gnrique (en le Recherches : strchr, strnchr, memchr, memscan, strrchr,
proxifiant) (exemple : les framework usb_serial et le framework Duplication avec allocation : kmemdup, kstrdup, kstrndup,
memchr_inv, strspn, strcpsn, strstr, strnstr, strpbrk
usb) memdup_user, strndup_user (nous verrons largument gfp
Copies : strcpy, strncpy, memcpy, strcat, strncat, un peu plus loin)
Une driver peu appartenir plusieurs frameworks. Par exemple, strsep
un driver de carte rseau peut utiliser le framework pci, le Formatage : sprintf, snprintf, sscanf
strlcpy et strlcat (De meilleures implmentations de
framework, network_device, sysfs, debugfs, etc... Utilitaire sur les nombres : max, max3, min, min3, clamp, swap
strncat et strncpy). Toujours utiliser ces fonctions.
Il existe un framework pour les modules (linux/modules.h) Notez que beaucoup de ces fonctions possdent des
skip_spaces, strim, strstrip : Supprime les blanc en
accessible avec THIS_MODULE implmentations gnriques mais peuvent tre surcharges par
dbut et fin de chane
Un exemple de framework simple enrobant les char devices : architecture
include/linux/cdev.h Rfrence : linux/string.h linux/kernel.h
Sysmic - J. Pouiller Formation au Noyau Linux 106 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 107 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 108 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Rfrence : asm/io.h
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Sysmic - J. Pouiller Formation au Noyau Linux 112 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 113 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 114 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Il est possible dallouer de la mmoire non-contigu avec Copier des donnes depuis/vers lespace dadressage du
vmalloc : processus courant :
void *vmalloc(unsigned long size); Il est possible de faire des conversions en utilisant : int copy_from_user(kern_buf, user_buf, size);
void *vzalloc(unsigned long size); phys_to_virt et virt_to_phys (qui appellent __pa et __va int copy_to_user(user_buf, kern_buf, size);
void vfree(void *addr); si possible)
Retourne le nombre doctets non copis
page_to_virt, virt_to_page, phys_to_page et
Alloue dans la mmoire haute Lire/affecter une variable simple (jusqu 8 octets) de lespace
page_to_phys (qui appellent page_address)
... ainsi la mmoire alloue peut tre non contigu dans la dadressage du processus courant :
pfn_to_page et page_to_pfn
mmoire physique
get_user(var, user_ptr);
Il est ainsi possible dallouer dimportante quantit de mmoire. put_user(var, user_ptr);
Rfrence : linux/vmalloc.h, mm/vmalloc.c,
/proc/vmallocinfo La taille de var est automatiquement calcule
Sysmic - J. Pouiller Formation au Noyau Linux 121 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 122 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 123 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Sysmic - J. Pouiller Formation au Noyau Linux 133 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 134 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 135 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Sysmic - J. Pouiller Formation au Noyau Linux 148 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 149 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 150 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Idem, mais retourne immdiatement si le mutex est dj lock Dans la mme branche, le noyau propose aussi :
mutex_trylock(struct mutex *lock); Des smaphores (rfrence : linux/semaphore.h) Lors de certains accs, les mcanismes de protections de
Des Read-Write Lock (rfrence : linux/rw_semaphore.h) ressources inter-tches ne sont plus suffisants.
Retourne 1 si le mutex est lock Cela peut concerner des accs concurrent avec des
Mutex avec protocole dhritage de priorits et dtection de dead
mutex_is_locked(struct mutex *lock); lock (aka rt_mutex) (rfrence : interruptions.
Documentation/rt-mutex-design.txt, Il est alors ncessaire de dsactiver temporairement les
Unlock le mutex linux/rtmutex.h) interruptions afin de garantir que lon ne sera pas interrompu.
Les rt_mutex peuvent tre utilis par la libpthread Ces fonctions sont utiliser avec parcimonie
mutex_unlock(struct mutex *lock);
rfrence : Documentation/pi-futex.txt
Documentation/rt-mutex.txt
Rfrence : linux/mutex.h
Sysmic - J. Pouiller Formation au Noyau Linux 151 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 152 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 153 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Dsactivation des interruption et de la premption Dsactivation des interruption et de la premption Spin Lock
Dans certains cas, une tche peut avoir besoin dun accs exclusif
Sauve/restaure ltat des interruptions dans/de flags et dsactive une ressource potentiellement utilise dans une interruption. Dans ce
les interruptions : cas, il est ncessaire de dsactiver les interruptions lors de laccs
local_irq_save(unsigned long flags); Dsactive/Ractive les SoftIrq (bottom halves) : la ressource. Nanmoins, linterruption peut se produire sur un autre
local_irq_restore(unsigned long flags); local_bh_disable(); CPU. Il est alors ncessaire de se protger contre cette ventualit
local_bh_enable(); Il sagit dune attente active sur une section critique
Dsactive/Active les interruptions ( priori, toujours utiliser les
versions _save et _restore) Ne traite pas les problmes de concurrence mais de paralllisme
Dsactive/Ractive la premption uniquement. Par consquent, uniquement en environnement
local_irq_disable(); preempt_disable(); SMP
local_irq_enable(); preempt_enable(); Principalement utilis lors de en complment de la dsactivation
des interruption
Retourne vrai si les interruption du CPU local sont dsactives :
La premption est aussi dsactiv durant un spin lock
local_irq_disabled(); Le noyau propose aussi des read/write spin locks : rwlock_t
Rfrence linux/rwlock.h
Sysmic - J. Pouiller Formation au Noyau Linux 154 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 155 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 156 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
Lock et dsactive/ractive les interruptions sur le processeur Type dalgorithme non bloquant :
API :
courant. Les flags contiennent ltat du masque dinterruption :
La lecture nest pas bloquante
Dclarer et initialiser un spin lock :
spin_lock_irqsave(spinlock_t *lock, unsigned On note le nombre de lecteurs
DEFINE_SPINLOCK(lock); long flags);
Les modification seffectuent sur une copie de lobjet
spin_lock_init(spinlock_t *lock); spin_unlock_irqrestore(spinlock_t *lock,
unsigned long flags); Les lecture suivante se font sur la nouvelle version de lobjet
Idem que les fonctions mutex_* : Lorsque le dernier lecteur a termin, lobjet dorigine est dtruit.
Spinlock et dsactive/ractive les SoftIrq : Seul subsiste la nouvelle version.
spin_lock(spinlock_t *lock);
spin_lock_bh(spinlock_t *lock); Les RCU sont un design darchitecture. Les RCU ne possdent
spin_trylock(spinlock_t *lock);
spin_unlock_bh(spinlock_t *lock); que peu dAPI pouvant tre rutilis.
spin_unlock(spinlock_t *lock);
Rfrence Documentation/RCU/whatisRCU.txt
Documentation/RCU/*
Rfrence : linux/spinlock.h
Sysmic - J. Pouiller Formation au Noyau Linux 157 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 158 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 159 / 182
Les frameworks Les fonctions inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes
Les frameworks
Mecanismes
Les fonctions
de synchronisation
inspirs de la libc Accder au E/S Allouer de la memoire La MMU Les interruptions Les Wait Queues Les DMA Les structures de donnes Mecanis
printk
31 Afficher des informations
Dynamic printk printk affiche les information sur la console et les copie dans
un buffer. Il est possible dafficher ce buffer avec dmesg
Il est possible dutiliser directemenr printk en specifiant le
Cinquime partie V 32 kgdb
degr dimportance de linformation :
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
Sysmic - J. Pouiller Formation au Noyau Linux 169 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 170 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 171 / 182
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
Sysmic - J. Pouiller Formation au Noyau Linux 175 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 176 / 182
Rfrence : Documentation/trace/kprobetrace.txt
Sysmic - J. Pouiller Formation au Noyau Linux 177 / 182
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
Rfrence : Documentation/trace/events.txt
Sysmic - J. Pouiller Formation au Noyau Linux 178 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 179 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 180 / 182
Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents Afficher des informations kgdb Tracker la mmoire Outils base de Kprobe et apparents
perf SystemTap
Sysmic - J. Pouiller Formation au Noyau Linux 181 / 182 Sysmic - J. Pouiller Formation au Noyau Linux 182 / 182