Professional Documents
Culture Documents
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