driver linux pdf

Upload: bn-taza

Post on 10-Feb-2018

251 views

Category:

Documents


0 download

TRANSCRIPT

  • 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