Pilotes matériels sous Linux : mode noyau versus mode utilisateur



Documents pareils
Programmation de l'api Video for Linux

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

L informatique en BCPST

Lutter contre les virus et les attaques... 15

Temps Réel. Jérôme Pouiller Septembre 2011

PRECAUTIONS DESCRIPTION DU PRODUIT

Ladibug TM Document Camera Manuel de l Utilisateur de Logiciel d image

Introduction à l informatique en BCPST

Analyse de sécurité de logiciels système par typage statique

Français Table des Matières

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Introduction au langage C

ACTIVITÉ DE PROGRAMMATION

as Architecture des Systèmes d Information

Programmation défensive

Downgrade Windows 7 FAQ. 8 mars 2013

IV- Comment fonctionne un ordinateur?

1. Systèmes d entrée/sortie 2. Systèmes de fichiers 3. Structure de mémoire de masse (disques)

Playing with ptrace() for fun and profit

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

Notice de fonctionnement DVR H Méthode de Visionnage ESEENET

Programmation système de commandes en C

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Exécutif temps réel Pierre-Yves Duval (cppm)

Structure d un programme

Programmation système I Les entrées/sorties

MANUEL D UTILISATION DVR

qwertyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyuiopasd fghjklzxcvbnmqwertyuiopasdfghjklzx cvbnmqwertyuiopasdfghjklzxcvbnmq

Foire aux questions sur Christie Brio

Rappels d architecture

Leçon 1 : Les principaux composants d un ordinateur

Service de lettre électronique sécurisée de bpost. Spécificités techniques

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

CI 1 PROBLEME : Quelles sont les fonctions et les caractéristiques d un environnement informatique?

Architecture des ordinateurs

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Modélisation des interfaces matériel/logiciel

Chapitre 2 : Abstraction et Virtualisation

Démontage d'un ordinateur

Fonction Memory Viewer

Construction et sécurisation d'un système Linux embarqué. Frédéric AIME

Ladibug TM 2.0 Logiciel de présentation visuel d'image Manuel de l utilisateur - Français

Ordinateurs, Structure et Applications

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

2. Pour accéder au Prêt numérique, écrivez dans la barre d adresse de votre navigateur Web.

ANNEXE. PROGRAMME DES FORMATIONS DISPENSÉES AU CLUB MONTALEAU (ANNÉE 2014/2015)

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

1. En moyenne, un ordinateur sans protection connecté à Internet est infecté après... quelques minutes heures 3 jours plus d une semaine

Java Licence Professionnelle CISII,

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

(1) XDCAM Browser

Derrière toi Une machine virtuelle!

Java - la plateforme

Une introduction à Java

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Initiation. àl algorithmique et à la programmation. en C

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Sommaire. Leap motion Technologie Fonctionnement Langages utilisés Possibilités d utilisation... 4

Windows XP niveau 2. D. Hourquin, Médiapôle St Ouen l'aumône

Sur un ordinateur portable ou un All-in-One tactile, la plupart des éléments mentionnés précédemment sont regroupés. 10) 11)

I00 Éléments d architecture

Utilisation du visualiseur Avermedia

Découverte de l ordinateur. Partie matérielle

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

Note Technique : Sauvegarder un NAS ND16000 ou ND26000 sur un disque dur externe USB ou esata

FICHE PRODUIT PRELIMINAIRE

Prise en main. Prise en main - 0

Manuel d administration de Virtual Box MANUEL D UTILISATION VIRTUAL BOX

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

ndv access point : Utilisation

Chapitre 1 L interface de Windows 7 9

LA mémoire principale est le lieu où se trouvent les programmes et les

Machine virtuelle Java pour Palm TX

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Machines Virtuelles. et bazard autour. Rémi Forax

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

Problèmes liés à la concurrence

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Sébastien Geiger IPHC Strasbourg

et dépannage de PC Configuration Sophie Lange Guide de formation avec exercices pratiques Préparation à la certification A+

LOGICIEL DE SURVEILLANCE NUUO NOTICE

Lexique informatique. De l ordinateur :

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

1. Insérez le DVD de support dans le lecteur optique. L onglet Drivers (Pilotes) apparaîtra si l Exécution automatique est activée.

Fiche technique rue de Londres Paris Tél. : Mail : contact@omnikles.com

IFT Systèmes d exploitation - TP n 1-20%

Guide d installation des pilotes MF

Un ordinateur, c est quoi?

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Plan du cours. Historique du langage Nouveautés de Java 7

Création d un service web avec NetBeans 5.5 et SJAS 9

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Windows 8 : une petite révolution? 9. Démarrer Windows Accéder au Bureau à la connexion 13. Ouvrir ou activer une nouvelle session 13

Transcription:

1/31 Pilotes matériels sous Linux : mode noyau versus mode utilisateur Stelian Pop <stelian.pop@fr.alcove.com>

Système d exploitation 2/31 Interface entre : ressources matérielles (écran, clavier, carte son) utilisateur (homo sapiens) Composé de couches logicielles : couche applicative (navigateur web, traitement de texte) noyau (exécution des tâches, gestion de la mémoire, implémentation du réseau, accès unifié aux systèmes de fichiers) pilotes matériels Types de pilotes matériels : pilotes noyau (s exécutant dans l espace noyau) pilotes utilisateur (s exécutant dans l espace utilisateur)

Humain 3/31 Couche applicative Couche noyau Couche pilotes matériels Matériel

4/31 Pilotes matériels sous Linux : mode noyau versus mode utilisateur une comparaison pas à pas

Exemples 5/31 Pilotes en mode noyau : répertoire drivers du noyau Linux : http://www.kernel.org Pilotes en mode utilisateur : XFree86 : http://www.xfree86.org cdrecord : http://www.cdrecord.org SANE : http://www.mostang.com/sane sous-système USB du noyau Linux (accepte des requêtes de pilotes prototypés en mode utilisateur) : http://www.linux-usb.org

Interface avec les applications 6/31 Trois types d API : API interne au noyau (définie par un sous-système du noyau : pilote carte son, carte réseau,) API noeud de périphérique (device node) (read/write/mmap/ioctl/ sur /dev/foo) API librairie utilisateur (/usr/lib/libfoo.a) catégories non exclusives le choix d API influence l implémentation

Langage de programmation 7/31 Pilotes en mode noyau : C, un peu d assembleur Pilotes en mode utilisateur : C, C++ Java, Python Perl,

Bibliothèques de routines 8/31 Pilotes en mode noyau : nombre limité : traitement de chaînes, passage de paramètres manquant : accès aux fichiers, fonctions mathématiques Pilotes en mode utilisateur : aucune limite

Déboggage 9/31 Pilotes en mode noyau : bug = corruption, reboot nécessaire uniquement pile d appels déboggueurs additionnels : kgdb http://kgdb.sourceforge.net déboggueur source (extension de gdb) deux machines reliées par câble série kdb http://oss.sgi.com/projects/kdb pas de source (assembleur) une seule machine Pilotes en mode utilisateur : déboggage facile grâce aux outils existants

Accès au périphérique 10/31 Protection importante pour des raisons de sécurité Pilotes en mode noyau : accès complet aux ressources en mode noyau contrôle par : droits sur le noeud de périphérique système de capabilités restriction à root point central permettant de gérer facilement les accès concurrents Pilotes en mode utilisateur : accès au matériel permis uniquement à root suid root = risques de sécurité difficile de gérer la concurrence (sémaphores, mémoire partagée)

Accès aux ports d entrée/sortie 11/31 Pilotes en mode noyau : request region, release region inb, inw, inl outb, outw, outl Pilotes en mode utilisateur : iopl (nécessite droits root) inb, inw, inl outb, outw, outl

Accès aux registres de configuration PCI 12/31 Zone mémoire sur la carte PCI servant à configurer le périphérique, le mettre en veille Pilotes en mode noyau : pci enable device pci resource start pci read config byte pci write config byte Pilotes en mode utilisateur : pciutils : http://atrey.karlin.mff.cuni.cz/ mj/pciutils.html pci fill info pci read byte, pci write byte

Accès à la mémoire du périphérique 13/31 Pour transférer des quantités importantes de données Association à la mémoire du périphérique d une adresse virtuelle adressable par le pilote : remappage. Pilotes en mode noyau : ioremap Pilotes en mode utilisateur : mmap sur /dev/mem

DMA 14/31 Transfert de données entre un périphérique et la mémoire centrale sans l aide du processeur Difficulté : allouer de la mémoire physique contiguë Pilotes en mode noyau : kmalloc get free pages virt to bus Pilotes en mode utilisateur : memalign mlock recherche dans /dev/mem risque de corruption mémoire

Interruptions 15/31 Moyen de communication rapide entre le périphérique et le système Pilotes en mode noyau : request irq handler d interruption Pilotes en mode utilisateur : impossible

16/31 Pilotes matériels sous Linux : mode noyau versus mode utilisateur un exemple réel : le pilote de la caméra MotionEye

Présentation du matériel 17/31 Sony Vaio Picturebook C1VE microprocesseur Crusoe par Transmeta ultra-portable lecteur MemoryStick molette jogdial webcam MotionEye

18/31 Application Sauver les données Mémoire Pilote la caméra Pilote le jogdial Pilote le bouton "capture" Init région mémoire Init params de capture Donées image/video (bitmap ou jpeg) Contrôleur d E/S Sony Puce Motion JPEG Jogdial et boutons (init, événements) Camera on/off Contrôle luminosité, contraste Donnée de trame (images bitmap) Jogdial & Boutons Caméra MotionEye

Pilote en mode utilisateur 19/31 capture, par Andrew Tridgell, http://samba.org/picturebook monolithique (pilote + application) fonctionnalités : afficher le flux vidéo capturer le flux vidéo (non compressé ou MJPEG) capturer une image (non compressée ou JPEG) pilotable par le jogdial et/ou bouton capture défauts : prend le contrôle exclusif des périphériques pas utilisable par d autres applications vidéo possibilité de corruption système (DMA)

20/31 Autre application Application + pilote Sauver les données Noyau Mémoire Matériel Pilote la caméra Pilote le jogdial Pilote le bouton "capture" Donées image/video (bitmap ou jpeg) Init région mémoire Init params de capture Contrôleur d E/S Sony Puce Motion JPEG Jogdial et boutons (init, évenements) Camera on/off Camera luminosité, contraste Données de trame (images bitmap) Jogdial & Boutons Caméra MotionEye

Pilote en mode noyau 21/31 sonypi & meye, http://www.kernel.org outils additionnels à http://www.alcove-labs.org séparation des fonctionnalités en deux pilotes pilote sonypi : accessible par le noeud /dev/sonypi donne les événements du jogdial et des boutons pilote meye : implémente l API video4linux utilisable avec n importe quelle application accède au pilote sonypi API supplémentaire pour le MJPEG

Autre application Application Video4Linux 22/31 Pilote le jogdial Pilote le bouton "capture" règlage luminosité, contraste Sauve les données /dev/sonypi pilote sonypi Noyau Camera on/off, brightness pilote meye /dev/video0 Donées image/video (bitmap ou jpeg) Mémoire Camera on/off Camera luminosité, constraste Jogdial et boutons Init région mémoire Init params de capture Donées image/video (bitmap ou jpeg) Contrôleur d E/S Sony Puce Motion JPEG Jogdial et boutons (init, évenements) Matériel Jogdial & Boutons Camera on/off Camera luminosité, contraste Caméra MotionEye Données de trame (images bitmap)

Changements dans l interface 23/31 Transformation depuis une application en un pilote Fonctionnalités enlevées dans le pilote en mode noyau : affichage des données vidéo sur l écran conversion des données vidéo YUV en données vidéo RGB sauvegarde des images et vidéo sur disque mapping des événements jogdial/boutons en actions applicatives

Changements dans l accès aux registres PCI 24/31 Pilote en mode utilisateur : int fd, bus; DIR *dir; u16 ven, dev; struct dirent *dent; char path[path_max]; for (bus = 0; bus < MAX_BUS; bus++) { sprintf(path,"/proc/bus/pci/%02d", bus); dir = opendir(path); if (!dir) continue; while ((dent = readdir(dir))) { sprintf(path,"/proc/bus/pci/%02d/%s", bus, dent->d_name); fd = open(path, O_RDWR O_SYNC); if (fd == -1) continue; if (pread(fd, &ven, 2, PCI_VENDOR_ID) == 2 && ven == PCI_VENDOR_ID_KAWASAKI && pread(fd, &dev, 2, PCI_DEVICE_ID) == 2 && dev == PCI_DEVICE_ID_MCHIP_KL5A72002) { closedir(dir); return fd; } close(fd); } closedir(dir); } return -1; pread(fd, &v, sizeof(v), REGISTER); pwrite(fd, &v, sizeof(v), REGISTER); Pilote en mode noyau : static struct pci_device_id meye_pci_tbl[] = { { PCI_VENDOR_ID_KAWASAKI, PCI_DEVICE_ID_MCHIP_KL5A72002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, { } }; MODULE_DEVICE_TABLE(pci, meye_pci_tbl); static struct pci_driver meye_driver = { name: "meye", id_table: meye_pci_tbl, probe: meye_probe, remove: meye_remove, } static int init meye_init_module(void) { pci_module_init(&meye_driver); } pci_read_config_dword(pci_dev, REGISTER, &v); pci_write_config_dword(pci_dev, REGISTER, v);

Changements dans l accès à la mémoire PCI 25/31 Pilote en mode utilisateur : void *mchip_base; int fd; u32 mem; pci_config_read_u32(mchip_dev, PCI_BASE_ADDRESS_0, &mem); fd = open("/dev/mem", O_RDWR O_SYNC); mchip_base = mmap(0, REGS_SIZE, PROT_READ PROT_WRITE, MAP_SHARED, fd, mem & (PAGE_SIZE - 1)); if (mem & (PAGE_SIZE-1)) mchip_base += (mem & (PAGE_SIZE-1)); Pilote en mode noyau : unsigned long mchip_adr; unsigned char *mchip_base; mchip_adr = pci_resource_start(mchip_dev,0); mchip_base = ioremap(mchip_adr, REGS_SIZE);

Changements dans l accès DMA Pilote en mode utilisateur : #define TOKEN 0xfeeb0000 int i; void *vmem; u32 ptable[npages]; int fd; off_t addr; fd = open("/dev/mem", O_RDONLY O_SYNC); vmem = memalign(page_size, (npages + 1) * PAGE_SIZE); memset(vmem, 0, npages * PAGE_SIZE); mlock(vmem, npages * PAGE_SIZE); for (i = 0; i < npages; i++) *(u32 *)(vmem + i * PAGE_SIZE) = TOKEN i; for (addr = 0; addr < MAX_MEMORY; addr += PAGE_SIZE) { u32 v; pread(fd, &v, sizeof(v), addr); if ((v & 0xFFFF0000)!= TOKEN) continue; i = (v & 0xFFFF); ptable[i] = addr; } close(fd): Pilote en mode noyau : static void *rvmalloc(signed long size) { void *mem; unsigned long adr, page; mem = vmalloc_32(size); if (mem) { memset(mem, 0, size); adr = (unsigned long)mem; while (size > 0) { page = kvirt_to_pa(adr); mem_map_reserve(virt_to_page( va(page))); adr += PAGE_SIZE; size -= PAGE_SIZE; } } return mem; } int i = 0; void *vmem; u32 ptable[npages]; signed long size; size = npages * PAGE_SIZE; vmem = rvmalloc(size); if (!vmem) return NULL; memset(ptable, 0, sizeof(ptable)); adr = (unsigned long)vmem; while (size > 0) { ptable[i++] = virt_to_bus( va(kvirt_to_pa(adr))); adr += PAGE_SIZE; size -= PAGE_SIZE; } 26/31

Changements dans l attente active 27/31 Pilote en mode utilisateur : while (inb(ioport) & 2) ; Pilote en mode noyau : #define wait_on_command(command) { \ unsigned int n = 10000; \ while (--n && (command)) \ udelay(1); \ if (!n) \ printk(kern_warning "command failed") } wait_on_command(inb_p(ioport) & 2);

Changements dans la gestion des interruptions 28/31 Pilote en mode utilisateur : u8 v1, v2, ov1=0, ov2=1; while (1) { v1 = inb(ioport1); v2 = inb(ioport2); if (v1!= ov1 v2!= ov2) printf("event 0x%02x 0x%02x\n", v1, v2); ov1 = v1; ov2 = v2; } Pilote en mode noyau : void sonypi_irq(int irq, void *dev_id, struct pt_regs *regs) { u8 v1, v2; v1 = inb(ioport1); v2 = inb(ioport2); printk(kern_info "event 0x%02x 0x%02x\n", v1, v2); } request_irq(irq, sonypi_irq, SA_SHIRQ, "sonypi", sonypi_irq);

29/31 Pilotes matériels sous Linux : mode noyau versus mode utilisateur conclusion

Conclusion 30/31 Décision importante lors du design Pas de recette universelle Souvent, une combinaison des deux est la meilleure solution

Liens 31/31 Alcôve http://www.alcove.com Alcôve-Labs http://www.alcove-labs.org