Driver Linux PDF
Transcript of Driver Linux PDF
-
7/22/2019 Driver Linux PDF
1/191
Projet Open STB / Orange Labs - R&D Prsentation du dveloppement noyau sous GNULinux
interne Groupe France Tlcom
Thierry GAYET (ALTEN) 10/2007 v1.0 OSP 006 Creative [email protected]
Dveloppement noyau, drivers sous GNU Linux
-
7/22/2019 Driver Linux PDF
2/191
- 2 interne Groupe France Tlcom
PLAN
Introduction. Construction d'un noyau. Architecture du noyau. Mthodologie de
dveloppement Dveloppement dans le noyau Interruptions Direct Memory Access (DMA) Hooking de primitive. Hotplug et udev /proc et /sys Conseils et ressources.
-
7/22/2019 Driver Linux PDF
3/191
- 3 interne Groupe France Tlcom
1 - INTRODUCTION
Histoire de GNU Linux Organisation du dveloppement du
noyau Linux
L'quipe des dveloppeurs au complet
Portabilit du noyau Nouveauts du noyau 2.6
Etat des versions du noyau
Versions et numrotation du noyau
Caractristiques principales du noyau
Problmatique de la licence GPL
-
7/22/2019 Driver Linux PDF
4/191
- 4 interne Groupe France Tlcom
Histoire de Linux
1991: Le noyau Linux est crit partir de zro (from scratch) en 6 mois par Linus Torvaldsdans sa chambre de l'universit d'Helsinki, afin de contourner les limitations deson PC 80386.
1991: Linus distribue son noyau sur Internet. Des programmeurs du monde entierle rejoignent et contribuent au code et aux tests.
1992: Linux est distribu sous la licence GNU GPL
1994: Sortie de Linux 1.0
1994: La socit Red Hat est fonde par Bob Young et Marc Ewing,crant ainsi un nouveau modle conomique bas sur une technologie OSS.
1995-: GNU/Linux et les logiciels libres se rpandent dans les serveurs Internet.
2001: IBM investit 1 milliard de dollars dans Linux
2002-: L'adoption massive de GNU/Linux dmarre dans de nombreux secteurs de l'industrie.
-
7/22/2019 Driver Linux PDF
5/191- 5 interne Groupe France Tlcom
Path: gmdzi!unido!fauern!ira.uka.de!sol.ctr.columbia.edu!zaphod.mps.ohio-state.edu!wupost!uunet!mcsun!news.funet.fi!hydra!klaava!torvalds From:[email protected] (Linus Benedict Torvalds) Newsgroups: comp.os.minixSubject: What would you like to see most in minix? Summary: small poll for my newoperating system Keywords: 386, preferences Message-ID: Date: 25 Aug 91 20:57:08 GMTOrganization: University of Helsinki Lines: 20
Hello everybody out there using minix
I'm doing a (free) operating system (just a hobby, won't be big and professionallike gnu) for 386(486) AT clones. This has been brewing since april, and is startingto get ready. I'd like any feedback on things people like/dislike in minix, as my OSresembles it somewhat (same physical layout of the file-system (due to practicalreasons) among other things).
I've currently ported bash(1.08) and gcc(1.40), and things seem to work. This impliesthat I'll get something practical within a few months, and I'd like to know whatfeatures most people would want. Any suggestions are welcome, but I won't promise
I'll implement them :-)
Linus ([email protected])
PS. Yes - it's free of any minix code, and it has a multi-threaded fs. It is NOTprotable (uses 386 task switching etc), and it probably never will support anythingother than AT-harddisks, as that's all I have :-(.
Premier post effectu par Linux Torvald sur le forumUsenet (newsgroup) :
Linux : premiercontact
http://groups.google.com/group/comp.os.minix/msg/b813d52cbc5a044b?dmode=sourcehttp://groups.google.com/group/comp.os.minix/msg/b813d52cbc5a044b?dmode=source -
7/22/2019 Driver Linux PDF
6/191- 6 interne Groupe France Tlcom
Organisation du dveloppement du noyauLinux
Linus TORVALDle dcideur et responsable du projet ; propritaire du nom"Linux".
Andrew MORTONadjoint au projet, le numro 2
Alan COXresponsable de la partie rseau.
Russell KING
responsable de l'architecture ARM.
Andi KLEENresponsable de l'architecture x86-64.
etc
David Miller
-
7/22/2019 Driver Linux PDF
7/191- 7 interne Groupe France Tlcom
L'quipe des dveloppeur au complet
" Un travail de longue dure par une quipe de Geeks / Nerds / professionnels passionns. "
-
7/22/2019 Driver Linux PDF
8/191- 8 interne Groupe France Tlcom
Les dveloppeurs du noyau GNU Linux officiels
i i i d j i
-
7/22/2019 Driver Linux PDF
9/191- 9 interne Groupe France Tlcom
Gestion et organisation du projet Linux
http://opensource.mit.edu/papers/dafermoslinux.pdfhttp://catb.org/~esr/writings/cathedral-bazaar/
Organisation de la gestion duProjet GNU Linux partir deLinus Torvald.
C l d d l t
-
7/22/2019 Driver Linux PDF
10/191- 10 interne Groupe France Tlcom
Cycle de dveloppement
Acteurs professionnels du noyau Linux
-
7/22/2019 Driver Linux PDF
11/191- 11 interne Groupe France Tlcom
Acteurs professionnels du noyau Linux
http://www.kernel.org/pub/linux/kernel/people/gregkh/kernel_history/developer_graph-2.6.18.pdf
Croissance exponentielle du noyau GNU Linux
-
7/22/2019 Driver Linux PDF
12/191- 12 interne Groupe France Tlcom
Croissance exponentielle du noyau GNU Linux
Linux est un projet en continuelle volution
-
7/22/2019 Driver Linux PDF
13/191- 13 interne Groupe France Tlcom
Le processus de dveloppement
Le code remonte de la base Linus Torvalds :
Les dveloppeurs de base proposent leurs modifications : Elles sont dbatues sur la LKML, Des aller-retours avec les responsables de sous systmes permettent de les rafiner, Linus Torvalds intervient parfois ds ce stade ;
QLes modifications solides et trs demandes sont intgres l'arbre d'Andr Morton pour plus de tests (aprs discussions) : Plus de visibilit, tests et commentaires, dont ceux de Torvalds,
Le code est intgr s'il est prouv solide, lgant et utile (Linux Torvalds dfinit son rle comme le pouvoir de dire non
) ;
Un processus souvent plus chaotique que cette descriptionidalise
-
7/22/2019 Driver Linux PDF
14/191- 14 interne Groupe France Tlcom
Le processus de dveloppement
Le dveloppement du noyau mainline :
Une fentre d'ajouts de fonctionnalits (mergewindow) :
Dure d'environ 2 semaines, Clture officielle par la sortie d'une pr-version
-rc1, Parfois, des oublis contaminent la pr-version
suivante ;
Une priode de stabilisation : Seulement des corrections, Un -rc par semaine environ jusqu' la stabilit
apparente, Un objectif 2 mois (en pratique, jusqu' 3) ; Sortie de la version officielle : Cette version est rarement parfaite, Maintien d'une liste de rgressions (par Michal
Piotrowski, surhttp://kernelnewbies.org/known_regressions).
-
7/22/2019 Driver Linux PDF
15/191-
15 interne Groupe France Tlcom
Quelques branches de dveloppements
Les architectures alternatives :
ARM : http://www.arm.linux.org.uk/
MIPS : http://www.linux-mips.org/ SH4 : http://sourceforge.net/projects/linuxsh Power PC : http://penguinppc.org/ uClinux : http://www.uclinux.org/
Quelques branches de dveloppement : USAGI (IPv6) : http://www.linux-ipv6.org/ les ordonnanceurs exprimentaux :
SD :http://members.optusnet.com.au/ckolivas/kernel/
CFS : http://people.redhat.com/mingo/cfs-scheduler/
RT-preempt :http://people.redhat.com/~mingo/realtime-preempt/
Portabilit
-
7/22/2019 Driver Linux PDF
16/191-
16 interne Groupe France Tlcom
Portabilit
Il est dvelopp principalement en langage C (pas de langage objet telque le C++) avec une lgre couche en assembleur.
Pour les portages sur une nouvelle architecture, il convient donc d'adaptercette dernire.
En rsum, ce qui est propre un linux donn est localis dans lerpertoire arch/ des sources du noyau.
Minimum: processeurs 32 bits, avec ou sans MMU (Memory ManagementUnit)
Architectures 32 bits:alpha, arm, cris, h8300, i386, m68k, m68knommu, mips, parisc, ppc,s390, sh, sparc, um, v850
Architectures 64 bits:ia64, mips64, ppc64, sh64, sparc64, x86_64
Voir arch/README ou Documentation/arch/README pour plus de dtails
-
7/22/2019 Driver Linux PDF
17/191-
17 interne Groupe France Tlcom
Nouveauts du noyau 2.6
Un nouvel ordonnanceur de tches, nomm O(1) a fait son apparition. Celui-citient beaucoup mieux la charge quand de nombreuses tches concurrentess'excutent, et privilgie une rpartition quitable du temps de calcul entre
celles-ci. Le noyau 2.6 est capable de grer plus de 4 Go de mmoire physique
sur des machines x86 32 bits. Ce noyau apporte NPTL, une bibliothque optimise pour la gestion des
threads POSIX et Futexes des smaphores optimises pour les processus. L'interactivit du nouveau noyau a t largement amliore. Ainsi, des
modifications visant diminuer le temps d'excution des appels systmes(patchs low-latency et preempt) ont t intgrs.
Simplification de devfs en udev. La granularit de l'horloge (tick) est passe de 10 ms 1 ms. L'architecture ALSA, qui fournit un systme avanc de gestion des cartes
sons, a t intgre au noyau, en lieu et place d'OSS. Concernant les systmes de fichiers, de nombreuses optimisations sont
disponibles pour ext2/ext3/ext4 : EA, ACL, rpertoires indxs et allocateurOrlov.
Ct priphriques, plus besoin d'muler un graveur IDE en SCSI pourgraver. Notez galement le support amlior de l'USB 2 et de l'ACPI.
Une dernire amlioration trs importante est l'incorporation d'unordonnanceur intelligent des accs aux disques durs. Celui-ci limite trslargement les dplacements de la tte de lecture du disque, etapporte des dbits levs en cas d'accs concurrents.
Etat des versions des noyau GNU Linux
-
7/22/2019 Driver Linux PDF
18/191
- 18 interne Groupe France Tlcom
Etat des versions des noyau GNU Linux
Linux 2.4
Mr et exhaustif
Mais les dveloppements sont arrts; peu de
dveloppeurs voudront apporter leur aide.
Sera dfinitivement obsolte
lorsqu'un nouveau produit sera lanc.
Toujours bien si les sources, outils et support
viennent de vendeurs Linux commerciaux.
Linux 2.6
Support par la communaut de dveloppeursde Linux
Dsormais mature et exhaustif. La plupartdes pilotes ont t mis niveau.
Toutes nouvelles fonctionnalits etperformances accrues.
Linux 2.2
Branche plus maintenue au mme titre
que les versions 1.x!!
http://www.linux-foundation.org/publications/linuxkerneldevelopment.php Arbre des versions
-
7/22/2019 Driver Linux PDF
19/191
- 19 interne Groupe France Tlcom
Evolutions des versions Linux 1.0 (1994)
x86 seulement,
Monolithique ; Linux 1.2 (1995)
Ajout d'Alpha et Sparc Linux 2.0 (mi-1996)
MIPS, Power PC, m68k
Modulaire Multi-processeur, Linux 2.2 (dbut 1999)
Ultra Sparc et ARM Linux 2.4 (dbut 2001)
IA64 (Itanium), MIPS64, IBM S390 et SuperH support grand systmes USB, PnP, hotplug, firewall stateful.
-
7/22/2019 Driver Linux PDF
20/191
- 20 interne Groupe France Tlcom
Numrotation des versions du noyau Linux
Les versions sont numrotes : X . Y . Z
Z : identifie de manire unique laversion.
Y : type de la version : Nombre pair : version stable Nombre impair : version instable
(dveloppement)
X.Y: numro de version principale
Exemples :2.0.40 : version 2.0 stable2.3.74 : version 2.3 de dveloppement
1.0.XX : version stable1.1.XX : version de dev.1.2.XX : version stable1.3.XX : version de devEtc
Branchestable
Branchede dev
1.2.XX
1.3.XX
1.4.XX
-
7/22/2019 Driver Linux PDF
21/191
- 21 interne Groupe France Tlcom
Caractristiques principales de Linux
Portabilit et support matriel : voir liste des processeurssupports ;
Scalabilit : tourne sur des super ordinateurs aussi bienque sur des petits appareils ;
Conformit aux standards et interoprabilit ;
Support rseau avec une pile trs complte ; Scurit : grsecurity, selinux, revues de code
(couvertures) ;
Stabilit et fiabilit ;
Modularit : possibilit de chargement de modules endynamique.
A propos des logiciels libres
-
7/22/2019 Driver Linux PDF
22/191
- 22 interne Groupe France Tlcom
A propos des logiciels libres
Le noyau GNU Linux est un Logiciel Libre Free Software.
Les Logiciels Libres donnent l'utilisateur 4 liberts :
La libert d'utiliser le programme, comme bon lui semble ; La libert d'tudier comment le programme fonctionne, et
de l'adapter ses besoins ; La libert de redistribuer des copies pour aider les autres ; La libert d'amliorer le programme, et de distribuer les
amliorations au public.
http://www.gnu.org/philosophy/free-sw.html"Free software is a matter of liberty, not price. To understand the concept, you shouldthink of free as in free speech, not as in free beer."
http://www.gnu.org/philosophy/free-sw.html
La GNU General Public License (GPL)
http://www.gnu.org/philosophy/free-sw.htmlhttp://www.gnu.org/philosophy/free-sw.html -
7/22/2019 Driver Linux PDF
23/191
- 23 interne Groupe France Tlcom
La GNU General Public License (GPL)
Les licences Copyleftse reposent sur le droit d'auteur pour exiger quetoute version modifie reste un logiciel libre.
La GNU GPL requiert que les modifications et les travaux drivs soientaussi placs sous GPL:
Ne s'applique qu'aux logiciels distribus (pas en test oudveloppement)
Tout programme utilisant du code GPL (li statiquement oudynamiquement) est considr comme une extension de ce codeet donc plac sous GPL
Pour plus de dtails :
Copyleft: http://www.gnu.org/copyleft/copyleft.html FAQ GPL: http://www.gnu.org/licenses/gpl-faq.html
Pour plus d'information pratique sur le sujet dans l'Union Europenne,contacter la Fondation pour une Infrastructure de l'Information Libre :http://ffii.org/index.en.html
Contraintes de licence sur le noyau Linux
http://www.gnu.org/copyleft/copyleft.htmlhttp://www.gnu.org/licenses/gpl-faq.htmlhttp://ffii.org/index.en.htmlhttp://ffii.org/index.en.htmlhttp://ffii.org/index.en.htmlhttp://www.gnu.org/licenses/gpl-faq.htmlhttp://www.gnu.org/copyleft/copyleft.html -
7/22/2019 Driver Linux PDF
24/191
- 24 interne Groupe France Tlcom
Contraintes de licence sur le noyau Linux
Exemple de contraintes au moment de distribuer :
Aucune contrainte avant toute distribution. Vous pouvez partager vosmodifications au dbut dans votre propre intrt, mais n'y tes pas obligs !
Pour tout priphrique embarquant Linux et des Logiciels Libres, vous devezdistribuer vos sources l'utilisateur final. Vous n'avez aucune obligation deles distribuer qui que se soit d'autre !
Les modules propritaires sont tolrs (mais non recommands) tant qu'ilsne sont pas considrs comme drivs de code GPL.
Le portage d'un code fonctionnant dj sous un autre systmed'exploitation peut tre exempt de contamination avec la GPL.
Les pilotes propritaires ne peuvent pas tre lis statiquement au noyau.
Un pilote crit de zro est considr comme une souche propre noncontamine.
Aucun soucis pour les pilotes disponibles sous une licence compatible avec
la GPL (dtails dans la partie sur l'criture de modules) S'appliquent aussi lorsque vous dveloppez dans des pays libres de brevets.
Il se peut que vous ne puissiez pas exporter vos produits.
Pilotes noyau avec brevets: vrifiez toujours la description du pilote dans laconfiguration du noyau Les problmes avec des brevets connus sonttoujours documents.
Prfrer toujours les alternatives sans brevets (Linux RTAI au lieu de
-
7/22/2019 Driver Linux PDF
25/191
Projet Open STB / Orange Labs - R&D Prsentation du dveloppement noyau sous GNULinux
interne Groupe France Tlcom
2 - CONSTRUCTION D'UN NOYAU
Paquets ncessaires pour la gnration
Rcupration des sources du noyau
Vrification de l'intgrit des sources
Application des patchs
Exemple d'application d'un patch Cration d'un patch noyau
Dfinition de la configuration (mode texte +graphique)
Compilation et installation Etude de la phase de boot Quelques chargeurs de dmarrage Cration d'une image initrd
Phase 0 : Paquets ncessaires pour la
-
7/22/2019 Driver Linux PDF
26/191
- 26 interne Groupe France Tlcom
Phase 0 : Paquets ncessaires pour lacompilationPour installer le noyau 2.6.x, assurez-vous d'avoir les paquets suivants (version
minimum) :
la librairie ncurses-5, certaines distributions l'appellent libncurses5 etlibncurses5-dev (ou libncurses5-devel) l'utilitaire bzip2 l'utilitaire gzip Gnu gcc 2.95.3 (commande : gcc --version) Gnu make 3.78 (commande : make --version) binutils 2.12 (commande : ld -v)
util-linux 2.10 (commande : fdformat --version) module-init-tools 0.9.10 (commande : depmod -V) procps 3.1.13 (commande : ps --version)
Phases pour la gnration d'un noyau :
1. Rcupration du code source du noyau et de ses patch2. Vrification de l'intgrit des packages reu3. Application des patch sur le code source4. Gnration d'une configuration5. Compilation6. Installation
PHASE 1 : rcupration d'une copie des sourcesffi i l
-
7/22/2019 Driver Linux PDF
27/191
- 27 interne Groupe France Tlcom
officiels Tlcharger les sources depuis le site http://kernel.org/ (maintenu par la socit Transmeta)
Il peut tre aussi ncessaire de rcuprez une mise jour (ensemble de correctifs) pour laversion x.y. :
A noter que ce serveur est accessible par divers protocoles :
FTP ftp://ftp.kernel.org/pubHTTP http://ftp.kernel.org/pubNFS ftp.kernel.org:/pub
SMB/CIFS \\ftp.kernel.org\pub
wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-2.6.7.bz2
et
wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-2.6.7.bz2.sign
wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.7.tar.bz2
et
wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.7.tar.bz2.sign
Les sources peuvent aussi tre rcuprs depuis les serveurs
de paquets officiels :
Mandriva : urpmi kernel-headers kernel-sourceFedora : yum install kernel-sourceDebian : apt-get install kernel-headers-$(uname -r) kernel-source-$(uname -r)Ubuntu : apt-get install linux-headers-N_de_noyau linux-source-$(uname -r)Slackware : installpkg /o_est/kernel-source-2.6.x.tgz /o_est/kernel-headers-2.6.x.tgzGentoo : emerge gentoo-sources
Phase 2 : vrification de l'intgrit des sources
http://kernel.org/ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-2.6.7.bz2http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.7.tar.bz2http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.7.tar.bz2.signhttp://kernel.org/pub/linux/kernel/v2.6/linux-2.6.7.tar.bz2.signhttp://kernel.org/pub/linux/kernel/v2.6/linux-2.6.7.tar.bz2ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-2.6.7.bz2http://kernel.org/ -
7/22/2019 Driver Linux PDF
28/191
- 28 interne Groupe France Tlcom
Phase 2 : vrification de l intgrit des sources
Vrifiez l'intgrit des sources:
Example :
Cette tape rarement effectue est pourtant importante pour tresr de l'intgrit du code source rcupr. Il en va de mme pourtout autre package open-source.
% gpg --verify linux-2.3.9.tar.gz.sign linux-2.3.9.tar.gz
gpg: Signature made Mon Oct 9 23:48:38 2000 PDT using DSA key ID 517D0F0E
gpg: Good signature from "Linux Kernel Archives Verification Key "
gpg --verify linux-2.6.7.tar.bz2.sign linux-2.6.7.tar.bz2
Dtails sur GnuPG: http://www.gnupg.org/gph/en/manual.html Dtails sur la signature des sources du noyau: http://www.kernel.org/signature.html
Phase 3 : application des patchs (si ncessaire)
http://www.gnupg.org/gph/en/manual.htmlhttp://www.kernel.org/signature.htmlhttp://www.kernel.org/signature.htmlhttp://www.kernel.org/signature.htmlhttp://www.gnupg.org/gph/en/manual.htmlhttp://www.gnupg.org/gph/en/manual.html -
7/22/2019 Driver Linux PDF
29/191
- 29 interne Groupe France Tlcom
Phase 3 : application des patchs (si ncessaire)
Commande patch: utilise la sortie (stdout) de la commande diff pour appliquer unensemble de changements une arborescence de fichiers sources.
Utilisation classique de patch :
patch -pn < fichier_diff
n: nombre de niveaux de rpertoires sauter (ex. page suivante) Patches Linux:
Toujours appliquer sur la version x.y. Toujours prvu pour n=1: patch -p1 < linux_patch A noter qu'il est possible d'inverser un patch de la faon suivante :patch -R -p1 < ../patch-x.y.z
La commande diff effectuant un diffrentiel entre un ou plusieurs fichiers (rcursif), lespatchs doivent tre regnrs pour chaque version de kernel du fait de l'volutiondu code source du noyau Linux.
Exemple d'application d'un patch
-
7/22/2019 Driver Linux PDF
30/191
- 30 interne Groupe France Tlcom
Exemple d application d un patch Dump d'un Patch sur un fichier donn :
--- linux-2.6.8.1/include/asm-arm/hardware.h 2004-08-14 12:54:48.000000000 +0200+++ linux-2.6.8.1_modified/include/asm-arm/hardware.h 2004-08-17 12:42:06.119650556 +0200@@ -15,13 +15,4 @@#include -#ifndef __ASSEMBLY__
--struct platform_device;--extern int platform_add_devices(struct platform_device **, int);-extern int platform_add_device(struct platform_device *);--#endif-#endif
Exemple d'utilisation :
$ cd linux-2.6.8.1$ patch -p1 < hardware.diff
Applique dans ce cas les changements au header include/asm-arm/hardware.h. Un patch peut cependant tre rcursifet toucher donc un ensemble de fichiers.
-pnombre : enleve le plus petit prfixe contenant nombre slashs de la tte de chaque nom de fichier trouv dans le fichierpatch. Une squence d'un ou de plusieurs slashs adjacents compte pour un slash unique. Cela contrle la faon dont lesnoms trouvs dans le fichier patch sont traits, au cas o vous conserveriez vos fichiers dans un rpertoire diffrent de celui
qui a envoy le patch. Par exemple, en supposant que le nom du fichier dans le fichier patch tait u/howard/src/blurfl/blurfl.c
Spcifier -p0 donne le nom de fichier entier non modifi, -p1 donne : u/howard/src/blurfl/blurfl.c Sans le slash de tte, -p4 donne : blurfl/blurfl.c
Ne pas spcifier de -p du tout vous donne blurfl.c. Ce que vous obtenez finalement est recherch soit dans le rpertoire courant,soit dans le rpertoire spcifi par l'option -d.
Cration d'un patch noyau
-
7/22/2019 Driver Linux PDF
31/191
- 31 interne Groupe France Tlcom
Cration d un patch noyau
1. Tlchargez la dernire version des sources du noyau sur lequel vous travaillez.
2. Faites une copie de ces sources :
rsync -a linux-2.6.9-rc2/ linux-2.6.9-rc2-patch/
3. Appliquez vos modifications aux sources copis et testez les :
4. Crez un fichier correctif (patch) :
diff -Nru linux-2.6.9-rc2/ linux-2.6.9-rc2-patch/ > patchfile
Patchfile doit suivre une charte de nommage rappelant la version du noyau prise commerfrence, le(s) bug(s) corrig(s).
5. Comparez toujours la structure complte des sources (utilisable par patch -p1)Nom du fichier correctif: doit rappeler le problme rsolu
Etape 4 : dfinition la configuration du
-
7/22/2019 Driver Linux PDF
32/191
- 32 interne Groupe France Tlcom
noyau diter le Makefile pour dfinir la version et l'architecture de la cible (si ncessaire) :
Configuration : dfinir quelles fonctionnalits mettre dans le noyau. Plusieurs mthodes peuventtre utilises :
make config (mode texte)make menuconfig (interface ncurses)make oldconfig (chargement d'une ancienne configuration)make xconfig (interface X utilisant le librairie graphique Qt/KDE)make gconfig (interface X utilisant la librairie graphique de GNOME)
Il est possible d'diter la configuration la main
Pour identifier l'image de votre noyau avec d'autres, compiles partir des mme sources,utilisez la variable EXTRAVERSION:
VERSION = 2PATCHLEVEL = 6SUBLEVEL = 7EXTRAVERSION = -openstb (uname -r retournera: 2.6.7-openstb )
Les symboles de configuration du noyau (syntaxe Makefile) sont stocks dans le fichier .config la racine des sources. Les fichiers de config des distributions sont gnralement dans /boot/
Pour rcuprer la configuration actuelle d'un noyau 2.6 :
sudo zcat /proc/config.gz > /usr/src/linux/.config
Fonctionne si le noyau est compil avec l'option : CONFIG_IKCONFIG_PROC = y
Configuration en mode texte
-
7/22/2019 Driver Linux PDF
33/191
- 33 interne Groupe France Tlcom
g
make menuconfig :Interface texte. Pratique galement.
Vous pouvez aussi diter le fichier .config la main ! Attention cependant auxdpendances.
make oldconfig
Permet de mettre jour un fichier de configd'un ancien noyau
Mise en garde pour les symboles optionnels
Demande les valeurs des nouveaux symboles
make config :mode texte, ou on choisit une une toutes les
options (c'est dire des centaines !), sanspossibilit de retour arrire.
Trs fastidieux. Dconseill.
Configuration en mode graphique
-
7/22/2019 Driver Linux PDF
34/191
- 34 interne Groupe France Tlcom
make xconfig :
qconf: nouvelle interface Qt deconfiguration pour Linux 2.6. Bien
plus facile utiliser ! Lisez help -> introduction:
vous y trouverez des options utiles!
Navigateur de fichiers: plus simplede charger les fichiers deconfiguration
Il faudra d'abord installer le paquet libqt3-mt-dev
Il faudra d'abord installer le paquet liglade2-dev.
make gconfig :
identique xconfig, mais avec lesbibliothques graphiques de gnome.
Sections des options du noyauLes options correspondent des fonctionnalits que vous pouvez activer/dsactiver dans le noyau suivant vos besoins
-
7/22/2019 Driver Linux PDF
35/191
- 35 interne Groupe France Tlcom
Les options correspondent des fonctionnalits que vous pouvez activer/dsactiver dans le noyau suivant vos besoins.Elles sont organises suivant diffrentes sections et sous-sections, nous allons ici dcrire les principales sections quiexistent et en donner une brve description pour vous donner une ide des options qu'elles peuvent contenir.
Note: Il est important de noter que d'une version l'autre du noyau, les options, sous-sections ou mme les sectionspeuvent changer, mais l'ide gnrale reste conserve.
Les options section par section :
Code maturity level options: Permet de cacher ou de faire apparatre les options qui sont encore en dveloppement et doncconsidres comme instables (souvent utile de dire 'oui' ici si l'on veut pouvoir profiter des dernires avances du noyau).
General setup: Ensemble d'options gnrales sur votre systme (sauf si vous voulez compiler pour des architectures trsparticulires, vous pouvez le laisser tel quel).
Loadable module support: Options concernant la gestion des modules (le dfaut est presque toujours correct pour uneutilisation normale).
Block layer: Les entres/sorties sur votre carte-mre (inutile d'y toucher).
Processor type and features: Options relatives au(x) processeur(s): type (x86, Sparc, ...), hyper-thread, dual-core, SMP, etc.
Power management options (ACPI, APM): Options concernant l'conomie d'nergie, la mise en veille et l'ACPI/APM.
Bus options (PCI, PCMCIA, EISA, MCA, ISA): Gestion de tous les endroits o vous pourriez enficher des cartes (PCI, PCMCIA,ISA, etc).
Executable file formats: La gestion des fichiers excutable (Le support ELF doit toujours tre 'Y').
Networking: Options concernant les protocoles rseau grs par votre noyau (le dfaut est bien souvent suffisant, mais jetez yun coup d'il tout hasard).
Device Drivers: Options concernant tous les pilotes matriel (c'est bien souvent ici que l'on passe le plus de temps).
File systems: Options concernant les systmes de fichiers grs par votre noyau (vous aurez y jeter un coup d'oeil).
Instrumentation Support: Option de profilage du noyau (inutile de l'activer).
Kernel hacking; Options de dbogage du noyau (inutile de l'activer sauf si vous avez des envies particulires).
Security options: Options concernant le modle de scurit de votre noyau (le dfaut est suffisant)
Cryptographic options: Algorithmes cryptographiques pouvant tre implants dans le noyau (le dfaut est suffisant).
Library routines: Bibliothques communes du noyau (le dfaut est suffisant)
Positionner les options
-
7/22/2019 Driver Linux PDF
36/191
- 36 interne Groupe France Tlcom
Le moment est venu de choisir vos options. Si c'est la premire fois que vous compilez le noyau, jevous conseille de les passer toutes en revue les unes aprs les autres en lisant l'aide qui y estattache, dans l'ordre, afin de voir si elles s'appliquent vous ou non.
Dans l'outil de configuration du noyau, chaque question attend une rponse :
'oui' (Y), 'non' (N) ou ventuellement 'module' (M) pour rendre la fonctionnalit chargeable dynamiquement.
De manire gnrale, il est bon de modulariser les fonctionnalits qui ne servent pas en permanence(lecteur de CD, carte rseau, clefs USB, ...), mais tout n'est pas possible (enfin... pas simplement :).
Par exemple, vous ne devriez pas mettre en module ce qui est utilis lors du dmarrage de votre
ordinateur (pilotes des disques-durs IDE, systme de fichiers que vous utilisez pour votre partition /,ou encore le support rseau si votre partition racine est monte par le rseau et NFS dans le casdes stations diskless par exemple, etc). En effet, les modules sont chargs aprs le noyau, et si lesmodules IDE sont sur un disque IDE, il faut d'abord les charger avant de pouvoir accder au disque,mais pour les charger, il faut avoir accs au disque et donc les avoir chargs avant... vous voyez lecercle vicieux ? En fait, il est possible de contourner ce problme grce initrd, mais celadpasserait l'ambition de ce document...
Tout le reste peut tre compil en modules, c'est dire carte son, carte rseau (sauf si votre racine
est dporte sur un serveur NFS comme dit prcdemment), le support ppp (pour internet parmodem), le CD-ROM, ...
Voici ci-dessous les options classiques utiliser pour une configuration standard. Si rien n'est dit ici propos d'une option, regardez l'aide ou conservez la valeur par dfaut ; vous pouvez aussi rpondre'N' tous les priphriques que vous ne possdez pas, comme par exemple, IDE/ATAPI TAPE, etc.
Quoi qu'il arrive, dans le doute, il vaut mieux laisser les options par dfaut.
Connatre son matriel
-
7/22/2019 Driver Linux PDF
37/191
- 37 interne Groupe France Tlcom
PCI : lspci et lspci -tou lspcidrake (sous mandrake)
01:00.0 VGA compatible controller: nVidia Corporation NV34M [GeForce FX Go 5200] (rev a1) (prog-if 00 [VGA]) Subsystem: Samsung Electronics CoLtd: Unknown device c00f Flags: bus master, 66Mhz, medium devsel, latency 248, IRQ 11 Memory at c8000000 (32-bit, non-prefetchable) [size=16M]Memory at d8000000 (32-bit, prefetchable) [size=128M] Expansion ROM at [disabled] [size=128K] Capabilities: [60] Power Managementversion 2 Capabilities: [44] AGP version 3.0
DMI (Desktop Management Interface) : dmidecode
[...] DMI type 2, 8 bytes.Board Information BlockVendor: ASUSTeK Computer INC.Product: P4S8LVersion: REV 1.xxSerial Number: xxxxxxxxxx [...]
Disques IDE : hdparam
hdparm -i /dev/hda /dev/hda: Model=FUJITSU MHT2040AT, FwRev=0022, SerialNo=NN77T3C13KB9 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 BuffType=DualPortCache, BuffSize=2048kB, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63,CurSects=16514064, LBA=yes, LBAsects=78140160 IORDY=yes, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 AdvancedPM=yes: mode=0x80 (128) WriteCache=enabled Driveconforms to: ATA/ATAPI-6 T13 1410D revision 3a:
PROCESSEUR : cat /proc/cpuinfo
USB : lsusb
APCI : cat /proc/acpi/infocat /proc/acpi/battery/BAT1/info
cat /proc/acpi/thermal_zone/THRM/temperature /proc/acpi/thermal_zone/THRM/trip_points
Il faut aussi regarder les messages du noyau : dmesg
http://rhlinux.redhat.com/kudzu/http://www.freedesktop.org/wiki/Software/halhttp://www.linux.org/apps/AppId_4812.htmlhttp://ezix.org/project/wiki/HardwareLiSterhttp://ezix.sourceforge.net/software/lshw.htmlhttp://smartmontools.sourceforge.net/http://www.nongnu.org/dmidecode/http://secure.netroedge.com/~lm78/http://www.nt.phys.kyushu-u.ac.jp/shimizu/download/download.html
Phase 5 : compilation et installation du noyau
http://rhlinux.redhat.com/kudzu/http://rhlinux.redhat.com/kudzu/ -
7/22/2019 Driver Linux PDF
38/191
- 38 interne Groupe France Tlcom
Pour une compilation croise (pour une autre architecture) il faut modifier la plateforme cible par dfaut :
Compilation : makePhase la plus longue (Ex: 45 minutes pour compiler un noyau 2.6.15.4 (38 Mo compress) sur unportable Pentium 4 3,2 GHz avec 512 Mo de RAM).
Installation (en tant que root !) : sudo make install
sudo make modules_install
Avec la version 2.4, il fallait faire : make dep && make clean && make bzImage puis make modules Les commandes suivantes ne sont plus ncessaires en 2.6 : make depends
make modules (effectue par make)
Ou bien en une seule commande : make && make modules_install && make install
Il peut tre intressant d'effacer tous les fichiers crs (pour crer des patches...) :make mrproper
ARCH ?= armCROSS_COMPILE ?= arm-linux-
(prfixe du compilateur crois)Ou bien dfinit les variables en mme temps que make ARCH=arm CROSS_COMPILE=arm-linux-
(Utile quand vous compilez pour diffrentes plateformes)
Voir les commentaires dans les Makefile du noyau Linux pour plus de dtails
Optimisation de la phase de compilation
-
7/22/2019 Driver Linux PDF
39/191
- 39 interne Groupe France Tlcom
Adapter la configuration de votre noyau en ne choisissant que les modules ncessaires votrematriel. Cela peut diviser le temps de compilation par 30 et conomiser des centaines de MB!
Compiler plusieurs fichiers en parallle : make -j Lance plusieurs compilations en parallle, autant que possible
make -j 4Plus rapide mme sur les machines uniprocesseur ! Moins de temps perdu lire ou crire lesfichiers (les autres processus occupent le processeur)
Pas utile de dpasser 4 (trop de changements de contexte) make -j
Sur une machine multiprocesseurs. Attention ne pas perturber les autres utilisateurs !
Voir la ligne de commande dtaille ou Verbose (gcc, ld) : make V=1
Fichiers gnrs aprs un make
-
7/22/2019 Driver Linux PDF
40/191
- 40 interne Groupe France Tlcom
vmlinuxImage brute du noyau Linux, non compresse
Fichier de mapping des symboles
Listes des adresses des symboles des primitives inclues dans le noyaulinux compil
arch//boot/zImageImage du noyau compresse avec zlib
arch//boot/bzImage
Image du noyau compresse aussi avec zlib. Gnralement suffisammentpetite pour tenir sur une disquette ! Image par dfaut sur i386
Si la compilation se passe sans problme, les fichiers suivant sont gnrs :
La commande file donne certaines informations sur le noyau linux :
file /boot/vmlinuz-2.6.17-10mdv
vmlinuz-2.6.17-10mdv: Linux kernel x86 boot executable RO-rootFS, root_dev 0x1606, swap_dev 0x1,
Normal VGA
Fichiers installs aprs un make install + makemodule install
-
7/22/2019 Driver Linux PDF
41/191
- 41 interne Groupe France Tlcom
module_install/boot/vmlinuz- Image du noyau
/boot/System.map- Stocke les adresses des symboles (primitives systmes) du noyau
/boot/initrd-.img Initial RAM disk, contenant les modules ncessaires pour monter lesystme
de fichier root. make install lance mkinitrd !
/etc/grub.conf ou /etc/lilo.conf make install met jour les fichiers de configuration de votre bootloaderpour supporter votre nouveau noyau ! Il relance /sbin/lilo si LILO est votrebootloader.
/lib/modules// Modules noyau et autres fichiers
build/ Tout ce qui est ncessaire pour construire des modules pour ce noyau:fichier .config (build/.config), informations sur les symboles des
modules(build/module.symVers), headers du noyau (build/include/)
kernel/ Fichiers modules .ko (Kernel Object), avec la mme structure derpertoires que dans les sources.
/lib/modules// modules.aliasAliases des modules pour insmod et modprobe. Exemple:alias sound-service-?-0 snd_mixer_oss
modules.dep Dpendances des modules pour insmod et modprobe. Aussi utilis pour necopier que les modules ncessaires dans un systme de fichier minimal.
modules.symbols Dit quel module appartient un symbole donn.
Exemple de fichier de mapping des symbolesdes primitives du noyau
-
7/22/2019 Driver Linux PDF
42/191
- 42 interne Groupe France Tlcom
$ cat /boot/System.map
00100000 A phys_startup_32
bfffe400 A __kernel_vsyscall
bfffe410 A SYSENTER_RETURN
bfffe420 A __kernel_sigreturn
bfffe440 A __kernel_rt_sigreturn
c0100000 A _text
c0100000 T startup_32
c01000a4 T startup_32_smp
c0100124 t checkCPUtype
c01001a5 t is486
c01001ac t is386
c0100210 t L6c0100212 t check_x87
c010023a t setup_idt
c0100257 t rp_sidt
(...)
des primitives du noyau
Dmarrage d'un systme GNU Linux
-
7/22/2019 Driver Linux PDF
43/191
Projet Open STB / Orange Labs - R&D Prsentation du dveloppement noyau sous GNULinux interne Groupe France Tlcom
Quand le systme dmarre (boot ou
reboot), le CPU invoque le vecteur dereset de faon rcuprer l'adresse d'unprogramme localis excuter Pour un systme traditionel, cetemplacement est localis dans leB.I.O.S. de la carte mre.
Quand un device bootable est trouv, lapremire tape consiste en unchargement du boot loader en RAM(MBR).
Le boot loader doit tre d'une tailleinfrieure ou gale 512 octets (un seul
secteur) et son rle est de charger enRAM puis d'excuter la seconde tape(GRUB, LILO, )
Dmarrage d'un systme GNU Linux
-
7/22/2019 Driver Linux PDF
44/191
Projet Open STB / Orange Labs - R&D Prsentation du dveloppement noyau sous GNULinux interne Groupe France Tlcom
La seconde tape peut afficher un cran deboot (splashscreen) et cre une zone de
mmoire (RAMFS) pour charger le rootfstemporaire depuis l'image Initrd.
Une fois cette seconde tape de lance,charge le noyau linux en mmoire vive puisinvoque ce dernier.
Par le suite il y a commutation entre le rootfs
temporaire et celui qui sera utilis par la suite(rellement).
Aprs que le noyau soit charg et initialis, lenoyau dmarre en premier la premireapplication de l'espace utilisateur via la libc(/sbin/init) en suivant le numro dfini dans
/etc/inittab.
Dans Ubuntu, /sbin/init est remplac parupstart : http://upstart.ubuntu.com/
Dtail de la phase de dmarrageLa procdure de dmarrage de Linux ressemble ceci :
-
7/22/2019 Driver Linux PDF
45/191
Projet Open STB / Orange Labs - R&D Prsentation du dveloppement noyau sous GNULinux interne Groupe France Tlcom
La procdure de dmarrage de Linux ressemble ceci :
1. Le BIOS de la machine initialise le matriel puis charge le secteur de dmarrage.
2. Le secteur de dmarrage (ou MBR pour Master Boot Record) excute le chargeur de dmarrage
(bootloader) qui va permettre de lancer le noyau.
3. Le noyau initialise les priphriques, charge les pilotes du matriel et monte le systme de fichiersracine. Puis il excute/sbin/init. initest le programme responsable du dmarrage de tous lesprocessus utilisateurs. Il lit le fichier/etc/inittab puis excute un ensemble de scripts dcrit dans cefichier.
4. Le script excut ensuite est/etc/init.d/rcS. Il lance tout dabord les scripts du rpertoire/etc/rcS.d/, quine sexcutent quune fois, au dmarrage de la machine.
5. Ensuite/etc/init.d/rcS traite lun des rpertoires/etc/rc*.den fonction du runlevelpar dfaut spcifi dans/etc/inittab (en gnral, le numro 2). Par consquent, ce sont tous les scripts du rpertoire /etc/rc2.dquisont excuts. Ce style de procdure de dmarrage est appel SysV(pour Systme V).
Par la suite, la commande initpermettra de changer de runlevel. Elle est, bien entendu, rserve ladministrateur.
Les rpertoires/etc/rc*.dne contiennent pas les scripts de dmarrage rels, mais plutt des liens symboliques vers
des scripts situs dans le rpertoire/etc/init.d. Ceci permet dviter une redondance inutile. La manire dontsont nomms les liens symboliques dterminera lordre dans lequel les services seront dmarrs : simple,ingnieux et pratique.
$ ps axfl
UID PID PPID STAT TTY TIME COMMAND0 1 0 S ? 0:03 init
Quelques chargeurs de dmarrage
-
7/22/2019 Driver Linux PDF
46/191
- 46
interne Groupe France Tlcom
LILO: LInux LOader. Chargeur de dmarrage originel de Linux. Toujours utilis !http://freshmeat.net/projects/lilo/Matriel support: x86
GRUB: GRand Unified Bootloader de GNU. Plus puissant.http://www.gnu.org/software/grub/
Matriel support: x86 CoreBoot (Ex Linux Bios) : Remplaant du BIOS, bas sur Linux.
http://www.coreboot.org/Matriel support: x86
sh-boot: Chargeur de dmarrage du projet LinuxSH.http://cvs.sourceforge.net/viewcvs.py/linuxsh/sh-boot/Matriel support: sh
LAB: Linux As Bootloader, de Handhelds.orgPartie du noyau Linux de Handhelds.orgVoir http://handhelds.org/moin/moin.cgi/Linux26ToolsAndSourcesMatriel support: arm (exprimental)
U-Boot: Universal Bootloader. Le plus utilis sur arm.http://u-boot.sourceforge.net/Matriel support: arm, ppc, mips, x86
RedBoot: Chargeur de dmarrage bas sur eCos de Red-Hat.http://sources.redhat.com/redboot/Matriel support: x86, arm, ppc, mips, sh, m68k...
Loadlin : le chargeur de linux (LOADLIN = LOAD LINux)ftp://ftp.sunet.se/pub/Linux/distributions/slackware/slackware-current/kernels/loadlin16c.ziphttp://en.wikipedia.org/wiki/Loadlin
Syslinux, chargeur util pour les clef usb et les liveCD
http://www.kernel.org/pub/linux/utils/boot/syslinux/
ISOLINUX : un chargeur pour les cdrom ISO 9660http://syslinux.zytor.com/iso.php
Ligne de commande dunoyau
http://freshmeat.net/projects/lilo/http://www.gnu.org/software/grub/http://cvs.sourceforge.net/viewcvs.py/linuxsh/sh-boot/http://cvs.sourceforge.net/viewcvs.py/linuxsh/sh-boot/http://handhelds.org/moin/moin.cgi/Linux26ToolsAndSourceshttp://u-boot.sourceforge.net/http://u-boot.sourceforge.net/http://sources.redhat.com/redboot/http://sources.redhat.com/redboot/http://sources.redhat.com/redboot/http://sources.redhat.com/redboot/http://sources.redhat.com/redboot/http://u-boot.sourceforge.net/http://u-boot.sourceforge.net/http://handhelds.org/moin/moin.cgi/Linux26ToolsAndSourceshttp://cvs.sourceforge.net/viewcvs.py/linuxsh/sh-boot/http://cvs.sourceforge.net/viewcvs.py/linuxsh/sh-boot/http://www.gnu.org/software/grub/http://freshmeat.net/projects/lilo/ -
7/22/2019 Driver Linux PDF
47/191
- 47
interne Groupe France Tlcom
Comme la plupart des programmes C, le noyau Linux accepte des arguments en ligne de commande :
Utile pour configurer le noyau au dmarrage, sans avoir le recompiler.
Exemple (utilis pour le PDA HP iPAQ h2200)root=/dev/ram0 rw init=/linuxrc \ console=ttyS0,115200n8 console=tty0 \ ramdisk_size=8192cachepolicy=writethrough \
Paramtres les plus utiliss :
rootPermet d'identifier le systme de fichier racine
initScript excuter la fin de l'initialisation du noyauPar dfaut: /sbin/init
consoleConsole pour les messages de dmarrage
ro / rwMonte le priphrique root en lecture seule / lecture-criture
Des centaines de paramtres sont dcrit dans Documentation/kernel-parameters.txt
Initrd (initial RAM Disk)
-
7/22/2019 Driver Linux PDF
48/191
- 48 interne Groupe France Tlcom
Initrd = Initial RAM disk = disque mmoire temporaire de dmarrage.
Systme de fichier racine (/) minimaliste en RAM Utilis traditionnellement pour minimiser le nombres de pilotes de priphriques compils dans le
noyau.Exemple: le module ext3 qui permet de monter le systme de fichier racine final.
Utile aussi pour lancer des scripts d'initialisation complexes
Utile pour charger des modules propritaires (qui ne peuvent tre lis statiquement au noyau)
Pendant la phase d'installation (make install) crel'image initrd(init RAM disk) : mkinitrd -o/boot/initrd.img-2.6.15.4 /lib/modules/2.6.15.4.
Pour plus d'information : il suffit de lire Documentation/initrd.txt dans les sources du noyau. Ellecouvre aussi le changement de systme de fichier racine (pivot_root).
Exemple de cration d'une image initrd :
mkdir /mnt/initrd
dd if=/dev/zero of=initrd.img bs=1k count=2048
mkfs.ext2 -F initrd.img
mount -o loop initrd.img /mnt/initrd
( Peut tre rempli avec: busybox, les modules, le script linuxrc )
umount /mnt/initrdgzip --best -c initrd.img > initrd
http://www.ibm.com/developerworks/linux/library/l-initrd.html
3 ARCHITECTURE DU NOYAU
-
7/22/2019 Driver Linux PDF
49/191
Projet Open STB / Orange Labs - R&D Prsentation du dveloppement noyau sous GNULinux
interne Groupe France Tlcom
3 ARCHITECTURE DU NOYAU
Vue simplifie du noyau
Vue modulaire du noyau Hypergraphe des sources du noyau
Rle du noyau
Dcoupage du noyau
Virtual File System (VFS)
Process Management (PM)
Memory Management (MM)
Gestion des entres/sorties (I/O) Network Stack (NS)
System Call Interface (SCI)
Vue simplifie d'un diagramme matriciel du noyau GNU Linux
-
7/22/2019 Driver Linux PDF
50/191
- 50 interne Groupe France Tlcom
Vue modulaire du noyau GNU Linux
-
7/22/2019 Driver Linux PDF
51/191
- 51 interne Groupe France Tlcom
Vue de l'hypergraphe form par l'arborescence des sources du noyau 2.4.9
-
7/22/2019 Driver Linux PDF
52/191
- 52 interne Groupe France Tlcom
Linux possde plusieurshypergraphes tel que celui-ci
ou bien celui reprsentant lesdpendances des paquetsquant l'tablissement d'unedistribution conforme LSB(mme basique).
Note : ce schma n'est pas trs lisiblemais montre cependant la reprsentationen oignon (concentrique) du noyau GNULinux
Rle du noyau GNU Linux
-
7/22/2019 Driver Linux PDF
53/191
- 53 interne Groupe France Tlcom
GNU (GNU is Not Unix) Linux est le coeur dusystme. Il fournit une interface (API) avec le
matriel via une couche de drivers.
Il gre aussi l'ordonnacement des tches rendant cedernier :
multi-tches ;
premptif (davantage en 2.6 qu'en 2.4) ;
multi-utilisateurs
Cependant il n'est pas nativement temps rel. Pource faire il faut rajouter un microkernel temps reltel que RTAI, RTLINUX ou XENOMAI.
En d'autre terme le noyau manage les tches tant enespace noyau qu'en espace utilisateur.
Vue de l'espace user, le noyau peut tre contactvia un ensemble d'appels systmes rfrencsdans la librairie C (glibc).
Linux et le temps rel
-
7/22/2019 Driver Linux PDF
54/191
- 54 interne Groupe France Tlcom
http://uuu.enseirb.fr/~kadionik/embedded/linux_realtime/linux_realtime9.htmlhttp://en.wikipedia.org/wiki/RTLinuxhttp://en.wikipedia.org/wiki/RTAIhttp://en.wikipedia.org/wiki/Wind_River_Systemshttp://fr.wikipedia.org/wiki/Xenomaihttp://www.xenomai.org/index.php/Main_Pagehttp://fr.wikipedia.org/wiki/Xenomai
Le noyau Linux n'tant pas
Temps rel en natif il estCependant possible de leComplter d'un micro-kernelTemps rel o linux estexcutComme sous UML, c'est--dire
sous la forme d'un process
Dcoupage du noyau Linux Le noyau GNU Linux a hrit de l'architecture de
UNIX it i
-
7/22/2019 Driver Linux PDF
55/191
- 55 interne Groupe France Tlcom
Espace utilisateur
Matriel
UNIX propritaire.
Il est souvent compar un oignon tant il estorganis en couches successives, en partant du
matriel, au drivers jusqu' l'espace utilisateurqui est sa frontire
-
7/22/2019 Driver Linux PDF
56/191
- 56 interne Groupe France Tlcom
VFS - Virtual File System
VFS : Virtual File SystemLinux n'tant pas monolithique c'est--dire qu'il est constitu d'unensemble de parties comme la pile rseau, la gestion de la mmoire,t
-
7/22/2019 Driver Linux PDF
57/191
- 57 interne Groupe France Tlcom
etc
Bref VFS est la couche d'abstraction de haut niveau intra-kernelregroupant un ensemble de primitives gnriques comme open, close,read, write (au nom prs).
S'il s'agit d'crire un fichier (une fifo ou autre) sur un disque, h bienl'implmentation dans le kernel sera la mme qu'il s'agisse d'un disqueavec un systme de fichier cramfs, jffs2 ou 3, ext2 ou 3, reizerfs, etcVFS est la couche virtuelle qui permet de niveler les appels d'un pointde vue noyau ou drivers en se souciant pas du systme de fichiersrellement utilis. En plus de l'API offerte, VFS est un dispatcher souscette couche, il y a un module spcifique chaque systme de fichiers
Oprations sur les fichiers
-
7/22/2019 Driver Linux PDF
58/191
- 58 interne Groupe France Tlcom
La primitive register_chrdev(), permet de dclarer des file_operations (appelles fops).
Voici ses principales oprations :
loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
int (*open) (struct inode *, struct file *);
int (*release) (struct inode *, struct file *);
http://www.ibm.com/developerworks/linux/library/l-linux-filesystem/
Oprations sur les fichiers
i t (*i tl) ( t t i d * t t fil * i d
-
7/22/2019 Driver Linux PDF
59/191
- 59 interne Groupe France Tlcom
int (*ioctl) (struct inode *, struct file *, unsignedint, unsigned long);
Utilise pour envoyer au priphrique descommandes spcifiques, qui ne sont ni deslectures, ni des critures (ex: formater undisque, changer une configuration).
int (*mmap) (struct file *, structvm_area_struct);
Demande que la mmoire du priphriquesoit mappe dans l'espace d'adressage duprocessus utilisateur
struct module *owner;
Utilise par le noyau pour garder une trace dequi utilise cette structure et compter le nombred'utilisateurs du module.
LFH : http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/Linux-Filesystem-Hierarchy.pdf
La structure file
http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/Linux-Filesystem-Hierarchy.pdfhttp://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/Linux-Filesystem-Hierarchy.pdf -
7/22/2019 Driver Linux PDF
60/191
- 60 interne Groupe France Tlcom
Au niveau kernel, VFS fournit la mthode open() pour ouvrir un fichier et retourner un pointeur sur lastructure reprsentant le fichier ouvert.
Les pointeurs vers cette structure sont les "fips". mode_t f_mode;Mode d'ouverture du fichier (FMODE_READ, FMODE_WRITE)
loff_t f_pos;Position dans le fichier ouvert.
struct file_operations *f_op;Peuvent tre changes la vole.
struct dentry *f_dentryUtilis pour accder l'inode: filp->f_dentry->d_inode.
Pour information :
copy_from_userCopie des donnes de l'espace utilisateur vers l'espace noyau.
copy_to_userCopie des donnes de l'espace noyau vers l'espace utilisateur.
Table des systmes de fichiers courants
-
7/22/2019 Driver Linux PDF
61/191
- 61 interne Groupe France Tlcom
Fuse : un systme de fichier en espaceutilisateurPas mal de qualits :API simple via la librairie dynamique libfuse
-
7/22/2019 Driver Linux PDF
62/191
- 62 interne Groupe France Tlcom
API simple via la librairie dynamique libfuse Implmentation d'un systme de fichiers en espace user (pas de dveloppement noyau)
Utilisation ne ncessitant pas de patcher le noyau
Implmentation scurise Transfert entre l'espace noyau et l'espace utilisateur optimis
Ne ncessite pas des droit root
Fonctionne sous GNU Linux 2.4 et 2.6
A prouv sa stabilit
http://fuse.sourceforge.net/http://fuse.sourceforge.net/wiki/index.php/FileSystems
-
7/22/2019 Driver Linux PDF
63/191
- 63 interne Groupe France Tlcom
PM (Process Management)
PM : Process Management
-
7/22/2019 Driver Linux PDF
64/191
- 64 interne Groupe France Tlcom
Diagrammetats-transitiondes processus
gr parl'ordonnaceurdu noyau GNULinux
PRET
STOPPE
ENEXECUTION
SUSPENDU
ZOMBIE
Cration
SignalSignal
Find'entre/sortie
Entre/Sortie
Terminaison
Ordonnancement
Le scheduler CFS (depuis 2.6.23)Le Completely Fair Scheduler (ordonnanceur compltement quitable en anglais), ou CFS est un
ordonnanceur de tches pour le noyau linux, qui a fait son apparition avec la version 2.6.23 sortie le9 octobre 2007, remplaant ainsi le prcdent ordonnanceur qui tait apparu dans le noyau 2.5.2-
0 j i 2002 l l ll i d l i d
-
7/22/2019 Driver Linux PDF
65/191
- 65 interne Groupe France Tlcom
pre10 en janvier 2002. Il gre l'allocation de ressource processeur pour l'excution des processus, enmaximisant l'utilisation globale du CPU tout en optimisant l'interactivit. Il a t crit par Ingo Molnr.
Contrairement au prcdent ordonnanceur utilis par le noyau linux, CFS n'est pas bas sur des files de
processus, mais utilise un arbre rouge-noir implmentant une chronologie des futures excutions destches. En effet, l'arbre trie les processus selon une valeur reprsentative du manque de cesprocessus en temps d'allocation du processeur, par rapport au temps qu'aurait allou un processeurdit multitche idal, sur lequel tous les processus s'excuterait en mme temps et la mme vitesse.Ainsi, chaque intervention de l'ordonnanceur, il "suffit" ce dernier de choisir le processus le plus enmanque de temps d'excution pour tendre au mieux vers le comportement duprocesseur multitcheidal. De plus, l'ordonnanceur utilise une granularit temporelle la nanoseconde, rendant redondantela notion de tranches de temps, les units atomiques utilises pour le partage du CPU entreprocessus. Cette connaissance prcise signifie galement qu'aucune heuristique (base sur des
statistiques, donc pouvant commettre des erreurs) n'est requise pour dterminer l'interactivit d'unprocessus.
Plusieurs avances sont apportes par le nouveau noyau 2.6.25. L'ordonnanceur CFS a t rendu plusagressif dans le dplacement des processus entre les coeurs de calcul. Maintenant, dans le cas d'unecomptition entre des tches temps rel pour accaparer un seul coeur, le noyau migrera plusefficacement certaines tches vers les autres processeurs afin d'viter les temps d'attente. D'autrepart le verrou global du noyau (big kernel lock) est maintenant premptible par dfaut et l'optionpermettant de ne pas le rendre premptible va sans doute disparatre. Les timers haute rsolution
peuvent maintenant tre utiliss pour calculer les priorits entre les processus ce qui rendl'ordonnanceur plus prcis lors de ses allocations de temps. On peut galement noter que la fonctiond'ordonnancement de groupe, introduite dans le noyau prcdent, gagne des fonctions de support dutemps rel.
http://kerneltrap.org/node/8059http://people.redhat.com/mingo/cfs-scheduler/http://www.ibm.com/developerworks/linux/library/l-cfs/http://en.wikipedia.org/wiki/Completely_Fair_Scheduler
Etat d'attente
L' d i i l ' ili d
-
7/22/2019 Driver Linux PDF
66/191
- 66 interne Groupe France Tlcom
L'endormissement est ncessaire lorsqu'un processus utilisateur attenddes donnes qui ne sont pas encore prtes. Il est alors plac dans unequeue/file d'attente.
Dclarer la queue : DECLARE_WAIT_QUEUE_HEAD (module_queue);
Plusieurs moyens d'endormir un processus :sleep_on()Ne peut pas tre interrompu !
interruptible_sleep_on()Peut tre interrompu par un signal
sleep_on_timeout()interruptible_sleep_on_timeout()Similaire ci-dessus, mais avec un dlai d'expiration.
wait_event()
wait_event_interruptible()Dort jusqu' ce qu'une condition
soit vrifie.
Utilisez seulement les commandes interruptibles !
Les autres sont rarement ncessaires.
Se rveiller !
-
7/22/2019 Driver Linux PDF
67/191
- 67 interne Groupe France Tlcom
wake_up(&queue);Rveille tous les processus attendant dans la queue donne
wake_up_interruptible(&queue);Rveille seulement les processus interruptibles
wake_up_sync(&queue);Ne rordonnance pas lorsque vous savez qu'un autre processus
est sur le point de s'endormir, car dans ce cas unrordonnancement va de toute faon se produire.
-
7/22/2019 Driver Linux PDF
68/191
- 68 interne Groupe France Tlcom
MM (Memory Management)
Organisation de la mmoireZONE_NORMAL :
4 GB
-
7/22/2019 Driver Linux PDF
69/191
- 69 interne Groupe France Tlcom
0 GB
1 GB
Mmoire virtuelle Mmoire physique
Il est possible d'tendre l'utilisation de la mmoire au dela des 4 GoVia l'utilisation de la mmoire haute (ZONE_HIGHMEM).
KERNELPHYSICAL
SPACE
KERNELVIRTUAL
SPACE
USERVIRTUAL
SPACE
0 GB
3 GB
4 GB
http://www.informit.com/content/images/0131453483/downloads/gorman_book.pdf
Modes adressage et conversions Adressage logique : utilis par les instructions du
microprocesseur
-
7/22/2019 Driver Linux PDF
70/191
- 70 interne Groupe France Tlcom
microprocesseur.
Adressage linaire : entier non-sign de 32 bits(jusqu' 4 294 967 296 cellules de mmoire).
Adressage : utiliser pour adresser physiquement lammoire vive via le bus hardware.
Conversions d'adressage successif.
kmalloc et kfree
-
7/22/2019 Driver Linux PDF
71/191
- 71 interne Groupe France Tlcom
Allocateurs basiques, quivalents noyau desmalloc et free de la glibc :
static inline void *kmalloc(size_t size, int
flags);
size: quantit d'octets allouer
flags: priorit (voir la page suivante)
void kfree (const void *objp); Exemple:data = kmalloc(sizeof(*data), GFP_KERNEL);
Proprits de kmalloc
-
7/22/2019 Driver Linux PDF
72/191
- 72 interne Groupe France Tlcom
Rapide ( moins qu'il ne soit bloqu en attente de pages) N'initialise pas la zone alloue
La zone alloue est contigu en RAM physique
Allocation par taille de 2n-k (k: quelques octets de gestion)Ne demandez pas 1024 quand vous avez besoin de 1000 ! Vous recevriez 2048 !
Options pour kmalloc
Dfinis dans include/linux/gfp.h (GFP: get free pages)
-
7/22/2019 Driver Linux PDF
73/191
-
73 interne Groupe France Tlcom
GFP_KERNELAllocation mmoire standard dunoyau. Peut tre bloquante. Bienpour la plupart des cas.
GFP_ATOMICAllocation de RAM depuis les
gestionnaires d'interruption ou lecode non lis aux processusutilisateurs. Jamais bloquante.
GFP_USERAlloue de la mmoire pour les
processus utilisateur. Peut trebloquante. Priorit la plus basse.
GFP_NOIOPeut tre bloquante, mais aucuneaction sur les E/S ne seraexcute.
GFP_NOFSPeut tre bloquante, mais aucune
opration sur les systmes defichier ne sera lance.
GFS_HIGHUSERAllocation de pages en mmoirehaute en espace utilisateur. Peut
tre bloquante. Priorit basse.
Dfinis dans include/linux/gfp.h (GFP: get_free_pages)
Flags pour kmalloc
Options supplmentaires (pouvant tre ajouts avec l'oprateur |)
-
7/22/2019 Driver Linux PDF
74/191
-
74 interne Groupe France Tlcom
__GFP_DMAAllocation dans la zone DMA
__GFP_HIGHMEMAllocation en mmoire tendue(x86 et sparc)
__GFP_REPEATDemande d'essayer plusieurs fois. Peut sebloquer, mais moins probable.
__GFP_NOFAILNe doit pas chouer. N'abandonne jamais.
Attention: utiliser qu'en cas de ncessit!
__GFP_NORETRYSi l'allocation choue, n'essaie pas d'obtenirde page libre.
Options supplmentaires (pouvant tre ajouts avec l oprateur |)
Allocation par pagesPlus approprie que kmalloc pour les grosses tranches de mmoire:
i d l d i fl
-
7/22/2019 Driver Linux PDF
75/191
-
75 interne Groupe France Tlcom
unsigned long get_zeroed_page(int flags);Retourne un pointeur vers une page libre et la remplit avec des zros
unsigned long __get_free_page(int flags);Identique, mais le contenu n'est pas initialis
unsigned long __get_free_pages(int flags,unsigned long order);
Retourne un pointeur sur une zone mmoire de plusieurs pages continuesen mmoire physique. order: log
2(nombre_de_pages).
Librer des pages
void free_page(unsigned long addr); void free_pages(unsigned long addr, unsigned long order);
Utiliser le mme ordre que lors de l'allocation.
Mapper des adresses physiques
vmalloc et ioremap peuvent tre utiliss pour obtenir des
-
7/22/2019 Driver Linux PDF
76/191
-
76 interne Groupe France Tlcom
vmalloc et ioremap peuvent tre utiliss pour obtenir deszones mmoire continues dans l'espace d'adresse virtuel
(mme si les pages peuvent ne pas tre continues en mmoirephysique).
void *vmalloc(unsigned long size);void vfree(void *addr);
void *ioremap(unsigned long phys_addr,unsigned long size);
Ne fait pas d'allocation. Fait correspondre le segment donn enmmoire physique dans l'espace d'adressage virtuel.
void iounmap(void *address);
Utilitaires pour la mmoire
-
7/22/2019 Driver Linux PDF
77/191
-
77 interne Groupe France Tlcom
void * memset(void * s, int valeur, size_t taille);Remplit une rgion mmoire avec la valeur donne.
void * memcpy(void * dest,const void *src,size_t count);
Copie une zone mmoire vers une autre.
Utiliser memmove avec des zones qui se chevauchent. De nombreuses fonctions quivalentes celles de la glibc sont
dfinies dans include/linux/string.h
Choisir un intervalle d'E/S
Les limites de la mmoire et des ports d'E/S peu ent tre
-
7/22/2019 Driver Linux PDF
78/191
-
78 interne Groupe France Tlcom
Les limites de la mmoire et des ports d'E/S peuvent trepasss comme paramtres de module. Un moyen facile de
dfinir ces paramtre est au travers de/etc/modprobe.conf
Les modules peuvent aussi essayer de trouver des zoneslibres par eux-mmes (en faisant plusieurs appels
request_region).
Diffrences avec la mmoire standard
-
7/22/2019 Driver Linux PDF
79/191
79 interne Groupe France Tlcom
criture et lecture sur la mmoire peuvent tre misen cache.
Le compilateur peut choisir d'crire la valeur dans unregistre du processeur, et ne jamais l'crire dans lammoire principale.
Le compilateur peut dcider d'optimiser ourordonner les instructions de lecture / criture.
Eviter les problmes d'accs aux E/S
-
7/22/2019 Driver Linux PDF
80/191
80 interne Groupe France Tlcom
Le cache sur la mmoire et les ports d'E/S estdsactiv, soit par le hardware ou par le code d'initLinux.
Linux fournit les Barrires Mmoire pour empcher lecompilateur de rordonnancer les accs:
Dpendant de l'architecture
#include void rmb(void);void wmb(void);
void mb(void);
Indpendant#include void barrier(void);
Mmoire mappe directement
Dans certaines architectures (principalement MIPS) la mmoire
-
7/22/2019 Driver Linux PDF
81/191
81 interne Groupe France Tlcom
Dans certaines architectures (principalement MIPS), la mmoired'E/S peut tre directement mappe dans l'espace d'adressage
physique. Dans ce cas, les pointeurs d'E/S ne doivent pas tre drfrencs.
Pour viter les problmes de portabilit travers les architectures,les fonctions suivantes peuvent tre utilises :
unsigned read[b|w|l](address);void writeb[b|w|l](unsigned value, address);void memset_io(address, value, count);void memcpy_fromio(dest, source, num);void memcpy_toio(dest, source, num);
Mapper la mmoire d'E/S en mmoire virtuelle
Pour accder la mmoire d'E/S les pilotes ont besoin d'une
-
7/22/2019 Driver Linux PDF
82/191
82 interne Groupe France Tlcom
Pour accder la mmoire d E/S, les pilotes ont besoin d uneadresse virtuelle que le processeur peut grer.
Les fonctions ioremap permettent cela:
#include
void *ioremap(unsigned long phys_addr,
unsigned long size);void *ioremap_nocache(unsigned long phys_addr,unsigned long
size);void iounmap(void *address);
Attention: vrifiez que ioremap ne retourne pas NULL !
mmap
Rpond aux requtes de la fonction mmap de la glibc:
-
7/22/2019 Driver Linux PDF
83/191
83 interne Groupe France Tlcom
Rpond aux requtes de la fonction mmap de la glibc:void * mmap(void *start, size_t length, int prot,
int flags, int fd, off_t offset);int munmap(void *start, size_t length);
Permet aux programmes utilisateurs d'accder directement la mmoire du priphrique.
Utilis par des programmes comme le serveur X-Window.
Plus rapide que les autres mthodes (comme crire dans lefichier /dev correspondant) pour les applications utilisateur fort besoin en bande passante.
Zones de Mmoire Virtuelle
Zone de Mmoire Virtuelle (Virtual Memory Areas): zone contigudans la mmoire virtuelle d'un processus avec les mmes
-
7/22/2019 Driver Linux PDF
84/191
84 interne Groupe France Tlcom
dans la mmoire virtuelle d un processus, avec les mmespermissions.
> cat /proc/1/maps (processus init)Dbut fin perm dcalage majeur:mineur inode Nom du fichier mapp00771000-0077f000 r-xp 00000000 03:05 1165839 /lib/libselinux.so.10077f000-00781000 rw-p 0000d000 03:05 1165839 /lib/libselinux.so.10097d000-00992000 r-xp 00000000 03:05 1158767 /lib/ld-2.3.3.so00992000-00993000 r--p 00014000 03:05 1158767 /lib/ld-2.3.3.so00993000-00994000 rw-p 00015000 03:05 1158767 /lib/ld-2.3.3.so
00996000-00aac000 r-xp 00000000 03:05 1158770 /lib/tls/libc-2.3.3.so00aac000-00aad000 r--p 00116000 03:05 1158770 /lib/tls/libc-2.3.3.so00aad000-00ab0000 rw-p 00117000 03:05 1158770 /lib/tls/libc-2.3.3.so00ab0000-00ab2000 rw-p 00ab0000 00:00 008048000-08050000 r-xp 00000000 03:05 571452 /sbin/init programme08050000-08051000 rw-p 00008000 03:05 571452 /sbin/init donnes, pile08b43000-08b64000 rw-p 08b43000 00:00 0f6fdf000-f6fe0000 rw-p f6fdf000 00:00 0
fefd4000-ff000000 rw-p fefd4000 00:00 0ffffe000-fffff000 ---p 00000000 00:00 0
Zones de Mmoire VirtuelleExemple du serveur X (extrait)
Dbut fin perm dcalage majeur:mineur inode Nom du fichier mapp08047000-081be000 r-xp 00000000 03:05 310295 /usr/X11R6/bin/Xorg
-
7/22/2019 Driver Linux PDF
85/191
85 interne Groupe France Tlcom
p / / / / g081be000-081f0000 rw-p 00176000 03:05 310295 /usr/X11R6/bin/Xorg...
f4e08000-f4f09000 rw-s e0000000 03:05 655295 /dev/dri/card0f4f09000-f4f0b000 rw-s 4281a000 03:05 655295 /dev/dri/card0f4f0b000-f6f0b000 rw-s e8000000 03:05 652822 /dev/memf6f0b000-f6f8b000 rw-s fcff0000 03:05 652822 /dev/mem
mmap simple
Pour autoriser les oprations mmap(), le pilote a juste besoin de crerdes pages de mmoire mappant une zone physique
-
7/22/2019 Driver Linux PDF
86/191
86 interne Groupe France Tlcom
des pages de mmoire mappant une zone physique.
Cela peut tre fait avec la fonction suivante (linux/mm.h) appelerdans une fonction driver_mmap:
int remap_page_range(struct vm_area_struct *vma,unsigned long from, /* Virtual */
unsigned long to, /* Physical */unsigned long size, pgprot_t prot);
Cette fonction est alors ajouter la structure file_operationsdu pilote.
Exemple: drivers/char/mem.c
-
7/22/2019 Driver Linux PDF
87/191
87 interne Groupe France Tlcom
Gestion des entres/sorties
Demander des ports d'E/S
struct resource *request_region(i
/proc/ioports example
-
7/22/2019 Driver Linux PDF
88/191
88 interne Groupe France Tlcom
unsigned long start,
unsigned long len,char *name);
Essaie de rserver la rgion donne et retourneNULL en cas d'chec. Exemple:
request_region(0x0170, 8, "ide1");
void release_region(unsigned long start,unsigned long len);
Regarderinclude/linux/ioport.h
etkernel/resource.c
0000-001f : dma10020-0021 : pic10040-0043 : timer00050-0053 : timer10060-006f : keyboard0070-0077 : rtc0080-008f : dma page reg00a0-00a1 : pic200c0-00df : dma200f0-00ff : fpu0100-013f : pcmcia_socket00170-0177 : ide101f0-01f7 : ide00376-0376 : ide10378-037a : parport003c0-03df : vga+03f6-03f6 : ide003f8-03ff : serial0800-087f : 0000:00:1f.0
0800-0803 : PM1a_EVT_BLK0804-0805 : PM1a_CNT_BLK0808-080b : PM_TMR0820-0820 : PM2_CNT_BLK0828-082f : GPE0_BLK
...
Lire / crire sur les ports d'E/S
L'implmentation des fonctions suivantes et le type unsigned
-
7/22/2019 Driver Linux PDF
89/191
89 interne Groupe France Tlcom
peuvent varier suivant la plate-forme !
octetsunsigned inb(unsigned port);void outb(unsigned char byte, unsigned port);
motsunsigned inw(unsigned port);
void outw(unsigned short word, unsigned port);
"long" integersunsigned inl(unsigned port);void outl(unsigned long word, unsigned port);
Lire / crire une chane sur les ports d'E/S
Plus efficace que la boucle C correspondante, si le processeur
-
7/22/2019 Driver Linux PDF
90/191
90 interne Groupe France Tlcom
supporte de telles oprations :
byte stringsvoid insb(unsigned port, void *addr, unsigned long count);void outsb(unsigned port, void *addr, unsigned long count);
word stringsvoid insw(unsigned port, void *addr, unsigned long count);void outsw(unsigned port, void *addr, unsigned long count);
long stringsvoid inbsl(unsigned port, void *addr, unsigned long count);void outsl(unsigned port, void *addr, unsigned long count);
Demander de la mmoire d'E/S
Fonctions quivalentes avec la mmeinterface
/proc/iomem
-
7/22/2019 Driver Linux PDF
91/191
91 interne Groupe France Tlcom
interface
struct resource *request_mem region(unsigned long start,unsigned long len,char *name);
void release_mem_region(
unsigned long start,unsigned long len);
00000000-0009efff : System RAM0009f000-0009ffff : reserved
000a0000-000bffff : Video RAM area000c0000-000cffff : Video ROM000f0000-000fffff : System ROM00100000-3ffadfff : System RAM
00100000-0030afff : Kernel code0030b000-003b4bff : Kernel data
3ffae000-3fffffff : reserved40000000-400003ff : 0000:00:1f.1
40001000-40001fff : 0000:02:01.040001000-40001fff : yenta_socket
40002000-40002fff : 0000:02:01.140002000-40002fff : yenta_socket
40400000-407fffff : PCI CardBus #0340800000-40bfffff : PCI CardBus #0340c00000-40ffffff : PCI CardBus #0741000000-413fffff : PCI CardBus #07
a0000000-a0000fff : pcmcia_socket0a0001000-a0001fff : pcmcia_socket1e0000000-e7ffffff : 0000:00:00.0e8000000-efffffff : PCI Bus #01
e8000000-efffffff : 0000:01:00.0...
-
7/22/2019 Driver Linux PDF
92/191
92 interne Groupe France Tlcom
NS (Network Stack)
Pile rseau
-
7/22/2019 Driver Linux PDF
93/191
93 interne Groupe France Tlcom
La pile rseau s'interfaceavec le module VFS et leProcess Manager
Pour plus d'information sur la pile rseau, veuillez vous reportezau document "Etude dtaill de la pile rseau sous Linux".
-
7/22/2019 Driver Linux PDF
94/191
94 interne Groupe France Tlcom
SCI (System Call Interface)
API des primitives systme
Les primitives
-
7/22/2019 Driver Linux PDF
95/191
95 interne Groupe France Tlcom
Les primitives
systmes du noyauson accessible viaune API POSIX
L'appel cesfonctions se faisantvia la librairie Cstandard
4 METHODOLOGIES DE DEVELOPPEMENT
-
7/22/2019 Driver Linux PDF
96/191
Projet Open STB / Orange Labs - R&D Prsentation du dveloppement noyau sous GNULinux
interne Groupe France Tlcom
Pourquoi une mthodologie ?
Mthodologie 1 : travail en local
D/chargement de modules
Mthodologie 2 : travail avec un second noyau viaUML
Mthodologie 3 : simulation via un simulateur
Mthodologie 4 : via un second systme
Pourquoi une mthodologie ?
Le noyau GNU Linux est le cur du systme
-
7/22/2019 Driver Linux PDF
97/191
97 interne Groupe France Tlcom
Un kernel panic du noyau GNU linux
Le noyau GNU Linux est le cur du systmed'exploitation.
Travailler directement au cur du noyau peut lerendre instable et engendrer un KERNELPANIC, le rendant donc inutilisable Avant toute installation d'un nouveau noyauIl est conseill d'en avoir un autre de rfrence
enregistr au niveau du BOOT loader connupour ne pas poser de problme lors dudmarrage.
Dvelopper et surtout tester un nouveau noyauLinux s'accompagne souvent d'unEnsemble de mthodes trs utiles.
Mthodologie 1: travail en local
But : cela revient travailler en local sur un driver et le (d)charger manuellement sur le noyau en courant.
A f il l ili
-
7/22/2019 Driver Linux PDF
98/191
98 interne Groupe France Tlcom
Avantage : facile mettre en place et utiliser.
Inconvnient : si le noyau devient instable, il peut tre ncessaire de rebooter. A prconiser pour de petitdrivers mais dconseiller vivement pour des drivers complexe (rseau ou vfs par exmple).
C'est envisageable pour des modules mais s'il est ncessaire de modifier le cur de mme du noyau alorscette technique est viter.
Debug / traces :
sudo tail -f /proc/kmsgsudo tail -f /var/log/messagesdmesg [ -c ] [ -n niveau ] [ -s taille ]syslogd
Pour information, le chargement d'un driver dans le noyau endynamique revient au chargement d'une librairie dynamique.Il y a fusion des symboles du modules avec ceux du noyau.
(D)chargement de driversExemple de listing des modules chargs :
$ lsmod()
Dans le listing suivant, snd_pcm_oss n'as pas dedpendances mais par contre snd_mixer_oss ale module snd_pcm_oss comme dpendance ce quiveut dire qu'il est possible de charger le modulesnd_pcm_oss de faon unitaire et directement alorsque le module snd_mixer_oss ncessitera que le
-
7/22/2019 Driver Linux PDF
99/191
99 interne Groupe France Tlcom
snd_pcm_oss 40384 0
snd_mixer_oss 16096 2 snd_pcm_oss()
En rsum : insmod snd_pcm_oss : OKinsmod snd_mixer_oss : OK si snd_pcm_oss dj charg sinon NOKmodprobe snd_pcm_oss : OKmodprobe snd_mixer_oss : OK chargera snd_pcm_oss si pas charg
Le raisonnement est le mme pour le dchargement. Seule les commandes changent. rmmod remplace insmod et modprobe r remplace modprobe. Modprobe r, dchargera aussi les autres modules dpendant si non utiliss.
modinfo donne les informations sur un module comme l'auteur, sa licence, sesparamtres, etc
sudo depmod : permet de recrer le cache de la liste des modules (mcanisme similaire ldconfig).
A noter qu'il est possible de rajouter le nom des modules charger lors d'un boot dans le fichier deconfiguration /etc/modules.
module snd_pcm_oss soit charg au pralable.
Pour info lsmod met en forme les informationsgnrs dans /proc/modules
(D)chargement de driversinsmodoumodprobe
Lors du chargementdynamique d'un module, celase passe comme pour le
-
7/22/2019 Driver Linux PDF
100/191
100 interne Groupe France Tlcom
rmmodou
modprobe -r
se passe comme pour le
chargement d'une librairiedynamique c'est--dire que lemodule est link au noyau.
Les symboles (primitives) dumodule sont rajout etpeuvent tre utiliss dansd'autres modules ou dans le
noyau lui-mme.
Mthodologie 2 : travail avec un second noyau viaUML
User Mode Linux ou UML est un noyau Linux compil qui peut tre excut dansl'espace utilisateur comme un simple programme. Il permet donc d'avoir plusieurssystmes d'exploitation virtuels (principe de virtualisation) sur une seule machinephysique hte excutant Linux.
-
7/22/2019 Driver Linux PDF
101/191
101 interne Groupe France Tlcom
Avantages : Si un User Mode Linux plante, le systme hte n'est pas affect. Un utilisateur sera root sur un User Mode Linux, mais pas sur le systme hte. Au niveau dveloppement, gdb peut servir dbuguer le noyau de dev puisqu'il est considr comme
un processus normal. Il permet aussi de tester diffrents paramtres noyaux sans se soucier des consquences. Il permet de tester diffrentes configurations ou compilations du noyau sans avoir l'installer et
redmarrer la machine. Il permet de mettre en place un rseau compltement virtuel de machines Linux, pouvant communiquer
entre elles. Les tests de topologies lourdes d'un point de vue physique peuvent donc tre mensaisment ici.
Inconvnients : Trs lent, plutt conu pour des tests fonctionnels que
pour la performance Ncessite de patcher le noyau
Noyau GNU Linux courant
Diagramme d'une architecture UML
http://user-mode-linux.sourceforge.net/http://www.rstack.org/oudot/20022003/7/7_rapport.pdfhttp://www.ibm.com/developerworks/edu/l-dw-linuxuml-i.htmlhttp://www.metz.supelec.fr/metz/personnel/galtier/PagesPerso/TutorielUML/UML_avec_briques_existantes/index.html
Noyauexprimental
ESPACE UTILISATEUR
UML
Kernel Mode Linux (KML)
Cette technique rciproque de UML, permet d'excuter dans le noyau un processus habituellementprvu pour l'espace user.
http://user-mode-linux.sourceforge.net/http://www.rstack.org/oudot/20022003/7/7_rapport.pdfhttp://www.ibm.com/developerworks/edu/l-dw-linuxuml-i.htmlhttp://www.metz.supelec.fr/metz/personnel/galtier/PagesPerso/TutorielUML/UML_avec_briques_existantes/index.htmlhttp://www.metz.supelec.fr/metz/personnel/galtier/PagesPerso/TutorielUML/UML_avec_briques_existantes/index.htmlhttp://www.ibm.com/developerworks/edu/l-dw-linuxuml-i.htmlhttp://www.rstack.org/oudot/20022003/7/7_rapport.pdfhttp://user-mode-linux.sourceforge.net/ -
7/22/2019 Driver Linux PDF
102/191
102 interne Groupe France Tlcom
http://www.linuxjournal.com/article/6516http://web.yl.is.s.u-tokyo.ac.jp/~tosh/kml/http://web.yl.is.s.u-tokyo.ac.jp/~tosh/kml/tosh_master_kml_e.pshttp://en.wikipedia.org/wiki/Linux_kernelhttp://www.ibiblio.org/pub/Linux/docs/HOWTO/translations/fr/pdf/Kernel-HOWTO.pdf
Tout comme pour UML, cela ncessite de patcher le noyau et d'activer la fonctionnalit lors de laCompilation du noyau.
Les architectures supportes sont : IA-32 et AMD64.
Actuellement, les binaires ne peuvent pas modifier les registres suivants : CS, DS, SS or FS.
Ce systme peut tre cependant intressant de faon diminuer la latence :
Latency of System Calls (Unit: CPU cycles) :
Original Linux (using sysenter) Kernel Mode LinuxGetpid 432 12Gettimeofday 820 404
Mthodologie 3 : simulation via un simulateurPlusieurs architectures existent : QEMU, VMWARE, BOCHS, VirtualBox et bien d'autres permettent degnrer une Image bootable permettant d'avoir un systme d'exploitation l'intrieur d'un autre. C'est uneautre forme de virtualisation qui peut garantir une scurit au niveau du systme en cours dedveloppement.
http://www.linuxjournal.com/article/6516http://web.yl.is.s.u-tokyo.ac.jp/~tosh/kml/http://web.yl.is.s.u-tokyo.ac.jp/~tosh/kml/tosh_master_kml_e.pshttp://en.wikipedia.org/wiki/Linux_kernelhttp://www.ibiblio.org/pub/Linux/docs/HOWTO/translations/fr/pdf/Kernel-HOWTO.pdfhttp://www.ibiblio.org/pub/Linux/docs/HOWTO/translations/fr/pdf/Kernel-HOWTO.pdfhttp://en.wikipedia.org/wiki/Linux_kernelhttp://web.yl.is.s.u-tokyo.ac.jp/~tosh/kml/tosh_master_kml_e.pshttp://web.yl.is.s.u-tokyo.ac.jp/~tosh/kml/http://www.linuxjournal.com/article/6516 -
7/22/2019 Driver Linux PDF
103/191
103 interne Groupe France Tlcom
Avantages : Trs pratique pour des dveloppment sur le
noyau mme. Pas besoin de patcher le noyau comme avec
UML.
Inconvnients : Dpend de la puissance de la machine hte. Peut ncessiter de rgnrer l'image chaque
fois que l'on souhaite la tester.
# Cration du rootfsmkdir iso
# Cration de l'image ISO
mkisofs -o rootfs-dev.iso -J -R ./iso
# Cela peut tre une recopie d'un mdia
dd if=/dev/dvd of=dvd.iso # for dvd
dd if=/dev/cdrom of=cd.iso # for cdromdd if=/dev/scd0 of=cd.iso # if cdrom is scsi
# Simulation
qemu -boot d -cdrom ./rootfs-dev.iso
# Montage
sudo modprobe loop
sudo mount -o loop rootfs-dev.iso /mnt/disk
# Dmontage
sudo umount mnt/disk
http://fabrice.bellard.free.fr/qemu/http://www.vmware.com/fr/
http://www.virtualbox.org/http://packages.debian.org/mkinitrd-cdhttp://packages.debian.org/sid/mkinitrd-cdhttp://www.mayrhofer.eu.org/mkinitrd-cdhttp://bochs.sourceforge.net/
Mthodologie 4 : via un second systmeDe loin la technique la plus adapte car permet de dvelopper au coeur du noyau ou bien des modulescomplexes.
Cette technique est de plus adapte pour un ussage embarqu.
http://www.mayrhofer.eu.org/mkinitrd-cdhttp://fabrice.bellard.free.fr/qemu/http://www.vmware.com/fr/http://www.virtualbox.org/http://www.mayrhofer.eu.org/mkinitrd-cdhttp://www.mayrhofer.eu.org/mkinitrd-cdhttp://bochs.sourceforge.net/http://bochs.sourceforge.net/http://www.mayrhofer.eu.org/mkinitrd-cdhttp://www.mayrhofer.eu.org/mkinitrd-cdhttp://www.virtualbox.org/http://www.vmware.com/fr/http://fabrice.bellard.free.fr/qemu/ -
7/22/2019 Driver Linux PDF
104/191
104 interne Groupe France Tlcom
Avantages : Trs pratique pour des dveloppement sur le noyau mme. Permet de dbuguer (via le patch kdb et l'utilitaire kgdb) via la liaison
srie ou le rseau le noyau courant du second systme en pouvantposer un point d'arrt.
Inconvnients : Ncessite de disposer d'une seconde machine.
Liaison
srie Liaison
ethernet
Poste servant
aux dveloppements
http://kgdb.linsyssoft.com/
http://www.mulix.org/lectures/kernel_oopsing/kernel_oopsing.pdfhttp://www.alcove.com/IMG/pdf/kernel_debugging.pdfhttp://www.ibm.com/developerworks/linux/library/l-kdbug/http://www.ibm.com/developerworks/linux/library/l-debug/
Activation de KDB sur le systme de dev : echo "1" >/proc/sys/kernel/kdb
seconde plateformede dveloppement
En remplacement d'un port srie de dbugSur la plate-forme de dveloppement:
Pas de problme. Vous pouvez utiliser un convertisseurUSB srie. Bien support par Linux. Ce priphrique
http://kgdb.linsyssoft.com/http://www.mulix.org/lectures/kernel_oopsing/kernel_oopsing.pdfhttp://www.alcove.com/IMG/pdf/kernel_debugging.pdfhttp://www.ibm.com/developerworks/linux/library/l-kdbug/http://www.ibm.com/developerworks/linux/library/l-debug/http://www.ibm.com/developerworks/linux/library/l-debug/http://www.ibm.com/developerworks/linux/library/l-kdbug/http://www.alcove.com/IMG/pdf/kernel_debugging.pdfhttp://www.mulix.org/lectures/kernel_oopsing/kernel_oopsing.pdfhttp://kgdb.linsyssoft.com/ -
7/22/2019 Driver Linux PDF
105/191
105 interne Groupe France Tlcom
apparat en tant que /dev/ttyUSB0.Sur la cible:
Vrifiez si vous avez un port IrDA. C'est aussi un port srie.
Si vous avez une interface Ethernet, essayez de l'utiliser.
Vous pouvez aussi connecter en JTAG directement les brochessrie du processeur (vrifiez d'abord les spcificationslectriques!)
http://www.jtag.com/?gclid=CJrAjLLT7pICFQgNuwodQBgD4whttp://www.linux-mips.org/wiki/JTAGhttp://www.coreboot.org/JTAG/BSDL_Guidehttp://www.intel.com/design/flcomp/applnots/29218602.PDFhttp://packages.debian.org/testing/embedded/openwince-jtag
http://wiki.openwrt.org/OpenWrtDocs/Customizing/Hardware/JTAG_Cablehttp://irda.sourceforge.net/http://www.ibiblio.org/pub/Linux/docs/howto/translations/fr/pdf/Infrared-HOWTO.pdfhttp://www.hpl.hp.com/personal/Jean_Tourrilhes/IrDA/http://www.linux-usb.org/
5 DEVELOPPEMENT DANS LE NOYAU
-
7/22/2019 Driver Linux PDF
106/191
Projet Open STB / Orange Labs - R&D Prsentation du dveloppement noyau sous GNULinux
interne Groupe France Tlcom
Structure de l'arborescence des sources du noyauLinux
Ajout d'un nouveau rpertoire dans le noyau
Signaler un bogue
Dveloppement de modules
Kthreads : pthread versus kernel
Synchronisation
Debugging
Structure des sources Linux
arch/ Code dpendant de l'architectureCOPYING Conditions de copie de Linux (GNU GPL)
-
7/22/2019 Driver Linux PDF
107/191
107 interne Groupe France Tlcom
p ( )
CREDITS Contributeurs principaux de Linuxcrypto/ Bibliothques de cryptographieDocumentation/ Documentation du noyau. A ne pasoublier!drivers/ Pilotes de priphriques (drivers/usb/,
etc.)fs/ Systmes de fichier (fs/ext3/, etc.)include/ Enttes du noyauinclude/asm- Enttes dpendant de l'architectureinclude/linux Enttes du coeur du noyau Linux
init/ Initialisation de Linux (contient main.c)ipc/ Code utilis pour la communication entreprocessus
Structure des sources Linux (suite)
kernel/ Coeur du noyau Linux (trs petit!)lib/ Bibliothques diverses (zlib, crc32...)
-
7/22/2019 Driver Linux PDF
108/191
108 interne Groupe France Tlcom
MAINTAINERS Responsables de parties du noyau. Trsutile !Makefile Makefile principal (dfinit arch et version)mm/ Code de la gestion mmoire (petitgalement !)net/ Support rseau (pas les pilotes)README Introduction et instructions de compilationREPORTING-BUGS Instructions pour le rapport de boguesscripts/ Scripts utiliss en interne ou en externesecurity/ Implmentations du modle de scurit(selinux...)
sound/ Support du son et pilotesusr/ Utilitaires: gen_init_cpio etinitramfs_data.S
Nouveau rpertoire dans le noyau
Pour ajouter un rpertoire openstb_drivers/ aux sources du noyau:
Dplacer le rpertoire openstb_drivers/ l'endroit appropri dans les sources du noyau
-
7/22/2019 Driver Linux PDF
109/191
109 interne Groupe France Tlcom
Crer un fichier openstb_driver/Kconfig Crer un fichier openstb_driver/Makefile bas sur les variables Kconfig
Dans le fichier Kconfig du rpertoire parent, ajouter:source openstb_driver/Kconfig
Dans le fichier Makefile du rpertoire parent, ajouter:obj-$(CONFIG_OPENSTB) += openstb_driver/ (juste 1 condition)orobj-y += openstb_driver/ (plusieurs conditions)
Lancer make xconfig et utiliser vos nouvelles options !
Lancer make et vos nouveaux fichiers sont compils !
Regardez Documentation/kbuild/*.txt pour plus de dtails
Signaler des bogues dans le noyau Linux
Premirement, assurez vous d'utiliser la dernire version
Assurez vous d'avoir creus le problme autant que possible: voir
-
7/22/2019 Driver L