SlideShare une entreprise Scribd logo
1  sur  191
Développement noyau, drivers sous GNU Linux Thierry GAYET (ALTEN) – 10/2007 – v1.0 – OSP 006 – Creative Common [email_address]
PLAN ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
1 - INTRODUCTION ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Histoire de Linux ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],Linux : premier contact Premier post effectué par Linux Torvald sur le forum  Usenet  (newsgroup) :
Organisation du développement du noyau Linux ,[object Object],Andrew MORTON adjoint au projet, le numéro 2 Alan COX responsable de la partie réseau. Russell KING responsable de l'architecture ARM. Andi KLEEN responsable de l'architecture x86-64. etc … David Miller
L'équipe des développeur au complet " Un travail de longue durée par une équipe de Geeks / Nerds / professionnels passionnés. "
Les développeurs du noyau GNU Linux officiels
Gestion et organisation du projet Linux ,[object Object],[object Object],Organisation de la gestion du Projet GNU Linux à partir de Linus Torvald.
Cycle de développement
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 Linux est un projet en continuelle évolution…
Le processus de développement ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Le processus de développement ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Quelques branches de développements ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Portabilité ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Nouveautés du noyau 2.6 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Etat des versions des noyau GNU Linux ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],http://www.linux-foundation.org/publications/linuxkerneldevelopment.php Arbre des versions
Evolutions des versions ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Numérotation des versions du noyau Linux ,[object Object],Z : identifie de manière unique la   version.  ,[object Object],[object Object],[object Object],[object Object],[object Object],Exemples : 2.0.40 : version 2.0 stable  2.3.74 : version 2.3 de développement 1.0.XX : version stable 1.1.XX : version de dev. 1.2.XX : version stable 1.3.XX : version de dev Etc… Branche stable Branche de dev 1.2.XX 1.3.XX 1.4.XX
Caractéristiques principales de Linux ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
A propos des logiciels libres ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],   http://www.gnu.org/philosophy/free-sw.html " Free software is a matter of liberty, not price. To understand the concept, you should  think 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)‏ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Contraintes de licence sur le noyau Linux ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
2 - CONSTRUCTION D'UN NOYAU ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Phase 0 : Paquets nécessaires pour la compilation ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PHASE 1 : récupération d'une copie des sources officiels ,[object Object],[object Object],A noter que ce serveur est accessible par divers protocoles : FTP  ftp://ftp.kernel.org/pub  HTTP  http://ftp.kernel.org/pub  NFS  ftp.kernel.org:/pub  SMB/CIFS  ftp.kernel.orgub   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 récupérés depuis les serveurs de paquets officiels : Mandriva    : urpmi kernel-headers kernel-source  Fedora  : yum install kernel-source  Debian  : 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.tgz Gentoo  : emerge gentoo-sources
Phase 2 : vérification de l'intégrité des sources ,[object Object],[object Object],[object Object],% 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 &quot;Linux Kernel Archives Verification Key <ftpadmin@kernel.org>&quot; gpg --verify linux-2.6.7.tar.bz2.sign linux-2.6.7.tar.bz2  ,[object Object],[object Object]
Phase 3 : application des patchs (si nécessaire)‏ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object], La commande diff effectuant un différentiel entre un ou plusieurs fichiers (récursif), les  patchs doivent être regénérés pour chaque version de kernel du fait de l'évolution du code source du noyau Linux.
Exemple d'application d'un patch ,[object Object],[object Object],[object Object],[object Object],[object Object],-p nombre  : enleve le plus petit préfixe contenant  nombre  slashs de la tête de chaque nom de fichier trouvé dans le fichier patch. Une séquence d'un ou de plusieurs slashs adjacents compte pour un slash unique. Cela contrôle la façon dont les  noms trouvés dans le fichier patch sont traités, au cas où vous conserveriez vos fichiers dans un répertoire différent 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       Spécifier  -p0  donne le nom de fichier entier non modifié,  -p1  donne :  u/howard/src/blurfl/blurfl.c     Sans le slash de tête,  -p4  donne :  blurfl/blurfl.c   Ne pas spécifier de  -p  du tout vous donne  blurfl.c . Ce que vous obtenez finalement est recherché soit dans le répertoire courant, soit dans le répertoire spécifié par l'option  -d .
Création d'un patch noyau ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Etape 4 : définition la configuration du noyau ,[object Object],[object Object],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, compilées à partir des même sources,  utilisez la variable EXTRAVERSION: VERSION  = 2 PATCHLEVEL  = 6 SUBLEVEL  = 7 EXTRAVERSION = -openstb (uname -r retournera: 2.6.7-openstb )‏ ,[object Object],[object Object],[object Object],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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],   make config  : mode texte, ou on choisit une à une toutes les options (c'est à dire des centaines !), sans possibilité de retour arrière.  Très fastidieux. Déconseillé.
Configuration en mode graphique ,[object Object],[object Object],[object Object],[object Object],   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 les bibliothèques graphiques de gnome.
Sections des options du noyau ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Positionner les options ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Connaître son matériel ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Phase 5 : compilation et installation du noyau ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Optimisation de la phase de compilation ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Fichiers générés après un make ,[object Object],[object Object],[object Object],[object Object],Si la compilation se passe sans problème, les fichiers suivant sont générés :  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 installés après un make install + make module_install ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Exemple de fichier de mapping des symboles des primitives du noyau
Démarrage d'un système GNU Linux Quand le système démarre (boot ou reboot), le CPU invoque le vecteur de reset de façon à récupérer l'adresse d'un programme localisé à exécuter   Pour un système traditionel, cet emplacement est localisé dans le B.I.O.S. de la carte mère.  Quand un device bootable est trouvé, la première étape consiste en un chargement du boot loader en RAM (MBR).  Le boot loader doit être d'une taille inférieure ou égale à 512 octets (un seul secteur) et son rôle est de charger en RAM puis d'exécuter la seconde étape (GRUB, LILO, …)‏
Démarrage d'un système GNU Linux La seconde étape peut afficher un écran de boot (splashscreen) et  crée une zone de mémoire (RAMFS) pour charger le rootfs  temporaire depuis l'image Initrd.  Une fois cette seconde étape de lancée,  charge le noyau linux en mémoire vive puis invoque ce dernier.  Par le suite il y a commutation entre le rootfs temporaire et celui qui sera utilisé par la suite (réellement). Après que le noyau soit chargé et initialisé, le noyau démarre en premier la première application de l'espace utilisateur via la libc (/sbin/init) en suivant le numéro défini dans /etc/inittab.  Dans Ubuntu, /sbin/init est remplacé par upstart : http://upstart.ubuntu.com/
Détail de la phase de démarrage ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],$ ps axfl  UID PID PPID STAT TTY TIME COMMAND 0 1 0 S ? 0:03 init
Quelques chargeurs de démarrage ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ligne de commande du noyau ,[object Object],[object Object],[object Object],Paramètres les plus utilisés : ,[object Object],[object Object],[object Object],[object Object],[object Object]
Initrd ( init ial  R AM  D isk)‏ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Exemple de création 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/initrd gzip --best -c initrd.img > initrd    http://www.ibm.com/developerworks/linux/library/l-initrd.html
3 – ARCHITECTURE DU NOYAU ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Vue simplifiée d'un diagramme matriciel du noyau GNU Linux  
Vue modulaire du noyau GNU Linux  
Linux possède plusieurs hypergraphes tel que celui-ci ou bien celui représentant les dépendances des paquets  quant à l'établissement d'une  distribution conforme LSB (même basique). Vue de l'hypergraphe formé par l'arborescence des sources du noyau 2.4.9   Note : ce schéma n'est pas très lisible mais montre cependant la représentation en oignon (concentrique) du noyau GNU Linux  
Rôle du noyau GNU Linux ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Linux et le temps réel http://uuu.enseirb.fr/~kadionik/embedded/linux_realtime/linux_realtime9.html http://en.wikipedia.org/wiki/RTLinux http://en.wikipedia.org/wiki/RTAI http://en.wikipedia.org/wiki/Wind_River_Systems http://fr.wikipedia.org/wiki/Xenomai http://www.xenomai.org/index.php/Main_Page http://fr.wikipedia.org/wiki/Xenomai Le noyau Linux n'étant pas Temps réel en natif il est Cependant possible de le Compléter d'un micro-kernel Temps réel où linux est exécuté Comme sous UML, c'est-à-dire sous la forme d'un process  
Découpage du noyau Linux ,[object Object],[object Object],Espace utilisateur Matériel
VFS  - Virtual File System
VFS : Virtual File System Linux n'étant pas monolithique c'est-à-dire qu'il est constitué d'un ensemble de parties comme la pile réseau, la gestion de la mémoire, etc… Bref VFS est la couche d'abstraction de haut niveau intra-kernel regroupant un ensemble de primitives génériques comme open, close, read, write (au nom près). S'il s'agit d'écrire un fichier (une fifo ou autre) sur un disque, hé bien l'implémentation dans le kernel sera la même qu'il s'agisse d'un disque avec un système de fichier cramfs, jffs2 ou 3, ext2 ou 3, reizerfs, etc… VFS est la couche virtuelle qui permet de niveler les appels d'un point de vue noyau ou drivers en se souciant pas du système de fichiers réellement utilisé. En plus de l'API offerte, VFS est un dispatcher sous cette couche, il y a un module spécifique à chaque système de fichiers  
Opérations sur les fichiers ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],   http://www.ibm.com/developerworks/linux/library/l-linux-filesystem/
Opérations sur les fichiers‏ ,[object Object],[object Object],[object Object],[object Object],LFH :  http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/Linux-Filesystem-Hierarchy.pdf
La structure « file » ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Table des systèmes de fichiers courants
Fuse : un système de fichier en espace utilisateur ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object], http://fuse.sourceforge.net/  http://fuse.sourceforge.net/wiki/index.php/FileSystems
PM (Process Management)
PM : Process Management  ,[object Object],PRET STOPPE EN EXECUTION SUSPENDU ZOMBIE Création Signal Signal Fin d'entrée/ sortie Entrée/ Sortie Terminaison Ordonnancement
Le scheduler CFS (depuis 2.6.23) ,[object Object],[object Object],[object Object],http://kerneltrap.org/node/8059 http://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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Se réveiller ! ,[object Object],[object Object],[object Object]
MM (Memory Management)
Organisation de la mémoire 0 GB 1 GB Mémoire virtuelle Mémoire physique    Il est possible d'étendre l'utilisation de la mémoire au dela des 4 Go Via l'utilisation de la mémoire haute (ZONE_HIGHMEM). ZONE_NORMAL : KERNEL PHYSICAL SPACE KERNEL VIRTUAL SPACE USER VIRTUAL SPACE 0 GB 3 GB 4 GB http://www.informit.com/content/images/0131453483/downloads/gorman_book.pdf
Modes adressage et conversions ,[object Object],[object Object],[object Object],Conversions  d'adressage successif.
kmalloc et kfree ,[object Object],[object Object],[object Object],[object Object]
Propriétés de kmalloc ,[object Object],[object Object],[object Object],[object Object]
Options pour kmalloc ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Flags pour kmalloc ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Allocation par pages ,[object Object],[object Object],[object Object],[object Object],Libérer des pages ,[object Object],[object Object]
Mapper des adresses physiques ,[object Object],[object Object],[object Object],[object Object],[object Object]
Utilitaires pour la mémoire ,[object Object],[object Object],[object Object]
Choisir un intervalle d'E/S ,[object Object],[object Object]
Différences avec la mémoire standard ,[object Object],[object Object],[object Object]
Eviter les problèmes d'accès aux E/S ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mémoire mappée directement ,[object Object],[object Object],[object Object]
Mapper la mémoire d'E/S en mémoire virtuelle ,[object Object],[object Object],[object Object],[object Object]
mmap ,[object Object],[object Object],[object Object]
Zones de Mémoire Virtuelle ,[object Object],[object Object]
Zones de Mémoire Virtuelle ,[object Object],[object Object]
mmap simple ,[object Object],[object Object],[object Object],[object Object],[object Object]
Gestion des entrées/sorties
Demander des ports d'E/S ,[object Object],[object Object],[object Object],/proc/ioports  example 0000-001f : dma1 0020-0021 : pic1 0040-0043 : timer0 0050-0053 : timer1 0060-006f : keyboard 0070-0077 : rtc 0080-008f : dma page reg 00a0-00a1 : pic2 00c0-00df : dma2 00f0-00ff : fpu 0100-013f : pcmcia_socket0 0170-0177 : ide1 01f0-01f7 : ide0 0376-0376 : ide1 0378-037a : parport0 03c0-03df : vga+ 03f6-03f6 : ide0 03f8-03ff : serial 0800-087f : 0000:00:1f.0 0800-0803 : PM1a_EVT_BLK 0804-0805 : PM1a_CNT_BLK 0808-080b : PM_TMR 0820-0820 : PM2_CNT_BLK 0828-082f : GPE0_BLK ...
Lire / écrire sur les ports d'E/S ,[object Object],[object Object],[object Object],[object Object]
Lire / écrire une chaîne sur les ports d'E/S ,[object Object],[object Object],[object Object],[object Object]
Demander de la mémoire d'E/S ,[object Object],[object Object],[object Object],/proc/iomem   00000000-0009efff : System RAM 0009f000-0009ffff : reserved 000a0000-000bffff : Video RAM area 000c0000-000cffff : Video ROM 000f0000-000fffff : System ROM 00100000-3ffadfff : System RAM 00100000-0030afff : Kernel code 0030b000-003b4bff : Kernel data 3ffae000-3fffffff : reserved 40000000-400003ff : 0000:00:1f.1 40001000-40001fff : 0000:02:01.0 40001000-40001fff : yenta_socket 40002000-40002fff : 0000:02:01.1 40002000-40002fff : yenta_socket 40400000-407fffff : PCI CardBus #03 40800000-40bfffff : PCI CardBus #03 40c00000-40ffffff : PCI CardBus #07 41000000-413fffff : PCI CardBus #07 a0000000-a0000fff : pcmcia_socket0 a0001000-a0001fff : pcmcia_socket1 e0000000-e7ffffff : 0000:00:00.0 e8000000-efffffff : PCI Bus #01 e8000000-efffffff : 0000:01:00.0 ...
NS (Network Stack)
Pile réseau La pile réseau s'interface avec le module VFS et le  Process Manager      Pour plus d'information sur la pile réseau, veuillez vous reportez au document &quot;Etude détaillé de la pile réseau sous Linux&quot;.
SCI (System Call Interface)
API des primitives système ,[object Object],[object Object]
4 – METHODOLOGIES DE DEVELOPPEMENT ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Pourquoi une méthodologie ? Un kernel panic du noyau GNU linux Le noyau GNU Linux est le cœur du système d'exploitation. Travailler directement au cœur du noyau peut le rendre instable et engendrer un KERNEL PANIC, le rendant donc inutilisable   Avant toute installation d'un nouveau noyau Il est conseillé d'en avoir un autre de référence enregistré au niveau du BOOT loader connu pour ne pas poser de problème lors du démarrage. Développer et surtout tester un nouveau noyau Linux s'accompagne souvent d'un Ensemble de méthodes très utiles.
Méthodologie 1: travail en local ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
(Dé)chargement de drivers Exemple de listing des modules chargés :  $  lsmod (…)‏ snd_pcm_oss  40384  0 snd_mixer_oss  16096  2 snd_pcm_oss (…)‏ En résumé : insmod  snd_pcm_oss  : OK insmod  snd_mixer_oss : OK si snd_pcm_oss déjà chargé sinon NOK modprobe snd_pcm_oss   : OK modprobe snd_mixer_oss : OK chargera snd_pcm_oss si pas chargé Le raisonnement est le même pour le déchargement. Seule les commandes changent. rmmod <modulename> remplace insmod et modprobe –r <modulename> remplace modprobe. Modprobe –r, déchargera aussi les autres modules dépendant si non utilisés. modinfo  <modulename> donne les informations sur un module comme l'auteur, sa licence, ses paramètres, etc … sudo depmod  : permet de recréer le cache de la liste des modules (mécanisme similaire à ldconfig). A noter qu'il est possible de rajouter le nom des modules à charger lors d'un boot dans le fichier de  configuration  /etc/modules .    Dans le listing suivant, snd_pcm_oss n'as pas de dépendances mais par contre snd_mixer_oss a  le module snd_pcm_oss comme dépendance ce qui veut dire qu'il est possible de charger le module snd_pcm_oss de façon unitaire et directement alors que le module snd_mixer_oss nécessitera que le  module snd_pcm_oss soit chargé au préalable. Pour info lsmod met en forme les informations générés dans /proc/modules
(Dé)chargement de drivers insmod ou modprobe rmmod ou modprobe -r    Lors du chargement  dynamique d'un module, cela se passe comme pour le chargement d'une librairie dynamique c'est-à-dire que le module est linké au noyau. Les symboles (primitives) du  module sont rajouté et peuvent être utilisés dans d'autres modules ou dans le noyau lui-même.
Méthodologie 2 : travail avec un second noyau via UML ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Noyau GNU Linux courant Diagramme d'une architecture UML http://user-mode-linux.sourceforge.net/ http://www.rstack.org/oudot/20022003/7/7_rapport.pdf http://www.ibm.com/developerworks/edu/l-dw-linuxuml-i.html http://www.metz.supelec.fr/metz/personnel/galtier/PagesPerso/TutorielUML/UML_avec_briques_existantes/index.html Noyau expérimental ESPACE UTILISATEUR UML
Kernel Mode Linux (KML)‏ http://www.linuxjournal.com/article/6516 http://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.ps http://en.wikipedia.org/wiki/Linux_kernel http://www.ibiblio.org/pub/Linux/docs/HOWTO/translations/fr/pdf/Kernel-HOWTO.pdf Cette technique réciproque de UML, permet d'exécuter dans le noyau un processus habituellement prévu pour l'espace user. Tout comme pour UML, cela nécessite de patcher le noyau et d'activer la fonctionnalité lors de la Compilation du noyau. Les architectures supportées sont : IA-32 et AMD64. Actuellement, les binaires ne peuvent pas modifier les registres suivants : CS, DS, SS or FS.  Ce système peut être cependant intéressant de façon à diminuer la latence : Latency of System Calls (Unit: CPU cycles) : Original Linux (using sysenter) Kernel Mode Linux Getpid 432   12 Gettimeofday 820   404
Méthodologie 3 : simulation via un simulateur ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],# Création du rootfs mkdir iso  # Création de l'image ISO mkisofs -o rootfs-dev.iso -J -R ./iso # Cela peut être une recopie d'un média  dd if=/dev/dvd of=dvd.iso # for dvd dd if=/dev/cdrom of=cd.iso # for cdrom dd 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 # Démontage 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-cd http://www.mayrhofer.eu.org/mkinitrd-cd http://bochs.sourceforge.net/
Méthodologie 4 : via un second système ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Liaison série Liaison ethernet Poste servant aux développements http://kgdb.linsyssoft.com/ http://www.mulix.org/lectures/kernel_oopsing/kernel_oopsing.pdf http://www.alcove.com/IMG/pdf/kernel_debugging.pdf http://www.ibm.com/developerworks/linux/library/l-kdbug/ http://www.ibm.com/developerworks/linux/library/l-debug/ Activation de KDB sur le système de dev :  echo &quot;1&quot; >/proc/sys/kernel/kdb   seconde plateforme de développement
En remplacement d'un port série de débug ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],http://www.jtag.com/?gclid=CJrAjLLT7pICFQgNuwodQBgD4w http://www.linux-mips.org/wiki/JTAG http://www.coreboot.org/JTAG/BSDL_Guide http://www.intel.com/design/flcomp/applnots/29218602.PDF http://packages.debian.org/testing/embedded/openwince-jtag http://wiki.openwrt.org/OpenWrtDocs/Customizing/Hardware/JTAG_Cable http://irda.sourceforge.net/ http://www.ibiblio.org/pub/Linux/docs/howto/translations/fr/pdf/Infrared-HOWTO.pdf http://www.hpl.hp.com/personal/Jean_Tourrilhes/IrDA/ http://www.linux-usb.org/
5 – DEVELOPPEMENT DANS LE NOYAU ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Structure des sources Linux ,[object Object]
Structure des sources Linux (suite) ‏ ,[object Object]
Nouveau répertoire dans le noyau ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Signaler des bogues dans le noyau Linux ,[object Object],[object Object],[object Object],[object Object],[object Object]
Développement de modules noyau ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Type de drivers 1 : pilotes de caractères ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Type de drivers 2 : pilotes de blocs ,[object Object],[object Object],[object Object],[object Object]
Autres types de pilotes ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Exemple de drivers  Exemple de module  affichant l'équivalent d'une commande ifconfig  Dépendance avec d'autres  modules : aucun Chargement :  sudo insmod modnet Déchargement : Sudo insmod modnet
(Suite) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Exemple d'architecture de drivers tty
Exemple de module hello world ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
De/Chargement et exécution du module ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Compiler un module ,[object Object],[object Object],[object Object],[object Object],[object Object],Tabulation (pas d'espaces)‏ Il est à noter que les modules sont seulement compilés et pas linkés. Le linkage s'effectuant lors du chargement du drivers dans le noyau Linux. Anciennement (en 2.4), l'extension des modules étaient .o alors qu'en 2.6 c'est Désormais .ko
Le module hello avec des paramètres ,[object Object],   Second exemple de module avec passage  d'un paramètre. Le détail de ce paramètre apparaitra via la commande modinfo.
Utiliser le module hello_param ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Nombres majeurs et nombres mineurs ,[object Object],[object Object],[object Object],[object Object],Création des fichiers de périphériques ,[object Object],[object Object],[object Object]
Enregistrement des périphériques ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Périphériques enregistrés ,[object Object],[object Object],[object Object]
Trouver un numéro majeur libre ,[object Object],[object Object],[object Object],[object Object],[object Object],module=foo; device=foo insmod $module.ko major=`awk &quot;$2==amp;quot;$moduleamp;quot; {print $1}&quot; /proc/devices` mknod /dev/foo0 c $major 0
La structure «device» ,[object Object],[object Object],[object Object],[object Object],[object Object],Références pour le «Device Model» ,[object Object],[object Object],[object Object],[object Object]
Attributs de périphériques Les attributs du périphériques peuvent être lus/écrits depuis l'espace utilisateur : Exemple : struct device_attribute {   struct attribute  attr;   ssize_t (*show)(struct device * dev, char * buf, size_t count, loff_t off);   ssize_t (*store)(struct device * dev, const char * buf, size_t count, loff_t off); }; #define DEVICE_ATTR(name,mode,show,store)‏ Ajouter / enlever un fichier : int device_create_file(struct device *device, struct device_attribute * entry);
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1
Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1

Contenu connexe

Tendances

Distro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbeddedDistro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbeddedAnne Nicolas
 
DEBUTER SOUS LINUX : GUIDE COMPLET
DEBUTER SOUS LINUX : GUIDE COMPLETDEBUTER SOUS LINUX : GUIDE COMPLET
DEBUTER SOUS LINUX : GUIDE COMPLETTaoufik AIT HSAIN
 
Open Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarquesOpen Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarquesAlexandre LAHAYE
 
service NFS sous linux
 service NFS sous linux service NFS sous linux
service NFS sous linuxSouhaib El
 
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Anne Nicolas
 
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielle
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielleOpen Recipes - Pouquoi le packaging est important pour l'intégration logicielle
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielleAnne Nicolas
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Jean Gabès
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéECAM Brussels Engineering School
 
Administration systeme UNIX
Administration systeme UNIXAdministration systeme UNIX
Administration systeme UNIXwebreaker
 
Concevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto ProjectConcevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto ProjectChristian Charreyre
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Jean-Marc Fontaine
 
lpi 101 notes de cours
lpi 101 notes de courslpi 101 notes de cours
lpi 101 notes de coursISIG
 
09 02 configuration du serveur nfs
09 02 configuration du serveur nfs09 02 configuration du serveur nfs
09 02 configuration du serveur nfsNoël
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linuxKhalid ALLILI
 
Concevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version réviséeConcevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version réviséeChristian Charreyre
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linuxembedded-linux-bdx
 
Cours linux complet
Cours linux completCours linux complet
Cours linux completaubin82
 
Présentation unix linux
Présentation unix linuxPrésentation unix linux
Présentation unix linuxEmmanuel Florac
 

Tendances (20)

Distro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbeddedDistro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbedded
 
DEBUTER SOUS LINUX : GUIDE COMPLET
DEBUTER SOUS LINUX : GUIDE COMPLETDEBUTER SOUS LINUX : GUIDE COMPLET
DEBUTER SOUS LINUX : GUIDE COMPLET
 
Open Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarquesOpen Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarques
 
service NFS sous linux
 service NFS sous linux service NFS sous linux
service NFS sous linux
 
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
 
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielle
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielleOpen Recipes - Pouquoi le packaging est important pour l'intégration logicielle
Open Recipes - Pouquoi le packaging est important pour l'intégration logicielle
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
 
Administration systeme UNIX
Administration systeme UNIXAdministration systeme UNIX
Administration systeme UNIX
 
Concevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto ProjectConcevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto Project
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012
 
lpi 101 notes de cours
lpi 101 notes de courslpi 101 notes de cours
lpi 101 notes de cours
 
Initiation Linux
Initiation LinuxInitiation Linux
Initiation Linux
 
09 02 configuration du serveur nfs
09 02 configuration du serveur nfs09 02 configuration du serveur nfs
09 02 configuration du serveur nfs
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Concevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version réviséeConcevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version révisée
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linux
 
Cours linux complet
Cours linux completCours linux complet
Cours linux complet
 
Noyau
NoyauNoyau
Noyau
 
Présentation unix linux
Présentation unix linuxPrésentation unix linux
Présentation unix linux
 

Similaire à Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1

Les solutions libres pour les systèmes embarqués
Les solutions libres pour les systèmes embarquésLes solutions libres pour les systèmes embarqués
Les solutions libres pour les systèmes embarquésAlexandre LAHAYE
 
Rapport d'installation de Linux Engine X MariaDB PHP5
Rapport d'installation de Linux Engine X MariaDB PHP5Rapport d'installation de Linux Engine X MariaDB PHP5
Rapport d'installation de Linux Engine X MariaDB PHP5Mame Cheikh Ibra Niang
 
Systémes d'exploitation
Systémes d'exploitationSystémes d'exploitation
Systémes d'exploitationSelman Dridi
 
Mac os vs linux
Mac os vs linuxMac os vs linux
Mac os vs linuxomri hajer
 
Lepton : Description succincte
Lepton : Description succincteLepton : Description succincte
Lepton : Description succincteO10ée
 
Etude DéTailléé de la pile réseau sous GNU Linux
Etude DéTailléé de la pile réseau sous GNU LinuxEtude DéTailléé de la pile réseau sous GNU Linux
Etude DéTailléé de la pile réseau sous GNU LinuxThierry Gayet
 
cours-gratuit.com--id-3443.pdf
cours-gratuit.com--id-3443.pdfcours-gratuit.com--id-3443.pdf
cours-gratuit.com--id-3443.pdfSouha Bennani
 
Rapport systéme embarqué busybox
Rapport systéme embarqué busyboxRapport systéme embarqué busybox
Rapport systéme embarqué busyboxAyoub Rouzi
 
Install party
Install partyInstall party
Install partyhastu2
 
Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?pprem
 
Altera nios ii embedded evaluation kit
Altera nios ii embedded evaluation kitAltera nios ii embedded evaluation kit
Altera nios ii embedded evaluation kitWassim Smati
 
Altera nios ii embedded evaluation kit
Altera nios ii embedded evaluation kitAltera nios ii embedded evaluation kit
Altera nios ii embedded evaluation kitWassim Smati
 
Le Système Linux (1992)
Le Système Linux (1992)Le Système Linux (1992)
Le Système Linux (1992)Julien SIMON
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsJohan Moreau
 
Comment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceComment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceChristian Charreyre
 

Similaire à Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1 (20)

Install party
Install partyInstall party
Install party
 
Historique
HistoriqueHistorique
Historique
 
Les solutions libres pour les systèmes embarqués
Les solutions libres pour les systèmes embarquésLes solutions libres pour les systèmes embarqués
Les solutions libres pour les systèmes embarqués
 
Rapport d'installation de Linux Engine X MariaDB PHP5
Rapport d'installation de Linux Engine X MariaDB PHP5Rapport d'installation de Linux Engine X MariaDB PHP5
Rapport d'installation de Linux Engine X MariaDB PHP5
 
Systémes d'exploitation
Systémes d'exploitationSystémes d'exploitation
Systémes d'exploitation
 
Mac os vs linux
Mac os vs linuxMac os vs linux
Mac os vs linux
 
Lepton : Description succincte
Lepton : Description succincteLepton : Description succincte
Lepton : Description succincte
 
Etude DéTailléé de la pile réseau sous GNU Linux
Etude DéTailléé de la pile réseau sous GNU LinuxEtude DéTailléé de la pile réseau sous GNU Linux
Etude DéTailléé de la pile réseau sous GNU Linux
 
cours-gratuit.com--id-3443.pdf
cours-gratuit.com--id-3443.pdfcours-gratuit.com--id-3443.pdf
cours-gratuit.com--id-3443.pdf
 
Rapport systéme embarqué busybox
Rapport systéme embarqué busyboxRapport systéme embarqué busybox
Rapport systéme embarqué busybox
 
Install party
Install partyInstall party
Install party
 
Linux_Cours.ppt
Linux_Cours.pptLinux_Cours.ppt
Linux_Cours.ppt
 
Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?
 
Altera nios ii embedded evaluation kit
Altera nios ii embedded evaluation kitAltera nios ii embedded evaluation kit
Altera nios ii embedded evaluation kit
 
Altera nios ii embedded evaluation kit
Altera nios ii embedded evaluation kitAltera nios ii embedded evaluation kit
Altera nios ii embedded evaluation kit
 
Le Système Linux (1992)
Le Système Linux (1992)Le Système Linux (1992)
Le Système Linux (1992)
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logiciels
 
Cours linux
Cours linuxCours linux
Cours linux
 
Comment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceComment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open Source
 
Pourquoi linux
Pourquoi linuxPourquoi linux
Pourquoi linux
 

Tgosp006dveloppement Noyau Et Driver Sous Gnu Linux 1234984890078859 1

  • 1. Développement noyau, drivers sous GNU Linux Thierry GAYET (ALTEN) – 10/2007 – v1.0 – OSP 006 – Creative Common [email_address]
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7. L'équipe des développeur au complet &quot; Un travail de longue durée par une équipe de Geeks / Nerds / professionnels passionnés. &quot;
  • 8. Les développeurs du noyau GNU Linux officiels
  • 9.
  • 11. Acteurs professionnels du noyau Linux http://www.kernel.org/pub/linux/kernel/people/gregkh/kernel_history/developer_graph-2.6.18.pdf
  • 12. Croissance exponentielle du noyau GNU Linux Linux est un projet en continuelle évolution…
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43. Démarrage d'un système GNU Linux Quand le système démarre (boot ou reboot), le CPU invoque le vecteur de reset de façon à récupérer l'adresse d'un programme localisé à exécuter  Pour un système traditionel, cet emplacement est localisé dans le B.I.O.S. de la carte mère. Quand un device bootable est trouvé, la première étape consiste en un chargement du boot loader en RAM (MBR). Le boot loader doit être d'une taille inférieure ou égale à 512 octets (un seul secteur) et son rôle est de charger en RAM puis d'exécuter la seconde étape (GRUB, LILO, …)‏
  • 44. Démarrage d'un système GNU Linux La seconde étape peut afficher un écran de boot (splashscreen) et crée une zone de mémoire (RAMFS) pour charger le rootfs temporaire depuis l'image Initrd. Une fois cette seconde étape de lancée, charge le noyau linux en mémoire vive puis invoque ce dernier. Par le suite il y a commutation entre le rootfs temporaire et celui qui sera utilisé par la suite (réellement). Après que le noyau soit chargé et initialisé, le noyau démarre en premier la première application de l'espace utilisateur via la libc (/sbin/init) en suivant le numéro défini dans /etc/inittab. Dans Ubuntu, /sbin/init est remplacé par upstart : http://upstart.ubuntu.com/
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50. Vue simplifiée d'un diagramme matriciel du noyau GNU Linux 
  • 51. Vue modulaire du noyau GNU Linux 
  • 52. Linux possède plusieurs hypergraphes tel que celui-ci ou bien celui représentant les dépendances des paquets quant à l'établissement d'une distribution conforme LSB (même basique). Vue de l'hypergraphe formé par l'arborescence des sources du noyau 2.4.9  Note : ce schéma n'est pas très lisible mais montre cependant la représentation en oignon (concentrique) du noyau GNU Linux 
  • 53.
  • 54. Linux et le temps réel http://uuu.enseirb.fr/~kadionik/embedded/linux_realtime/linux_realtime9.html http://en.wikipedia.org/wiki/RTLinux http://en.wikipedia.org/wiki/RTAI http://en.wikipedia.org/wiki/Wind_River_Systems http://fr.wikipedia.org/wiki/Xenomai http://www.xenomai.org/index.php/Main_Page http://fr.wikipedia.org/wiki/Xenomai Le noyau Linux n'étant pas Temps réel en natif il est Cependant possible de le Compléter d'un micro-kernel Temps réel où linux est exécuté Comme sous UML, c'est-à-dire sous la forme d'un process 
  • 55.
  • 56. VFS - Virtual File System
  • 57. VFS : Virtual File System Linux n'étant pas monolithique c'est-à-dire qu'il est constitué d'un ensemble de parties comme la pile réseau, la gestion de la mémoire, etc… Bref VFS est la couche d'abstraction de haut niveau intra-kernel regroupant un ensemble de primitives génériques comme open, close, read, write (au nom près). S'il s'agit d'écrire un fichier (une fifo ou autre) sur un disque, hé bien l'implémentation dans le kernel sera la même qu'il s'agisse d'un disque avec un système de fichier cramfs, jffs2 ou 3, ext2 ou 3, reizerfs, etc… VFS est la couche virtuelle qui permet de niveler les appels d'un point de vue noyau ou drivers en se souciant pas du système de fichiers réellement utilisé. En plus de l'API offerte, VFS est un dispatcher sous cette couche, il y a un module spécifique à chaque système de fichiers 
  • 58.
  • 59.
  • 60.
  • 61. Table des systèmes de fichiers courants
  • 62.
  • 64.
  • 65.
  • 66.
  • 67.
  • 69. Organisation de la mémoire 0 GB 1 GB Mémoire virtuelle Mémoire physique  Il est possible d'étendre l'utilisation de la mémoire au dela des 4 Go Via l'utilisation de la mémoire haute (ZONE_HIGHMEM). ZONE_NORMAL : KERNEL PHYSICAL SPACE KERNEL VIRTUAL SPACE USER VIRTUAL SPACE 0 GB 3 GB 4 GB http://www.informit.com/content/images/0131453483/downloads/gorman_book.pdf
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 88.
  • 89.
  • 90.
  • 91.
  • 93. Pile réseau La pile réseau s'interface avec le module VFS et le Process Manager   Pour plus d'information sur la pile réseau, veuillez vous reportez au document &quot;Etude détaillé de la pile réseau sous Linux&quot;.
  • 94. SCI (System Call Interface)
  • 95.
  • 96.
  • 97. Pourquoi une méthodologie ? Un kernel panic du noyau GNU linux Le noyau GNU Linux est le cœur du système d'exploitation. Travailler directement au cœur du noyau peut le rendre instable et engendrer un KERNEL PANIC, le rendant donc inutilisable  Avant toute installation d'un nouveau noyau Il est conseillé d'en avoir un autre de référence enregistré au niveau du BOOT loader connu pour ne pas poser de problème lors du démarrage. Développer et surtout tester un nouveau noyau Linux s'accompagne souvent d'un Ensemble de méthodes très utiles.
  • 98.
  • 99. (Dé)chargement de drivers Exemple de listing des modules chargés : $ lsmod (…)‏ snd_pcm_oss 40384 0 snd_mixer_oss 16096 2 snd_pcm_oss (…)‏ En résumé : insmod snd_pcm_oss : OK insmod snd_mixer_oss : OK si snd_pcm_oss déjà chargé sinon NOK modprobe snd_pcm_oss : OK modprobe snd_mixer_oss : OK chargera snd_pcm_oss si pas chargé Le raisonnement est le même pour le déchargement. Seule les commandes changent. rmmod <modulename> remplace insmod et modprobe –r <modulename> remplace modprobe. Modprobe –r, déchargera aussi les autres modules dépendant si non utilisés. modinfo <modulename> donne les informations sur un module comme l'auteur, sa licence, ses paramètres, etc … sudo depmod : permet de recréer le cache de la liste des modules (mécanisme similaire à ldconfig). A noter qu'il est possible de rajouter le nom des modules à charger lors d'un boot dans le fichier de configuration /etc/modules .  Dans le listing suivant, snd_pcm_oss n'as pas de dépendances mais par contre snd_mixer_oss a le module snd_pcm_oss comme dépendance ce qui veut dire qu'il est possible de charger le module snd_pcm_oss de façon unitaire et directement alors que le module snd_mixer_oss nécessitera que le module snd_pcm_oss soit chargé au préalable. Pour info lsmod met en forme les informations générés dans /proc/modules
  • 100. (Dé)chargement de drivers insmod ou modprobe rmmod ou modprobe -r  Lors du chargement dynamique d'un module, cela se passe comme pour le chargement d'une librairie dynamique c'est-à-dire que le module est linké au noyau. Les symboles (primitives) du module sont rajouté et peuvent être utilisés dans d'autres modules ou dans le noyau lui-même.
  • 101.
  • 102. Kernel Mode Linux (KML)‏ http://www.linuxjournal.com/article/6516 http://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.ps http://en.wikipedia.org/wiki/Linux_kernel http://www.ibiblio.org/pub/Linux/docs/HOWTO/translations/fr/pdf/Kernel-HOWTO.pdf Cette technique réciproque de UML, permet d'exécuter dans le noyau un processus habituellement prévu pour l'espace user. Tout comme pour UML, cela nécessite de patcher le noyau et d'activer la fonctionnalité lors de la Compilation du noyau. Les architectures supportées sont : IA-32 et AMD64. Actuellement, les binaires ne peuvent pas modifier les registres suivants : CS, DS, SS or FS. Ce système peut être cependant intéressant de façon à diminuer la latence : Latency of System Calls (Unit: CPU cycles) : Original Linux (using sysenter) Kernel Mode Linux Getpid 432 12 Gettimeofday 820 404
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128. Attributs de périphériques Les attributs du périphériques peuvent être lus/écrits depuis l'espace utilisateur : Exemple : struct device_attribute { struct attribute attr; ssize_t (*show)(struct device * dev, char * buf, size_t count, loff_t off); ssize_t (*store)(struct device * dev, const char * buf, size_t count, loff_t off); }; #define DEVICE_ATTR(name,mode,show,store)‏ Ajouter / enlever un fichier : int device_create_file(struct device *device, struct device_attribute * entry);