Sujet : Plateforme Linux & Combi Instrument. 1 Fvrier 2010 - 3 Juillet 2010 Socit : Technology & Strategy Engineering 4 avenue de la Paix 67000 Strasbourg tablissement : INSA Strasbourg 24 Boulevard de la Victoire 67000 Strasbourg Professeur rfrent : M. Boyer Bertrand Responsable : M. Roth Matthieu tudiant : M. Heinrich Yannick 1. CAHIERS DES CHARGES 1 Cahiers des charges Recherche et tude des diffrentes plate-formes Linux existantes sur le march. Connexion dun cran tactile la plate-forme Linux choisie. Ajout dune connexion CAN la plate-forme. Ralisation ventuelle dune carte regroupant lensemble des composants. Dveloppement du software ncessaire en langage C. Connexion de la plate-forme au systme lve-vitres rtroviseurs de T&S. Archivage des diffrentes versions de SW dans un logiciel de gestion de conguration de type SVN. Possibilit dajout dun chip GPS ou dautres fonctionnalits si le temps restant le permet. 1 Rsum Le stage sest droul au sein du laboratoire de recherche et dveloppement de la socit Technology & Strategy Enginee- ring. Le sujet portait sur la ralisation dune plate-forme dinstrumentation laide dune carte embarque GNU/Linux et un cran AMOLED tactile. Le dveloppement incluait la ralisation du pilote pour le noyau Linux et le dveloppement dun PCB pouvant accueillir lcran et son alimentation. La carte principale provient de la socit ARMADEUS Systems et est articule autour dun processeur Freescale iMX27 avec une architecture ARM9. Lintgration dun noyau Linux de gnration 2.6 et dun shell BusyBox sest ralis avec la suite Buildroot et les sources fournies. La conception du PCB a t ralis sous le logiciel KICAD. Le dveloppement des applicatifs sest bas sur la librairie SDL et a t programmer en C. My training session took place in the research & development laboratory of the Technology & Strategy Engineering society. The subject dealed with the conception of an instrumentation platform with an GNU/Linux embedded board and an AMO- LED touchscreen. The development covered the software part by the conception of a Linux driver and the hardware part by the design of an PCB hosting the screen and its power supply. The main board was bought to the ARMADEUS Systems society and is based on a iMX27 Freescale processor with an ARM9 architecture. The integration of a 2.6 Linux kernel and a Busybox shell was made with the Buildroot toolchain and the source codes provided by the supplyer. The PCB design was made with KICAD. The applications was developed using the SDL library in the C language. 1. CAHIERS DES CHARGES Table des matires 1 Cahiers des charges 1 2 Introduction 3 3 Remerciements 4 4 Prsentation de lentreprise 5 4.1 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.2 Le groupe Technology & Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.3 Quelques chiffres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4.3.1 Particularit de la division Engineering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 5 Prsentation du sujet 7 5.1 Le laboratoire de R & D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5.2 Projet Combi instrument & plateforme linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5.2.1 Cahiers des charges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5.3 Cycle de dveloppement et organisation dans le temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5.4 Outils mis disposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 6 Du processeur au noyau 11 6.1 Rle dun systme dexploitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.2 Adressage mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 6.2.1 Reprsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 6.2.2 Mode rel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 6.2.3 Mode protg et segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 6.2.4 Pagination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 6.2.5 Le mode noyau et le mode utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 6.3 Lancement dun systme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 6.4 Prsentation de GNU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 6.5 Prsentation de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 6.5.1 Dveloppement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 6.6 Un couple gagnant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 6.7 Linux et la mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 6.8 Naviguer dans les sources du Noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 6.9 Les pilotes sous Linux 2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 6.10 Le framebuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 7 Ralisation 23 7.1 Choix de la plateforme GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 7.1.1 Carte retenue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 7.2 Prsentation de larchitecture ARM (32 bits) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 7.3 Composants logiciels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 7.3.1 Sur lordinateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1 1. CAHIERS DES CHARGES 7.3.2 Buildroot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 7.3.3 Sur la carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 7.4 Interfaces avec la carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 7.5 cran AMOLED Tactile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 7.5.1 Interface RGB Parallle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 7.5.2 Interface SPI "3-wire" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 7.5.3 criture du pilote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 7.5.4 Alimentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 7.6 Conception de la carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 7.6.1 Contraintes de routage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 7.6.2 Schma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 7.6.3 Routage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 7.6.4 Soudure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 8 Conclusion 45 A The GNU General Public Licence 51 A.1 Preamble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 A.2 Terms and conditions for copying, distribution and modication . . . . . . . . . . . . . . . . . . . . . . . 51 A.3 Appendix : How to Apply These Terms to Your New Programs . . . . . . . . . . . . . . . . . . . . . . . . 54 B Code sources 56 B.1 Module Noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 B.2 Code dessai SDL - Fractale de MandelBrot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 B.3 Ajout de la librairie CWIID dans buildroot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 B.3.1 libcwiid.mk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 B.3.2 congure_.patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 B.3.3 makele_in.patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 2 2. INTRODUCTION 2 Introduction Le monde de llectronique ne cesse denvahir notre quotidien : rcepteurs GPS dans nos voitures, baladeurs audio et vido de dernires gnrations, appareils photos numriques, robots Wi-[1][2]... un trait dunion relie tout ce petit monde : lunivers des systmes embarqus. Depuis lAGC[3] du programme Apollo lhlicoptre tlcommand de la socit Parot [4], 40 ans se sont couls et ont permis une vritable dmocratisation des systmes intelligents. Ce dploiement fut possible grce lintgration constante des puces lectroniques et lvolution en parallle des concepts et des langages informatiques. On peut sabstenir de coder en assembleur pour grer la pagination et passer des langages haut - niveau comme le Pascal, Ada voire mme C++ pour raliser ses propres noyaux et systmes dexploitation. Larrive doutils libres de droits comme GNU, BSD ou Linux ont offert tous la possibilit de dvelopper des systmes autonomes moindres frais sans scarter des standards de lindustrie. De nombreuses entreprises de diffrents secteur basent leur travail sur ces outils : des lecteurs DVD, des baladeurs, des robots domestiques, des motos, des voitures, des routeurs ... tous ces produits sont susceptibles de contenir un noyau embar- qu du type Linux ou un mini systme GNU. De nos jours, il nest plus ncessaire dtre un gnie de llectronique et de linformatique pour utiliser une camra sur son ordinateur, il suft de disposer du pilote adquat. Mais comment ce pilote est il ralis et comment est il intgrer au coeur du systme dexploitation de nos machines ? Ces deux questions nous amne au sujet de mon projet de n dtude : Comment relier le monde de llectronique et de linformatique au coeur dun systme dexploitation existant ? Jai t amener couvrir de nombreuses thmatiques pour la ralisation de ce projet. Du ct de linformatique embar- que, la recherche partait de la premption au protocole VGA en passant par les nombreux outils de compilation et gestions de dpendances utiliss dans le monde libre. Pour la partie lectronique, jai t confront aux problmes de routage, dali- mentation, de connexion de bus dont les solutions ncessitaient de nombreuses investigations. Cest avec un trs grand intrt que jai men ce projet et cest avec plaisir que je vous prsente le rsultat de mon travail. 3 3. REMERCIEMENTS 3 Remerciements Je voudrais tout dabord remercier lquipe enseignante de lINSA Strasbourg de mavoir transmis le bagage ncessaire la ralisation dun projet comme celui-ci et pour lencadrement de tous les sujets proposs durant cette dernire anne. Je remercie M. Mathieu Roth, responsable du laboratoire R & D, pour son aide, son encadrement et pour lexprience quil a volontirement partage. Je remercie ensuite M. Jrmie Huss, responsable du dpartement Engineering et M. Frdric Bonnet, responsable du d- partement Holding, de la conance et de la libert de travail quils mont accordes pendant tout la dure de mon PFE. Je souhaite remercier M. Pascal Tourenne,M. Pascal Prim et M. Patrice Paulus pour le temps quils mont accord et leur intrt mon sujet. Je voudrais galement saluer M. Thomas Caucigh, Mlle lodie Poulain, M. Alexandre Carrier, M. Vercruysse Pierre-Alain, M. Johan Clauss et M. Loc Bailleau, stagiaires au laboratoire R & D pour leur aide volontaire et leur amiti quils ont exprime pendant ces six mois. Je suis galement reconnaissant du travail ralis notre gard par Mme Sylvia Pradillon lors des cours dAllemand du mardi et du jeudi matin. Je remercie galement tous les employs de TS Engineering, TS Holding, TS Informations Technologies pour leur accueil chaleureux et leur sympathie lors de mon passage au sein du groupe TS. 4 4. PRSENTATION DE LENTREPRISE 4 Prsentation de lentreprise 4.1 Historique Une premire socit,Beratta, avait t fonde par les dirigeants de chacune des entits avant dtre rachete par un des leaders du conseil : le groupe Altran. Prfrant une indpendance nancire et dcisionnelle, ils crent la socit Technology & Strategy en 2008 avec une quipe issue la fois dAltran et de Beratta. La socit retrouve une structure plus "familiale" et sa division en trois parties rpartie au mieux les comptences. La maison mre de la socit se situe sur lavenue de la paix Strasbourg et depuis peu une liale sest cre dans la rgion parisienne. 4.2 Le groupe Technology & Strategy Le nom "Technology & Strategy" regroupe implicitement trois entits distinctes (cf Fig. 1) : Technology & Strategy Engineering centre sur les mtiers de lingnierie des systmes embarqus majoritairement dans le monde des transports (automobile, ferroviaire, aronautique) et aussi le domaine de lnergie. Technology & Strategy Information Technologies focalise sur les technologies de linformation dans les solutions collaboratives sur le Web (organisation de projets, aide la dcision, plate-forme de gestions de contenus). Technology & Strategy Holding qui assure les fonctions de gestions pour les deux autres socits (ressources hu- maines, administration centralise, aspects nanciers et gestion du personnel). FIGURE 1 Le groupe Technology & Strategy 5 4.3. QUELQUES CHIFFRES 4. PRSENTATION DE LENTREPRISE La famille TS compte depuis peu une nouvelle division nomme RheinBrcke Consulting concentre sur le conseil en milieu franco-allemand. Elle recherche des comptences bilingues par approche directe. FIGURE 2 Logos de la socit RheinBrucke Consulting. 4.3 Quelques chiffres Le groupe Technology & Strategy reprsente aujourdhui [5] : plus dune centaine de collaborateurs avec lobjectif de doubler leffectif n 2011. un groupe solide avec 3 entits bien distinctes. une croissance rgulire du nombre de clients depuis 2008. un chiffre daffaire cumul de 6,5 M deuros en 2009. 4.3.1 Particularit de la division Engineering Cette division est une socit sur le Rhin : elle ralise 80% de son activit outre Rhin et travaille pour des grands noms de lindustrie automobile comme lquipementier Bosch ou divers constructeur comme BMW. Lentit engineering est ga- lement la plus grande en termes de cration de valeurs et du nombre de collaborateurs. FIGURE 3 La zone dactivit vue par la socit Elle possde galement un laboratoire de recherche et dveloppement qui permet lentreprise dacqurir des comptences sur des projets dactualits, offrir une vitrine des savoirs faires lentreprise et former ses futurs collaborateurs. 6 5. PRSENTATION DU SUJET 5 Prsentation du sujet 5.1 Le laboratoire de R & D Le laboratoire de la socit comptait 5 projets technologiques et un projet de dtude de march durant le mme laps de temps. Ils sorganisait autour dun thme commun : lautomobile.Ils devaient se rencontrer lors des phases terminales (cf Fig. 4). FIGURE 4 Les projets du laboratoire en 2010 5.2 Projet Combi instrument & plateforme linux Lintitul ofciel du sujet est le suivant : An de continuer son dveloppement dans le secteur des Systmes Embarqus Automobiles, le laboratoire Engineering de T&S souhaite dvelopper un tableau de bord tactile sur une plate-forme Linux embarqu. Outre la possibilit dafcher la vitesse sous diffrentes formes, le combi tactile devra galement permettre denregistrer et de reprsenter diffrentes mesures comme lacclration, la distance de freinage ou le temps au tour dans le cas de me- sures sur circuit. De plus, des fonctions de diagnostique embarques doivent galement tre possible. 5.2.1 Cahiers des charges Le cahier des charges se dcompose comme suit : Recherche et tude des diffrentes plate-formes Linux existantes sur le march. Connexion dun cran tactile la plate-forme Linux choisie. 7 5.3. CYCLE DE DVELOPPEMENT ET ORGANISATION DANS LE TEMPS 5. PRSENTATION DU SUJET Ajout dune connexion CAN la plate-forme. Ralisation ventuelle dune carte regroupant lensemble des composants. Dveloppement du software ncessaire en langage C. Connexion de la plate-forme au systme lve-vitres rtroviseurs de T&S. Archivage des diffrentes versions de SW dans un logiciel de gestion de conguration de type SVN. Possibilit dajout dun chip GPS ou dautres fonctionnalits si le temps restant le permet. 5.3 Cycle de dveloppement et organisation dans le temps Le processus de dveloppement devait suivre le processus du cycle en V : FIGURE 5 Le cycle en V Ce cycle hirarchis minimise la perte de temps et les erreurs de conceptions en n de projet. Dans notre cas, le cahier des charges rpondait largement lanalyse des besoins et la partie spcications correspondait une recherche documentaire. La majeur partie du travail sest situe sur les phases de spcications et de conceptions. Jtais responsable de la planication des tches sur lensemble du stage et de lorganisation de mon temps sur la semaine. De mme, le choix des outils de travail et les orientations techniques relevaient de ma propre responsabilit. Jai pu ainsi mimmerger plus rapidement sur le fond de ma problmatique sans me heurter demble un environnement inconnu. Le projet ncessitait plusieurs travaux distincts en informatique, lectronique et en recherche documentaire. Le travail a t rparti sur les 6 mois de stage laide dun diagramme de Gantt. (cf. pages suivantes) 5.4 Outils mis disposition Mon principal environnement de travail comportait les lments suivants : Station de travail sous environnement GNU/Linux > 2.6. Un dpt subversion sur un serveur de lentreprise accessible en dehors du rseau interne. Une station de soudure, 3 alimentations stabilises, un oscilloscope et un multimtre. Possibilit de commande de composants auprs des entreprises Farnell, Dahms et Radio Spare. Accs internet et IRC. 8 Documentation Ln x SDL Ot Armade s Routage Schmatq e Chox de composants PCB Chox de 'mprme r Envoe So d re Vrcaton de a carte Programmation Liaison SPl<->AMOLED Pilote pour le contrlleur HX5116 Lason SPI Geston des paramtres s ppmentares Cong raton de 'cran dans FrameB her Test et mes res des frq ences Teste s r cran lnterface SDL Heo word Horoge SDL +SDL_ttf Concepton de 'nterface lnterface t Heo Word Ot Fentre avance montrant es paramtres Interface gnrae Lason CAN Rdacton de rapport 2010, Tr 2 2010, Tr 3 fvr. mars avr ma | n | . aot Nom Travail TPE Nom Demarre Termine Travail Duree Latitude Cot Assigne Etat d'avancement (%) 1 Documentation fevr. 1 juil. 30 130j 0 0 1.1 Ln x fvr. 1 | . 30 130| 0 0 1.2 SDL fvr. 1 | . 30 130| 0 0 1.3 Ot fvr. 1 | . 30 130| 0 0 1.4 Armade s fvr. 1 | . 30 130| 0 0 2 Routage fevr. 1 avril 27 62j 68j 0 0 2.1 Schmatq e fvr. 1 mars 3 23| 57| 0 0 2.2 Chox de composants mars 4 mars 8 3| 58| 0 0 2.3 PCB mars 9 avr 8 23| 56| 0 0 2.4 Chox de 'mprme r avr 9 avr 12 2| 58| 0 0 2.5 Envoe avr 13 avr 21 7| 57| 0 0 2.6 So d re avr 22 avr 26 3| 58| 0 0 2.7 Vrcaton de a carte avr 27 avr 27 1| 58| 0 0 3 Programmation fevr. 1 avril 30 65j 65j 0 0 3.1 Liaison SPl<->AMOLED fevr. 1 avril 30 65j 65j 0 0 3.1.1 Pilote pour le contrlleur HX5116 fevr. 1 avril 30 65j 65j 0 0 3.1.1.1 Lason SPI fvr. 1 mars 4 24| 106| 0 0 3.1.1.2 Geston des paramtres s ppmentares avr 28 avr 30 3| 65| 0 0 3.1.2 Cong raton de 'cran dans FrameB her fvr. 1 fvr. 3 3| 127| 0 0 3.1.3 Test et mes res des frq ences fvr. 1 fvr. 2 2| 128| 0 0 3.1.4 Teste s r cran fvr. 1 fvr. 4 4| 126| 0 0 4 lnterface SDL avril 28 mai 11 10j 58j 0 0 4.1 Heo word avr 28 avr 28 1| 57| 0 0 4.2 Horoge SDL +SDL_ttf avr 29 avr 30 2| 56| 0 0 4.3 Concepton de 'nterface ma 3 ma 11 7| 58| 0 0 5 lnterface t fevr. 1 fevr. 11 9j 121j 0 0 5.1 Heo Word Ot fvr. 1 fvr. 1 1| 121| 0 0 5.2 Fentre avance montrant es paramtres fvr. 2 fvr. 2 1| 121| 0 0 5.3 Interface gnrae fvr. 3 fvr. 11 7| 121| 0 0 6 Lason CAN fvr. 1 fvr. 3 3| 127| 0 0 7 Rdacton de rapport fvr. 1 | . 30 130| 0 0 6. DU PROCESSEUR AU NOYAU 6 Du processeur au noyau Cette partie se veut tre une transition avant dentrer techniquement dans le sujet. Elle rsume les notions ncessaires la comprhension de la problmatique et la justication des diffrents choix techniques. Lvolution des architectures de ces puces a faonn les mthodes de conception des systmes dexploitations et des noyaux informatiques concernant les fonctions vitales (gestion de la mmoire, commutation de contexte pour des systmes multi-tches,...). Les diffrences aux niveaux suprieurs ne relvent que de choix stratgiques moins dpendants de llectronique et du processeur (organisation des pilotes de priphriques, systmes de chiers, ...). 6.1 Rle dun systme dexploitation Que ce soit au travail, dans notre voiture ou sur notre tlphone portable, nous sommes tous les jours confronts des systmes dexploitations. Ils ralisent le lien entre lutilisateur et la partie lectronique du systme. FIGURE 6 Rle dun systme dexploitation - Source : wikipdia Son rle est en rgle gnrale de garantir un environnement multi-tches, premptible (il existe des exceptions dans le monde de lembarqu) et stable pour lutilisateur. On peut le dcomposer en diffrents lments : Le noyau : Cest la partie centrale du systme qui fait le lien avec les composants lectroniques. Il est compos de plusieurs sous parties : Lordonnanceur (cf Fig. 7) : Ce composant gre la premption et la partie multi-tches. laide dun algorithme dordonnancement (Round Robin, Dead Monotics Analysis,etc..) il attribut un temps dexcution chaque proces- sus au dtriment de tous les autres. Sa vitesse dexcution donne lillusion que tous les processus fonctionnent en mme temps. La gestion de la mmoire vive/virtuelle (cf Fig. 8) : La mmoire est le second lment le plus important aprs le processeur. Chaque programme y est charg puis excut des adresses bien prcises. Cette partie veille ce que aucun processus nempite sur une zone non permise ou dj utilise. Elle se charge galement de sauvegarder des donnes non utilises en zone dchange si le systme manque de mmoire vive. Ce composant est li un composant matriel le gestionnaire de mmoire virtuelle (MMU en anglais) et nest pas toujours prsent dans certains systmes embarqus. Gestion des pilotes : il offre une architecture et une API pour organiser les pilotes de priphriques. Le systme de chier : il sert organiser les chiers et dossiers sur les disques de masses. Gestion du rseau : permet de grer les protocoles rseau et de communications. Le shell (interface utilisateur) : Il correspond la frontire sur laquelle lutilisateur peut communiquer ses instructions au noyau. Dans les systmes actuels, on naccdent plus directement au shell, une interface graphique se charge de 11 6.1. RLE DUN SYSTME DEXPLOITATION 6. DU PROCESSEUR AU NOYAU FIGURE 7 Lordonnanceur dun noyau - Source : wikipdia FIGURE 8 La gestion de la mmoire au sein dun noyau Source : wikipdia faire la liaison. La conception dun programme de gestion des ressources est intimement lie larchitecture et outils proposs par les processeurs. Les puces des premiers ordinateurs ne proposaient pas de systmes de protection de la mmoire ou des niveaux de privilges. Cest lvolution du matriel qui a permit lapparition de programmes plus stables et qui a trac la voie au dveloppement de systmes dexploitation. Lvolution la plus importante concerne la gestion de la mmoire vive. 12 6.2. ADRESSAGE MMOIRE 6. DU PROCESSEUR AU NOYAU 6.2 Adressage mmoire 6.2.1 Reprsentation La mmoire peut tre souvent reprsente avec par un empilement doctets formant une zone rectangulaire. Chacun de ses octets est adress depuis une origine correspondant lune des extrmits (cf Fig. 9). FIGURE 9 Reprsentation de la mmoire 6.2.2 Mode rel Avec les premiers processeurs, on pouvait adresser au maximum 64 Ko de mmoire. On se servait dadresses de 16 bits pour organiser les programmes dans la mmoire : chaque adresse logique (une adresse manipule par le programmeur et par les registres du processeurs) correspondait une adresse physique (adresse relle dune cellule mmoire dans la RAM). Il fallait allouer la bonne zone chaque variable utilise en se souciant de ne pas grignoter une partie dj occupe. Il faut attendre lapparition des premires puces ddies la gestion de la mmoire (MMU) pour amliorer la stabilit et la puissance des systmes. 6.2.3 Mode protg et segmentation La segmentation est le premier systme de protection mmoire activable ds que le processeur passe en mode protg. On divise la RAM en diffrentes cloisons nommes segments auxquelles on attribut un type (code, segment, pile en lec- ture/criture/excution) et un niveau de privilges. Si on se penche sur la famille x86, on retrouve ds le 386 des registres ddis la navigation dans les segments de code, de pile et de donnes. On se sert dun registre de 16 bits appel slecteur que lon multiplie par 16 pour pointer un segment et dun autre registre appel offset pour se dplacer lintrieur de celui-ci. Ce mcanisme permet une traduction dadresse logique en adresse physique. Les informations de chacun des segments sont stockes dans un descripteur et chaque descripteur est stock en mmoire dans la table des descripteurs. Les niveaux de privilges permettent dinstaurer une hirarchie empchant un segment de faible privilge daccder des segments de plus haut privilge. 13 6.2. ADRESSAGE MMOIRE 6. DU PROCESSEUR AU NOYAU FIGURE 10 Adressage en mode protg FIGURE 11 Reprsentation de la mmoire 14 6.2. ADRESSAGE MMOIRE 6. DU PROCESSEUR AU NOYAU 6.2.4 Pagination Elle permet lutilisation dune mmoire virtuelle qui offre les avantages suivants : Utilisation dune zone de swap sur le disque dur lorsque la limite de la Mmoire est atteinte. Associer chaque processus son propre espace dadressage. Facilite lallocation ou la dsallocation. Ce mcanisme de protection sajoute juste aprs celui de la segmentation : ladresse obtenue en sortie de lunit de segmen- tation nest plus une adresse physique mais un adresse linaire (virtuelle). On navigue alors dans deux espaces mmoires spars par la MMU, un virtuel et un rel. Chacun de ces espaces est dcoup en zones (soit de 4ko ou de 4Mo) appeles page pour lespace virtuel et cadre pour lespace physique. La MMU fait correspondre les pages et les cadres entre eux. FIGURE 12 Reprsentation de la mmoire pagine Le mcanisme de traduction se base sur des tables de pages, stockes dans un rpertoire de page, un peu comme lon stocke des numros de tlphone dans un rpertoire tlphonique. Chaque rpertoire peut adresser au maximum 4 Go de RAM. Ces structures sont stockes en mmoire physique. De mme, on peut attribuer des privilges pour grer la scurit. FIGURE 13 Mcanisme simpli de la pagination Il arrive que la translation dadresse choue et la MMU lve alors une interruption pour signaler un dfaut de page. Cela peut se manifester galement par une adresse physique sur le zone dchange du disque dur et il faut demander au processeur de recopier cette page dans la RAM si il reste de la place. Dans le cas chant, une page victime sera choisie pour tre son 15 6.3. LANCEMENT DUN SYSTME 6. DU PROCESSEUR AU NOYAU tour stocke dans le swap. 6.2.5 Le mode noyau et le mode utilisateur Chaque tche excute par le processeur possde galement des niveaux de privilges qui sont analyss pour savoir quelles zones mmoires elle peut accder. Cest lOS de dnir les structures ncessaires la segmentation et la pagina- tion pour sparer la RAM en deux zones distinctes : lespace noyau et lespace utilisateurs. Dans lespace noyau, nous allons trouver les codes permettant dcrire sur un disque, de communiquer avec un priphrique, de tuer une tche, dafcher un pixel lcran,etc ... Ces tches doivent avoir accs toute la mmoire pour grer lensemble du systme. linverse, nous ne souhaitons pas que les tches provenant de lespace utilisateur puissent corrompre une zone mmoire utilise pour crire sur un disque ou pour grer un niveau de tension dun priphrique. Cependant, on peut communiquer dun espace lautre via les appels systmes, un mcanisme qui permet, via une interruption de passer dun code utilisateur un code noyau. FIGURE 14 Vision schmatique dun noyau monolithique modulaire - Source : wikipdia 6.3 Lancement dun systme Le noyau et le shell ne sont pas les deux seuls composants logiciels ncessaires lutilisation dun systme. On peut prendre lexemple dun ordinateur pour comprendre. Le noyau de votre systme dexploitation est le plus souvent un chier stock sur votre disque dur. Mais cest galement le noyau qui permet votre systme de lire et dexcuter un chier sur un disque dur. On se retrouve devant le problme de loeuf et de la poule. Il nous faut donc un composant intermdiaire qui charge le noyau en mmoire, lexcute et qui lui passe la main. Sur nos ordinateurs personnels, le dmarrage du systme suit lordre suivant : 1. On alimente lordinateur 2. Un programme POST sexcute (Power On Self Test) et vrie quil ny a pas de problme dalimentation lectrique. 3. Le BIOS met en place un systme minimal dentres sorties vers les diffrents priphriques et cherche un secteur de dmarrage valide, le charge en mmoire et lexcute. 4. Le segment de dmarrage contient un bootloader qui charge et excute le noyau en mmoire. une certaine poque, il tait ncessaire dinsrer une disquette pour dmarrer un systme. Sur le premier secteur de disque du support se trouvait ce fameux bout de code qui chargeait le systme en mmoire laide de routines fournis par le BIOS. 16 6.4. PRSENTATION DE GNU 6. DU PROCESSEUR AU NOYAU Sur des plate-formes embarques, on retrouve le plus souvent le bootloader ou encore appel bootstrap. Le terme dsigne littralement un chausse-pied ou lanneau situ en haut des bottes permettant de les chausser plus facilement. Lcriture dun chargeur de dmarrage est relative au processeur (la premire adresse excute au dmarrage varie selon les puces). Sur les PC x86, on peut citer les plus usits dans le monde de GNU comme Lilo, Grub ou SysLinux. (a) Grub (b) Lilo (c) SysLinux FIGURE 15 Diffrents chargeurs de dmarrage sous GNU/BSD 6.4 Prsentation de GNU En 1984, en chercheur en intelligence du laboratoire du MIT, Richard Matthew Stallman (RMS), se lance dans la ralisa- tion dun systme dexploitation libre de droits. Son initiative cherche faire renatre la philosophie des premiers instants de linformatique o le logiciel ntait que la cerise sur le gteau offert par les industriels aprs lacquisition de leurs machines onreuses. GNU est un anagramme rcursif signiant "Gnus Not Unix" pour rappeler quil est un systme trs proche de Unix et en mme temps un systme indpendant de toute pression industrielle de la part de AT&T, socit cratrice de UNIX. FIGURE 16 Logo de GNU - Source : wikipdia 17 6.5. PRSENTATION DE LINUX 6. DU PROCESSEUR AU NOYAU RMS est aussi lorigine de la licence public gnrale (GPL) qui interdit toute fermeture de code source dun logiciel ou dun driv publi sous GPL. Cette notion est galement appele "gauche dauteur" ou "copyleft" en rfrence au "droit dauteur" ou copyright. En 1990, le devient sufsamment abouti mais il manque une pice essentielle au puzzle : le noyau. Cest ce moment quintervient un jeune tudiant nlandais. 6.5 Prsentation de Linux En 1991, Linus Torvalds, lve en informatique luniversit de Helsinki, travaillait grer la commutation des tches en mode protg sur son PC compatible 80386. Il se met en tte de crer un vritable systme dexploitation et un noyau plus performants que ceux quil tudie en classe (Minix). Le 5 octobre 1991, il publie sur le serveur Usenet ddi Minix la version 0.0.1 de Linux. Convaincu par RMS de publier son code sous la licence GPL, Linus permit au monde entier de disposer de son travail et dy contribuer. Le noyau Linux devient le noyau le plus utilis avec GNU. FIGURE 17 Tux la mascotte de Linux - Source : wikipdia Depuis sa version 1.2, (la version actuelle en dveloppement est la 2.6.) Linux est un noyau monolithique modulaire, entirement paramtrable et ouvert sur les standards industriels. Le code est entirement cod en C (aucune partie en C++). Il a t conu pour utilis le compilateur GCC dont il utilise beaucoup de macros non standards. Le noyau ne compilera pas avec un nimporte quel compilateur ANSI C. Le minimum ncessaire pour le faire fonctionner est un processeur 32 bits avec ou sans bloc MMU. 6.5.1 Dveloppement Le dveloppement de Linux est supervis par une hirarchie prcise au sein de la communaut, le haut de celle - ci tant toujours reprsent par Linus Torvalds. Les publications de codes se font au travers des branches de dveloppement qui intgrent les changements majeurs et les nouvelles fonctionnalits. Au bout dun certain temps, si une branche de dveloppement est assez mature (cf Fig. 18), elle devient une base pour la prochaine version stable. Une branche stable du noyau est publie tous les deux ou trois ans. Les branches peuvent tre identies par leur numro de version : Le numro de branche est pair pour les versions stables. Exemple : 1.0, 2.0, 2.4. Il est impair pour les branches de dveloppement. Exemple : 2.1 , 2.5. Les publications mineurs se voient attribuer un ou des numros supplmentaires. Exemple : 2.2.22, 2.5.9. 18 6.6. UN COUPLE GAGNANT 6. DU PROCESSEUR AU NOYAU FIGURE 18 Cycle de dveloppement - Source : Association Free-Electrons 6.6 Un couple gagnant Les parts de march de GNU/Linux ne cessent de monter en tant qu OS de station de travail, mais reste encore minori- taire (0,80 % en avril 2010). Cependant, il est de plus en plus utilis dans le monde de lembarqu (26 % en 2008). Le succs dans le monde des systmes intelligents peut sexpliquer dun point de vue marketing : Le code de GNU et de Linux sont mis disposition sans frais. Les outils ncessaires leur mise en place et utilisation sont galement libres de droits. Une communaut bnvole et gigantesque, toujours en activit autour d Internet. (Le dveloppement de Fedora 9 est estim 10,2 milliards de dollars de $) Les avantages sont avant tout techniques : Linux est certi POSIX. Linux fonctionne sur plus de 20 architectures diffrentes. Un grand nombre de librairies et de composants compatibles GNU existent sur la toile avec un code ouvert. La similarit du systme avec UNIX est un atout pour les dveloppeurs. Des versions allges permettent de lutiliser sur des systmes non dots de MMU (CLinux) (Un seul processus est lanc sans commutation de contexte). La modularit du noyau permet de ladapter au ressources de la machine. On peut faire tourner un noyau, GNU et un serveur graphique sur des machines avec 8 Mo de mmoire vive et 50 Mo de capacit de disque. Possibilit de support Temps Rel. Existence de distributions prtes lemploi suivant lusage : Tlphone, serveur, routeur ... 6.7 Linux et la mmoire Les mcanismes de segmentation et de pagination peuvent se retrouver difcile grer dune architecture une autre. Le support de la segmentation sur une architecture RISC est limit, contrairement la pagination. Ces deux mcanismes offrent des possibilits similaires, Linux ne supporte donc que la segmentation au minimum. Tous les processeurs auront le mme adressage logique avec un nombre limit de segments uniquement enregistr dans la table globale des segments. On aura : Les segments du Noyau (Code et Donnes en Ring 0) Les segments de donnes utilisateurs (Code et Donnes en Ring 3) Un TSS par coeur. Le TSS (Task Segment State) est une structure qui permet de sauvegarder le contexte lors des interruptions ou des commutations de tches Un segment pour une table locale des descripteurs de segments. Cette LDT ne contiendra quun descripteur nul et est commune tous les processus 4 Segments pour le code et les donnes du BIOS (ou chargeur de dmarrage). La pagination est implmente avec un rpertoire principale contenant les autres rpertoires de pages. 19 6.8. NAVIGUER DANS LES SOURCES DU NOYAU 6. DU PROCESSEUR AU NOYAU FIGURE 19 Segmentation sous Linux FIGURE 20 Pagination sous Linux 6.8 Naviguer dans les sources du Noyau Les diffrents rpertoires du noyau sont rpertoris dans le tableau de la gure 21. Le rpertoire contenant la documentation se rvle trs important dans le cadre de lembarqu puisquil nexiste aucune documentation spcialise pour une autre architecture que x86. Lensemble des procdures pour initialiser les ports SPI ou I 2 C restent des spcicits du monde de lembarqu et les seules informations se trouvent le dossier source du noyau. En dehors du dossier /arch, relatif larchitecture du CPU, le reste du code doit tre portable. Cette compatibilit se base sur des macros et des fonctions qui cre une interface pour les parties propres au processeur : Problme dendianness Accs aux ports E/S en mmoire LAPI pour le DMA LAPI interne du noyau est en constante volution et il nest pas rare quun pilote ncessite une rcriture aprs la publication dune nouvelle version non majeure. La partie suivante parle de ce point plus en dtail. 20 6.8. NAVIGUER DANS LES SOURCES DU NOYAU 6. DU PROCESSEUR AU NOYAU arch/ Code dpendant de larchitecture COPYING Conditions de copie de Linux (GNU GPL) CREDITS Contributeurs principaux de Linux crypto/ Bibliothques de cryptographie Documentation/ Documentation du noyau. drivers/ Pilotes de priphriques (drivers/usb/, etc.) fs/ Systmes de chier (fs/ext3/, etc.) include/ Enttes du noyau include/asm<arch> Enttes dpendant de larchitecture include/linux Enttes du coeur du noyau Linux init/ Initialisation de Linux (contient main.c) ipc/ Code utilis pour la communication entre processus kernel/ Coeur du noyau Linux lib/ Bibliothques diverses (zlib, crc32...) MAINTAINERS Responsables de parties du noyau Makele Makele principal (dnit arch et version) mm/ Code de la gestion mmoire net/ Support rseau (protocole uniquement) README Introduction et instructions de compilation REPORTINGBUGS Instructions pour le rapport de bogues scripts/ Scripts utiliss en interne ou en externe security/ Implmentations du modle de scurit (selinux...) sound/ Support du son et pilotes usr/ Utilitaires FIGURE 21 Les diffrents dossiers du noyau et le type de code quils contiennent FIGURE 22 Taille des diffrents rpertoires - Source : Association Free Electrons 21 6.9. LES PILOTES SOUS LINUX 2.6 6. DU PROCESSEUR AU NOYAU 6.9 Les pilotes sous Linux 2.6 Les pilotes sont le plus souvent crit sous forme de modules. Ce sont des petits bout de code que lon peut charger dy- namiquement pendant lexcution du systme ou compiler statiquement dans le noyau. Pour chacun de ses modules, il faut dnir une licence pour son code : GPL, Dual BSD/GPL, DUAL MPL/GPL ou Propritaire. Cette licence va dterminer le comportement de son code avec les autre modules disponibles. Si un module est propritaire, il naura pas le droit dinteragir avec un autre module. Cest pourquoi la plupart des modules et des pilotes sont publis sous licence libre ou open source. La gestion des priphriques a grandement volue depuis les premires versions. Cette politique oblige souvent le code tre rcrit, mais du fait de louverture du code, il est assez ais de faire la transition. Si lon prends lexemple de lAPI USB, elle a chang trois fois et est devenue l implmentation la plus rapide du protocole. Sous Windows XP, elle a galement chang trois fois, mais du fait de la fermeture du code, il a t ncessaire de garder une rtro compatibilit pour les pilotes binaires. Ces oprations sont un cot en dveloppement, scurit, stabilit et performance. On peut galement crire un pilote en espace utilisateur. Cela prsente lavantage de pouvoir utiliser nimporte quel langage et assure de ne pas crer derreur critique dans la mmoire noyau. Il nest pas rare de voir des systme de gestions de pri- phriques utiliser les deux espaces : une partie noyau et une partie utilisateur qui communiquent entre eux (On peut citer le fameux serveur graphique X Window) Il existe 3 types de pilotes diffrents : Pilotes de caractres : communication avec le matriel via un ux de caractre. (Clavier, souris, port srie, consoles) Pilotes de blocs : communication avec le matriel via des blocs de donnes. (Disques durs, systme de chiers, etc...) Pilotes Rseaux : communication avec le matriel via un protocole de communication Des pilotes utilisant le modle uni. Chacun de ses priphriques se trouve en espace noyau. Il est courant de crer un lien avec lespace utilisateur ( au moyen des dossier /proc et /sys). Il apparat comme un chier dans larborescence sur lequel les oprations dcriture et de lecture se font comme avec nimporte quelle autre chier. Ces actions sont dnies dans le module laide dune structure et de pointeurs de fonctions. 6.10 Le framebuffer Ce composant permet de dialoguer directement avec la mmoire vido. Il permet de saffranchir de systme de fen- trage plus lourd comme le serveur X. Cest un atout majeur dans le monde de lembarqu puisque lon peut intgrer un vritable systme graphique avec une consommation de ressources amoindrie. Cest ce composant que lon peut retrouver au dmarrage de la plupart des "Live CD" GNU/Linux. FIGURE 23 Dmarrage de knoppix avec framebuffer - Source : Wikipdia [6] 22 7. RALISATION 7 Ralisation Cette partie prsente les diffrents choix techniques et les outils qui ont t ncessaires la ralisation du projet. 7.1 Choix de la plateforme GNU/Linux 7.1.1 Carte retenue La solution retenue tait une carte propose conjointement par lassociation franaise et lentreprise ARMADEUS. Les raisons de ce choix sont les suivantes : Un support gratuit en franais par mail ou sur IRC [7] en contact direct avec les dveloppeurs. Une base de donnes techniques complte base sur le moteur de Wikipdia [8]. Schmas des cartes disponibles en open source. Une utilisation 100% doutils de dveloppement libres. Un systme avec MMU et FPGA pour une stabilite accrue et volution facilite vers de nouveaux projets. Un prix infrieur par rapport aux cartes de mmes caractristiques. Ces points constituent un rel avantage, car il nexiste actuellement aucun ouvrage traitant directement de la ralisation de pilotes ou de limplmentation de GNU/Linux sur une carte embarque. Les seuls ouvrages existants concernent les plateformes x86 des PC actuels. La seule manire de se documenter restent les sources de Linux et les codes sources disponibles sur internet. Association et compagnie Armadeus Lassociation ARMADEUS Project est une organisation but non lucrative proposant des solutions embarques bases sur des logiciels libres conues via lentreprise ARMADEUS Systems. Elle propose des kits de dveloppement bats cots comprenant : Une carte "processeur" comprenant : Un processeur de chez Freescale. Une mmoire volatile. Une mmoire non volatile. Un FPGA de chez Xilinx. Une carte de dveloppement comprenant divers priphriques connects aux blocs fonctionnels du processeur. FIGURE 24 Logo de lentreprise Armadeus 23 7.1. CHOIX DE LA PLATEFORME GNU/LINUX 7. RALISATION Le prix de la carte processeur varie en fonction de la quantit de mmoire et la puissance du processeur. Celui de la carte de dveloppement change en suivant le nombre de priphriques de communication dj souds et congurs. Les cartes choisies furent la carte processeur apf27 et la carte de dveloppement APF27DevFull. Les caractristiques sont prsentes la gure 26. (a) La carte processeur APF27 (b) La carte processeur APF27DevFull (c) Les deux cartes assembles FIGURE 25 Les cartes de dveloppement de lAPF27 et APF27Dev 24 7.1. CHOIX DE LA PLATEFORME GNU/LINUX 7. RALISATION Carte processeur APF27 [9] Processeur Freescale i.MX27 (ARM9 @ 400MHz) FPGA Xilinx Sparant 3A XC3S200A RAM Mobile DDR, 2 64 MB FLASH Mobile NAND, 256 MB Module Processeur [10] 6 x RS232 2 x I2C 3 x SPI 2 x SSI (High speed synchronous serial port) 1 x USB OTG Hi-Speed host 1 x USB Host (Hi-Speed) 1 x USB Host (Full-Speed) 1 x 10/100Mbits Ethernet MAC 2 x SD/MMC 1 x RTC (no battery) 1 x PWM 16bits resolution 6 x Timer 32 bits with input capture/output compare 1 x adjustable Watchdog 1 x LCD controller STN / TFT interface resolution up to 800 x 600 px, 18 bits 1 x MPEG/H.264 codec 1 x CSI (CMOS sensor interface) Up to 107 total I/O pins multiplexed with most dedicated functions for pin efciency (GPIO) Carte de dveloppement APF27Dev [10] One high speed and one full speed USB 2.0 port Touchscreen controller One microSD Audio in/Stereo audio out controller (TSC2101 codec) 2 user leds : one connected to the i.MX27 microprocessor and the other to the FPGA 2 user switches : one connected to the i.MX27 microprocessor and the other to the FPGA CAN(1) controller ADC (7 channels, 10 bits) type MAX1027(1) DAC (2 channels, 10 bits) type MAX5821(1) RTC with backup battery(1) HDMI/DVI controller.(1) For DVI usage, an additional HDMI/DVI cable is required Reset switch FIGURE 26 Caractristiques de lAPF27 et APF27Dev chez T & S - Le nombre de I/O est relatif au nombre de module activs. 25 7.2. PRSENTATION DE LARCHITECTURE ARM (32 BITS) 7. RALISATION 7.2 Prsentation de larchitecture ARM (32 bits) ARM est labbrviation de Advanced Risc Machine. Cette architecture a t dveloppe lorigine pour un ordinateur de la socit ACORN puis est devenue une offre de coeur part entire. La spcicit de lentreprise ARM Ltd est de ne vendre aucune puce physique mais uniquement les IPs aux diffrents fondeurs ou dveloppeurs. Les coeurs ARM ont inond le march, notamment dans le domaine de la tlphonie mobile qui utilise de plus en plus des systmes dexploitations semblables ceux de nos ordinateurs. Nous pouvons citer les drivs de Linux avec Maemo, Symbian de Nokia ou Android sur le Nexus One de Google/HTC ou dans un autre registre liPhone OS de la marque la pomme. LIP la plus connue est lARM7TDI comportant un niveau de pipeline sur 3 tages et une possibilit de bascul le jeu dins- tructions de 32 16 bits (Mode THUMB), mode utilse pour une conomie de mmoire dans le monde de lembarqu. Son successeur, le ARM9, passe sur 5 niveaux de pipeline. ARM Ltd. propose les blocs logiques suivants dans ses processeurs : MMU : disponible sur les ARM710 et ARM9. DSP FPU Jazelle : une machine virtuelle cable dans le processeur La majorit des fondeurs proposent des coeurs ARM aujourdhui (Fresscale,Qualcomm,Marvell, Cypress, NXP, STMi- croelectronics, TI, Samsung, Toshiba..). 7.3 Composants logiciels Tous les composants cits dans cette partie sont publis sous une licence libre de type GPLv2 ou BSD. 7.3.1 Sur lordinateur Pour crer des binaires excutables ARM sans utiliser la plateforme (compiler sur la carte prendrait normment de temps), il faut utiliser une chane de compilation croise. La dmarche suivre pour la construire est la suivante : 1. Rcuprer les enttes du noyau. 2. Rcuprer, congurer et compiler les outils pour la manipulation des binaires de larchitecture embarque (assembleur, diteur de lien, inspecteur de code et archiveur de code au minimum) et les installer sur la machine. 3. Installer une premire version du compilateur pour "cross compiler" les librairies standards (uClibc). 4. Recongurer et recompiler une version de compilateur avec les librairies cres. 5. Rcuprer les sources du noyau, les congurer et les recompiler. 6. Compiler chaque programme ou librairies avec ses dpendances et les intgrer au futur systme de chiers de la carte. Ces tapes peuvent se rveler complexe : un simple programme peut recqurir 10 dpendances qui dpendent elles mmes dautres codes .... Heureusement, il existe des outils spcialiss permettant la gneration de la chane de compilation croise, mais aussi de modier la plupart des composants du systme nal. Nous pouvons cit LTIB, OpenEmbedded, PTX- dist,Openwrt ou Buildroot. Cest ce dernier qua choisi ARMADEUS pour travailler sur ses cartes et elle nest pas la seule : THALES, ATMEL, GUMSTIX sen servent depuis de nombreuses annes, bien avant la sortie dune version stable. Buildroot OpenEmbedded Openwrt Avantages volutif,puissant, conguration graphique,Gneraliste Gneraliste Cration de paquets Inconvnients Gourmand en ressources, pas de paquets Lourd, conguration avec des - chiers textes Lourd, orient IAD 26 7.3. COMPOSANTS LOGICIELS 7. RALISATION 7.3.2 Buildroot lorigine, cet outil ntait utilis quen interne par les dveloppeur de la librairie uClibc. Depuis 2009, il est devenu un outil part entire. Sa relative simplicit dutilisation vient du fait quil utilise des outils bien connus de la part de la communaut GNU et des dveloppeurs du noyau Linux. FIGURE 27 Interface buildroot sous ncurses. Il est constitu dun ensemble de Makele et de script shell qui tlchargent, congurent, compilent et intgrent automa- tiquement les programmes souhaits. Il est assez facile dintgrer ses propres patchs ou librairies en ajoutant ses chiers de conguration type Makele dans la gestion des dpendances et de la construction. Une fois la phase de compilation termine, on obtient 3 chiers : 1. Un noyau Linux bootable 2. Une image du systme de chier jffs2 3. Un binaire U-Boot 7.3.3 Sur la carte Les composants utiliss sur la plateforme sont rpertoris dans le tableau suivant : Bootloader U-Boot Noyau Linux Librarie uClibc Shell Busybox Compilateur GCC Systme de chier jffs2 FIGURE 28 Composants logiciels utiliss sur la carte. U-Boot : Ce bootloader possde une pile TCP/IP et une couche permettant de asher la mmoire vive. Passer par le rseau ethernet pour charger les composants reprsente un gain de temps non ngligeable. Linux : Sa conguration passe par de nombreux patchs mais des modules sont dja prsents pour chaque plate-forme. 27 7.4. INTERFACES AVEC LA CARTE 7. RALISATION uClibc : Cest une librairie statique fournit pour lutilisateur du systme, lui permettant dutiliser simplement les ap- pels systmes dnis dans le noyau. Elle prsente lavantage dtre rduite par rapport sa grande soeur la glibc et sufsante pour les sytmes embarqus. glibc uClibc "hello world" 475k 25k busybox 843k 311k FIGURE 29 Comparaison de la taille de la glibc et la uClibc en compilation statique Busybox : Ce programme rimplmente toutes les commandes du systme GNU dans un seul excutable pour cono- miser de la RAM. Il est trs rpendu dans les produits grands publics (Freebox par exemple). GCC : (Gnu Compiler Collection ) La collection ofcielle de compilateur GNU. Elle supporte un grand nombre de langages pour une multitude de plate-formes (dont ARM). jffs2 : (Journaling Flash File System) Un systme de chier journalis qui rpartie lcriture sur lensemble des cel- lules de la mmoire ash pour conomiser le matriel. Une compression est ralise pour stocker autant de donnes que possible. NAND ash address range Type 0x00000000 - 0x0009FFFF (640KB, incluant la NAND SPL et 384KB dconomie de mmoire pour les bloc dfectueux) U-Boot 0x000A0000 - 0x000FFFFF (384KB) Variables denvironnement U-BOOT 0x00100000 - 0x0017FFFF (512KB) FPGA bitle 0x00180000 - 0x0067FFFF (5MB) Image du noyau Linux 0x00680000 - Limite de la FLASH Systme de chiers racine FIGURE 30 Rpartition des diffrents composants au sein de la RAM de lAPF27 7.4 Interfaces avec la carte Lentre et la sortie standards de la carte correspondent la liaison srie (ce qui corresponds respectivement au clavier et lcran sur un ordinateur). La carte mule un terminal la manire dun modem auquel on peut envoyer des ordres via un cable Null-Modem (Rx Tx crois) avec une conguration 115200 bauds 8N1. Le transfert de chiers se fait via un protocole driv de FTP depuis le PC jusquen RAM de la carte qui copie les chiers de manire rsidente sur la mmoire ash. La communication depuis la machine hte se fera depuis un logiciel de communication vers des modems. Sous Linux, les plus connus restent Minicom, Kermit et GtkTerm. 7.5 cran AMOLED Tactile Lcran utilis est un cran P0430WQLB-T de la socit Densitron avec une rsolution en RGB de 480 x 272. Il possde en plus une interface tactile rsistive dj pose sur lcran : 28 7.5. CRAN AMOLED TACTILE 7. RALISATION FIGURE 31 Liens entre les diffrentes mmoires FIGURE 32 Utilisation de la carte sur le rseau FIGURE 33 cran P0430WQLB-T de la socit Densitron 29 7.5. CRAN AMOLED TACTILE 7. RALISATION Lavantage par rapport aux technologies matrices actives est un contraste de couleur beaucoup plus nette et , dans la plupart des cas, une puissance consomme beaucoup plus faible. Les crans AMOLED possdent comme leurs cousins alphanumriques, une interface de communication standardise avec laquelle. La puce utilise est un HX5116. FIGURE 34 Interface de la puce HX5116 7.5.1 Interface RGB Parallle Cette interface est hrite des premiers moniteurs VGA que les gnrations suivantes nont pas fait disparatre. Ces appareils utilisaient un canon lectrons qui balayait une grille tricolore an de faire apparaitre les pixels. La projection partait du bord haut gauche de lcran et descendait ligne par ligne avant de retourner son point de dpart. On se servait de 3 signaux pour grer ces vennements dans le temps et trois signaux analogiques codant la valeur du pixel afch. FIGURE 35 Les premiers moniteurs RGB Dans notre cran, on garde le mme principe en ajoutant les lments communs la majorit des composants num- riques : une horloge, une entre de validation et un bus de donnes parrallle de 24 bits (il est possible dutiliser un bus srie). 30 7.5. CRAN AMOLED TACTILE 7. RALISATION FIGURE 36 Interface parallle 480x212 RGB Le contrleur LCD du microprocesseur ne peut contrler que des crans dont la rsolution RGB est infrieure ou gale 18 bits. Nous relierons les 2 bits de poids faible de chaque couleur la masse, nous laissant encore largement assez de couleurs pour notre projet. 7.5.2 Interface SPI "3-wire" Cette interface permet la conguration de lcran et lui spcie linterface utiliser. La particularit de cette interface est quelle nutilise quun seul l, contrairement la carte embarque qui utilise un bus de deux ls. Aucun problme de connexion ne se pose si lon ne souhaite communiquer que dans un seul sens. On a trois ls : une horloge, un bus de donns et une entre dactivation. Linitialisation de lcran en mode 480 x 272 en mode RGB requiert une trame spcique la mise sous tension de lcran. Si lon souhaite lire des donnes prsentes en mmoire du contrleur, il faut user dune petite astuce la conception et la programmation sur le seul bus de communication. Pour permettre au contrleur de lcran de prendre la main sur le bus, il faut forcer ltat de la pin MOSI ltat haut en envoyant constamment 0xFF pendant la procdure de rception. 7.5.3 criture du pilote Choix de la connexion sur la carte Il faut un bus SPI libre sur la carte pour communiquer avec lcran. Daprs la documentation, la carte possde trois bus SPI. Nous souhaitions prservez les ports USB et nous avons sacri lun des deux bus grant la connexion une carte MMC en se basant sur le bus 3. Les informations ncessaires pour congurer les diffrents lments se trouvent dans le dossier documentation du noyau. Dans notre cas, cest le chier Documentation/spi/spi-summary qui fut dune grande aide. La procdure est la suivante : 1. Dclarer les ports SPI prsents sur la carte (cette partie tait dj prsente dans les sources fournit par ARMADEUS). 2. Dclarer les priphriques utiliss sur les ports. 3. Indiquer le pilote utiliser. 31 7.5. CRAN AMOLED TACTILE 7. RALISATION (a) Format des donnes verticale (b) Format des donnes horizontales (c) Forme de lhorloge et des donns sur le bus FIGURE 37 Chronogrammes des diffrents signaux de lcran 32 7.5. CRAN AMOLED TACTILE 7. RALISATION FIGURE 38 SPI 3 wire (a) Connexion des bus MOSI et MISO ensemble (b) mission de de 0xFF sur le bus pendant lenvoie FIGURE 39 Connexion dun bus SPI 3-wire vers un bus half duplex Dclaration du priphrique On dclare le priphrique avec le bout de code suivant : 1 2 static struct spi_board_info spi_board_info[] __initdata = { 3 / * .... * / 4 5 #ifdef CONFIG_LCD_TS_MODULE 6 { 7 .modalias = " l c d _ t s ", 8 .controller_data = &lcd_ts_hw, 9 .max_speed_hz = 8000000, / * 8MHz * / 10 .bus_num = 2, / * SPI3 * / 11 .chip_select = 0, 33 7.5. CRAN AMOLED TACTILE 7. RALISATION 12 .platform_data = &apf27_lcd_ts_config, 13 }, 14 #endif / * LCD T&S * / 15 }; 16 17 / * .... * / 18 #ifdef CONFIG_LCD_TS_MODULE 19 20 #define NCSPIN (GPIO_PORTE | 21) / * Adresse des PINS utilisees. On se sert des headers fournit par Motorola * / 21 #define RESETPIN (GPIO_PORTE | 19) 22 23 24 25 static int lcd_ts_pins [] ={ / * Pins en sortie * / 26 (NCSPIN | GPIO_GPIO | GPIO_OUT), 27 (RESETPIN | GPIO_GPIO | GPIO_OUT), 28 29 }; 30 31 static int lcd_ts_init(struct spi_device * spi){ 32 33 gpio_set_value(RESETPIN,1); / * Les fonctions gpio_set_value et mxc_gpio_setup_multiple_pins sont relatif a la pateforme MXC * / 34 gpio_set_value(NCSPIN,1); 35 return mxc_gpio_setup_multiple_pins(lcd_ts_pins, ARRAY_SIZE(lcd_ts_pins), "LCD_TS" ); 36 37 } 38 39 static int lcd_ts_exit(struct spi_device * spi){ 40 41 gpio_set_value(NCSPIN,1); 42 gpio_set_value(RESETPIN,0); 43 mxc_gpio_release_multiple_pins(lcd_ts_pins, ARRAY_SIZE(lcd_ts_pins)); 44 return 0; 45 46 47 48 } 49 static int lcd_ts_reset (int value){ 50 gpio_set_value(RESETPIN,value); 51 return 0; 52 53 54 } 55 static void lcd_ts_cs(u32 command) 56 { 57 if (command == SPI_CS_DEASSERT) 58 gpio_set_value(NCSPIN, 1); 59 else 60 gpio_set_value(NCSPIN, 0); 61 } 62 63 static struct spi_imx_chip lcd_ts_hw = { 64 .cs_control = lcd_ts_cs, 65 }; 66 67 static struct lcd_ts apf27_lcd_ts_config = { 68 69 .init = lcd_ts_init, 70 .exit = lcd_ts_exit, 71 .reset = lcd_ts_reset, 72 .ncspin = (int) NCSPIN, 73 .resetpin = (int) RESETPIN, 74 75 }; 76 #endif Les arguments sont les suivants : modalias : le nom du module correspondant au pilote. controller_data : un pointeur vers une structure de contrl propre la plateforme (Chip Select). 34 7.5. CRAN AMOLED TACTILE 7. RALISATION max_speed_hz : vitesse maximale du bus. bus_num : bus de communication du processeur (SPI3). chip_select : prsence dune pin CS. platform_data : un pointeur sur une structure contenant les adresses des fonctions dinitialisation du priphrique es- clave. Ces fonctions dinitialisation se trouvent plus bas dans le code. Elles sont crites suivants les procdures de dmarrage de lcran trouves dans la datasheet : FIGURE 40 Squence dallumage de lcran criture du pilote Cette section de code se situe au niveau de la communication SPI proprement parl, il ny a plus de conguration matriel. Le pilote prend la forme dun module que lon peut appeler et qui est reli au bon priphrique SPI via la structure vue dans la partie prcdente. On reprends les informations de la plate-forme via une structure : 1 2 struct lcd_ts { 35 7.5. CRAN AMOLED TACTILE 7. RALISATION 3 struct display_device * display_dev; 4 struct spi_device * spi ;/ * SPI BUS * / 5 int ( * init)(struct spi_device * spi); 6 int ( * exit)(struct spi_device * spi); 7 int ( * reset)(int value); 8 int ncspin; 9 int resetpin; 10 }; Puis on dnit un driver SPI via une nouvelle structure : 1 static struct spi_driver lcd_ts_driver = { 2 .probe = lcd_ts_probe, 3 .remove = lcd_ts_remove, 4 .shutdown = lcd_ts_shutdown, 5 .suspend = lcd_ts_suspend, 6 .resume = lcd_ts_resume, 7 .driver = { 8 .name = DRIVER_NAME, 9 .owner = THIS_MODULE, 10 }, 11 }; Chacun des lments est un pointeur sur une fonction de conguration du priphrique. Toutes les rfrences doivent tre dnies. Les fonctions shutdown, suspend et resume ne seront pas utilises et ne renverront que 0. La fonction probe correspond linitialisation du priphrique sur le bus. 1 static int lcd_ts_probe (struct spi_device * spi_device){ 2 3 printk("LCD SPI Bus Re g i s t r a t i o n \ n"); 4 struct lcd_ts * lcd_data; 5 int err = -EINVAL; 6 lcd_data = (struct lcd_ts * )(spi_device->dev.platform_data); 7 lcd_data->init(spi_device); / * Initialise GPIO * / 8 9 lcd_data->spi = spi_device; 10 11 lcd_data->spi->mode = SPI_MODE_0; 12 lcd_data->spi->bits_per_word = 8; 13 lcd_data->spi->dev.power.power_state = PMSG_ON; 14 err = spi_setup(lcd_data->spi); 15 printk(" Renvoi e du s e t up %i \ n",err); 16 17 lcd_ts_init_screen(lcd_data); 18 return 0; 19 20 } Cette fonction appelle la fonction lcd_ts_init_screen qui va transmettre la trame de conguration de lcran conformment la datasheet (cf Fig.41) : 1 static int lcd_ts_init_screen( struct lcd_ts * lcd_ts_dev){ 2 3 / * gpio_set_value(lcd_ts_dev->resetpin,1); * / 4 5 / * initial procedure for 24-bit parallel RGB (DE) * / 6 lcd_ts_write (lcd_ts_dev, 0x04, 0x23); / * set display mode 24-bit parallel RGB (DE) * / 7 lcd_ts_write (lcd_ts_dev, 0x05, 0x82); / * set display mode * / 8 lcd_ts_write (lcd_ts_dev, 0x07, 0x0F); / * set driver capability * / 9 lcd_ts_write (lcd_ts_dev, 0x34, 0x18); / * set display timing * / 10 lcd_ts_write (lcd_ts_dev, 0x35, 0x28); / * set display timing * / 11 lcd_ts_write (lcd_ts_dev, 0x36, 0x16); / * set display timing * / 12 lcd_ts_write (lcd_ts_dev, 0x37, 0x01); / * set display timing * / 13 lcd_ts_write (lcd_ts_dev, 0x02, 0x02); / * OTP On * / 14 lcd_ts_write (lcd_ts_dev, 0x0A, 0x79); / * VGHVGL=+/-6V * / 15 lcd_ts_write (lcd_ts_dev, 0x09, 0x20); / * VGAM1OUT=4.85V * / 16 lcd_ts_write (lcd_ts_dev, 0x10, 0x6A); / * set R slop * / 17 lcd_ts_write (lcd_ts_dev, 0x11, 0x6A); / * set G slop * / 18 lcd_ts_write (lcd_ts_dev, 0x12, 0x68); / * set B slop * / 19 lcd_ts_write (lcd_ts_dev, 0x13, 0x00); / * set R_0 * / 20 lcd_ts_write (lcd_ts_dev, 0x14, 0x04); / * set R_10 * / 36 7.5. CRAN AMOLED TACTILE 7. RALISATION FIGURE 41 Initialisation de lcran dans la documentation 37 7.5. CRAN AMOLED TACTILE 7. RALISATION 21 lcd_ts_write (lcd_ts_dev, 0x15, 0x05); / * set R_36 * / 22 lcd_ts_write (lcd_ts_dev, 0x16, 0x05); / * set R_80 * / 23 lcd_ts_write (lcd_ts_dev, 0x17, 0x04); / * set R_124 * / 24 lcd_ts_write (lcd_ts_dev, 0x18, 0x03); / * set R_168 * / 25 lcd_ts_write (lcd_ts_dev, 0x19, 0x02); / * set R_212 * / 26 lcd_ts_write (lcd_ts_dev, 0x1A, 0x02); / * set R_255 * / 27 lcd_ts_write (lcd_ts_dev, 0x1B, 0x00); / * set G_0 * / 28 lcd_ts_write (lcd_ts_dev, 0x1C, 0x06); / * set G_10 * / 29 lcd_ts_write (lcd_ts_dev, 0x1D, 0x05); / * set G_36 * / 30 lcd_ts_write (lcd_ts_dev, 0x1E, 0x06); / * set G_80 * / 31 lcd_ts_write (lcd_ts_dev, 0x1F, 0x06); / * set G_124 * / 32 lcd_ts_write (lcd_ts_dev, 0x20, 0x05); / * set G_168 * / 33 lcd_ts_write (lcd_ts_dev, 0x21, 0x05); / * set G_212 * / 34 lcd_ts_write (lcd_ts_dev, 0x22, 0x07); / * set G_255 * / 35 lcd_ts_write (lcd_ts_dev, 0x23, 0x00); / * set G_0 * / 36 lcd_ts_write (lcd_ts_dev, 0x24, 0x07); / * set B_10 * / 37 lcd_ts_write (lcd_ts_dev, 0x25, 0x06); / * set B_36 * / 38 lcd_ts_write (lcd_ts_dev, 0x26, 0x07); / * set B_80 * / 39 lcd_ts_write (lcd_ts_dev, 0x27, 0x07); / * set B_124 * / 40 lcd_ts_write (lcd_ts_dev, 0x28, 0x06); / * set B_168 * / 41 lcd_ts_write (lcd_ts_dev, 0x29, 0x04); / * set B_212 * / 42 lcd_ts_write (lcd_ts_dev, 0x2A, 0x07); / * set B_255 * / 43 lcd_ts_write (lcd_ts_dev, 0x06, 0x03); / * set display on * / 44 45 / * gpio_set_value(lcd_ts_dev->resetpin,1); * / 46 } Une fois la communication termine, il faut terminer librer les ressources. Cest le but de la fonction resume : 1 static int lcd_ts_remove(struct spi_device * spi_device){ 2 3 struct lcd_ts * lcd_data ; 4 lcd_data = (struct lcd_ts * )(spi_device->dev.platform_data); 5 6 lcd_data->exit(spi_device); / * Free GPIO * / 7 / * Init Sequence * / 8 lcd_data->reset(0); 9 10 return 0; 11 } Nous devons ouvrir notre module lextrieur et proposer des fonctions dinitialisation et de dsallocation du pilote dans le systme. 1 static int __init lcd_ts_init(void) 2 { 3 printk(" Loadi ng LCD Dr i ve r modul e \ n"); 4 int i; 5 i = spi_register_driver(&lcd_ts_driver); 6 printk(" Renvoi e : %i \ n",i); 7 return i; 8 9 } 10 11 static void __exit lcd_ts_exit(void) 12 { 13 printk(" Unl oadi ng LCD Dr i ve r modul e \ n"); 14 spi_unregister_driver(&lcd_ts_driver); 15 16 17 } 18 19 module_init(lcd_ts_init); 20 module_exit(lcd_ts_exit); 21 22 MODULE_AUTHOR("HEINRICH Yanni ck <yageek@f r ee . f r >"); 23 MODULE_DESCRIPTION("HX5116 AMOLED Dr i ve r "); 24 MODULE_LICENSE("GPL"); Toutes les fonctions sont dclares statiques de manire cloisonner la compilation et ldition de liens aux rfrences de ce chier. Le pilote devra tre lanc manuellement ds lidentication sur le shell. On pourra par la suite rendre automatiquement le lancement du module. La commande pour lancer le module sera : modprobe lcd_ts. 38 7.5. CRAN AMOLED TACTILE 7. RALISATION Programme Mandel sous SDL La SDL est une librarie libre trs utilise pour crer des jeux vidos 2D. Son aptitude dialoguer directement avec le framebuffer linux la rende trs rapide. Le programme Mandel afche une rprsentation de lensemble de Mandelbrot dans le plan dArgand-Gauss. Son pro- gramme est dtaill dans les annexes. FIGURE 42 La fractale de Mandelbrot sur PC avec la librarie SDL 7.5.4 Alimentation Lcran AMOLED requiert un grand nombre de condensateurs et une alimentation symtrique proche de plus et moins 5V. Il existe des circuits ddis lalimentation de ces crans, bass la plupart du temps sur des pompes de charges, courantes dans lalimentation de petite puissance. Notre choix sest port sur un contrleur de ON-Semiconductors : le NCP5810D. Il permet dobtenir une tension symtrique partir dune tension au maximum de 7 V et peut fournir jusqu 1 W de puissance. La seule complication est lie lunique package propos qui se rvle trs difcile manipuler et souder. Il est galement prvu de pouvoir se connecter une alimentation extrieure. 39 7.6. CONCEPTION DE LA CARTE 7. RALISATION FIGURE 43 Prsentation du NCP5810 7.6 Conception de la carte La conception de la carte sest faite sous deux logiciels diffrents : une premire version fut ralise sur le logiciel Eagle rachet depuis peu par Farnell (anciennement CADSOFT) et la version nale de la carte fut ralise sous le logiciel libre Kicad. Ce dernier prsentait lavantage de ne pas avoir de fonctionnalit rduite et la licence dutilisation qui, contrairement Eagle, permettait de concevoir un produit but commercial. 7.6.1 Contraintes de routage La carte a t commande auprs de la socit PCB-Pool qui imposait les contraintes de conceptions suivantes en double face 1 : Pad/Via Restring 0.2mm Via/Drill Restring 0.15mm (taille de pastille moins le diamtre de perage), au moins taille de bande de cuivre/taille entrefer Vernis pargne 0.075mm (taille de pastille sur couche soude moins taille de pastille sur cs/ss) Ouvertures (antipads) Multicouches 0.35mm (taille de pastille sur couche interne ngative moins perage) 1. http://www.pcb-pool.com/ppfr/info_technique.html 40 7.6. CONCEPTION DE LA CARTE 7. RALISATION (a) Logo de eagle (b) Logo de Kicad FIGURE 44 Les deux logiciels de CAO utiliss Diamtre minimal des trous : Diamtre de foret = 0.2 mm (8mil) 7.6.2 Schma Le schmatique de la carte nas pas chang entre les deux versions (cf Fig.45. 7.6.3 Routage La carte est destine se poser au dessus de la carte de dveloppement laide dentretoises. La conception pris en compte lemplacement des diffrents connecteurs sur la carte mre. La premire version de la carte a t ralise sous eagle. Cette version nas pas t conserve suite un changement de disposition sur la carte GNU/Linux. La seconde version fut ralise sous Kicad. 7.6.4 Soudure Le choix de la soudure sest dirig vers les fours refusion du fait de la petite taille des composants utiliss, notamment le NCP5810 et le connecteur HIROSE pour lcran AMOLED.Le projet arrivant son terme ,je nai pas pu terminer les vrications et les soudures de la carte, au prot de la partie logicielle qui est totalement acheve. 41 7.6. CONCEPTION DE LA CARTE 7. RALISATION FIGURE 45 Schmatique de la carte 42 7.6. CONCEPTION DE LA CARTE 7. RALISATION FIGURE 46 Premire version de la carte 43 7.6. CONCEPTION DE LA CARTE 7. RALISATION (a) 2D (b) 3D FIGURE 47 Seconde version de la carte 44 8. CONCLUSION 8 Conclusion Ce projet fut une vritable opportunit pour appliquer toutes les connaissances acquises au cours de ma formation lcole et mes connaissances en informatique. Jai pu comprendre lensemble des concepts utiliss dans les systmes intelli- gents et tudier cette frontire qui existe entre le monde des informaticiens et celui des lectroniciens. Partir de la ralisation dune carte et arriver lcriture de son pilote regroupe toutes les notions que linformatique, llectronique et les mathma- tiques ont engendrs depuis la cration des premiers ordinateurs. Cest galement un sujet qui me tenait coeur, tant un utilisateur de logiciels issus de la communaut libre et open-source. La dmocratisation des outils libres dans le monde de lembarqu ne cessent de crotre. Cet engouement sexplique par des cots logicielles quasiment nulles et de la disposition de milliers dutilitaires pour traiter tous les domaines technolo- giques actuelles : gomatique, traitement dimage, codeur multimdia, asservissement ,etc. Cest autant de communauts qui soutiennent et qui dveloppent activement ces programmes, leur garantissant une performance et une abilit proches voir meilleurs que leur quivalent propritaires. Linvestissement rside uniquement dans la formation et lacquisition des connaissances ncessaires au dveloppement. Le succs de GNU/Linux dans lembarqu nest plus dmontrer, en dmontre la multiplication et le succs des entreprises- associations dispensant des formations ou proposant des cartes lectroniques bas cots (Armadeus, Free-Electrons). Ces solutions prsentent des rels avantages pour les petites entreprises et les pays en voie de dveloppement. Ce projet fut une vritable exprience dans la recherche et le dveloppement que jai eu un trs grand plaisir mener. 45 TABLE DES FIGURES TABLE DES FIGURES Table des gures 1 Le groupe Technology & Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 Logos de la socit RheinBrucke Consulting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3 La zone dactivit vue par la socit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4 Les projets du laboratoire en 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5 Le cycle en V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 6 Rle dun systme dexploitation - Source : wikipdia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 7 Lordonnanceur dun noyau - Source : wikipdia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 8 La gestion de la mmoire au sein dun noyau Source : wikipdia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 9 Reprsentation de la mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 10 Adressage en mode protg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 11 Reprsentation de la mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 12 Reprsentation de la mmoire pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 13 Mcanisme simpli de la pagination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 14 Vision schmatique dun noyau monolithique modulaire - Source : wikipdia . . . . . . . . . . . . . . . . . . . . . 16 15 Diffrents chargeurs de dmarrage sous GNU/BSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 (a) Grub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 (b) Lilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 (c) SysLinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 16 Logo de GNU - Source : wikipdia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 Tux la mascotte de Linux - Source : wikipdia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 18 Cycle de dveloppement - Source : Association Free-Electrons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 Segmentation sous Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 20 Pagination sous Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 21 Les diffrents dossiers du noyau et le type de code quils contiennent . . . . . . . . . . . . . . . . . . . . . 21 22 Taille des diffrents rpertoires - Source : Association Free Electrons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 23 Dmarrage de knoppix avec framebuffer - Source : Wikipdia [6] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 24 Logo de lentreprise Armadeus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 25 Les cartes de dveloppement de lAPF27 et APF27Dev . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 (a) La carte processeur APF27 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 (b) La carte processeur APF27DevFull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 (c) Les deux cartes assembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 26 Caractristiques de lAPF27 et APF27Dev chez T & S - Le nombre de I/O est relatif au nombre de module activs. . . . . . . . . . . 25 27 Interface buildroot sous ncurses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 28 Composants logiciels utiliss sur la carte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 29 Comparaison de la taille de la glibc et la uClibc en compilation statique . . . . . . . . . . . . . . . . . . . 28 30 Rpartition des diffrents composants au sein de la RAM de lAPF27 . . . . . . . . . . . . . . . . . . . . 28 31 Liens entre les diffrentes mmoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 32 Utilisation de la carte sur le rseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 33 cran P0430WQLB-T de la socit Densitron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 34 Interface de la puce HX5116 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 46 TABLE DES FIGURES TABLE DES FIGURES 35 Les premiers moniteurs RGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 36 Interface parallle 480x212 RGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 37 Chronogrammes des diffrents signaux de lcran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 (a) Format des donnes verticale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 (b) Format des donnes horizontales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 (c) Forme de lhorloge et des donns sur le bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 38 SPI 3 wire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 39 Connexion dun bus SPI 3-wire vers un bus half duplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 (a) Connexion des bus MOSI et MISO ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 (b) mission de de 0xFF sur le bus pendant lenvoie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 40 Squence dallumage de lcran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 41 Initialisation de lcran dans la documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 42 La fractale de Mandelbrot sur PC avec la librarie SDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 43 Prsentation du NCP5810 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 44 Les deux logiciels de CAO utiliss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 (a) Logo de eagle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 (b) Logo de Kicad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 45 Schmatique de la carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 46 Premire version de la carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 47 Seconde version de la carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 (a) 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 (b) 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 47 BIBLIOGRAPHIE BIBLIOGRAPHIE Bibliographie [1] Nabaztag. http://www.nabaztag.com/fr/index.html. [2] Tux drod. http://tuxisalive.com/. [3] WIKIPDIA : Systme embarqu wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 18-mai-2010]. [4] PARROT : Ar drone. http://ardrone.parrot.com/parrot-ar-drone/fr/comment-ca-marche/ #start. [5] Site internet de la socit. http://technologyandstrategy.com/fr/groupe/Pages/chiffres. aspx, 2010. [6] WIKIPDIA : Framebuffer linux wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 15-septembre- 2010]. [7] Amadeus PROJECT : Canal irc de lassociation amadeus project - irc://irc.rezosup.org/#Armadeus. [8] Association ARMADEUS : Wiki de lassociation armadeus - http://www.armadeus.org/. [9] Armadeus PROJECT : Caractristiques de apf27 - http://www.armadeus.com/wiki/index.php?title= APF27. [10] Armadeus SYSTEMS : http://www.armadeus.com/english/products-processor_ boards-apf27.html. http://www.armadeus.com/english/products-processor_ boards-apf27.html. [11] WIKIPDIA : Liste des noyaux de systmes dexploitation wikipdia, lencyclopdie libre, 2009. [En ligne ; Page disponible le 4-fvrier-2010]. [12] Julien BOIBESSOT : Linux embarqu pour tous - http://www.unixgarden.com/index.php/embarque/ perles-de-mongueurs-analyse-de-logs-2. Linux Magazine 92, 2009. [13] Julien BOIBESSOT : Rmll 2008 - systme embarqu avec ajout de priphriques la demande - http://2008. rmll.info/Systeme-embarque-avec-ajout-de.html. 2008. [14] Fleur BROSSEAU : Les modules du noyau linux. http://www.unixgarden.com/index.php/ comprendre/les-modules-du-noyau-linux. [15] CORBET : Porting device drivers to the 2.6 kernel. http://lwn.net/Articles/driver-porting/. [16] Pierre-Yves DUVAL : Linux embarqu sur apf27. Rapport technique, Centre de physique des particules de Marseille, 2009. [17] Jean-Michel FRIEDT : Programmation et interfaage dun microcontrleur par usb sous linux : le 68hc908jb8. http://www.unixgarden.com/index.php/embarque/programmation-et-interfacage-d% e2%80%99un-microcontroleur-par-usb-sous-linux%c2%a0-le-68hc908jb8. [18] Xavier GARREAU : Bluetooth, installation et utilisation. http://www.unixgarden.com/index.php/ comprendre/bluetooth-installation-et-utilisation, 2008. [19] Matthieu KACZMAREK : Elf et virologie informatique. http://vxheavens.com/lib/vmk00.html. [20] L33CKMA : Le format elf : approche du point de vue dun infecteur. http://l33ckma.tuxfamily.org/?p= 15. [21] Lyce Henri LORITZ : Les diodes. http://www.ac-nancy-metz.fr/pres-etab/loritz/pre_bac/ ssi/cours/electronique/Diodes/diode.htm. 48 BIBLIOGRAPHIE BIBLIOGRAPHIE [22] Frdric MORAIN-NICOLIER : Dtection de motifs : exploitation de la phase (suite de linter-corrlation). http://pixel-shaker.fr/fr/2008/12/ detection-de-motifs-exploitation-de-la-phase-suite-de-linter-correlation/ #toc-localisation-du-motif-dans-limage. [23] Adaptateur VGA "SYNC-ON-GREEN". [24] Pier Luc PETITCLERC : Gnu diff & gnu patch : How to apply product patches. [25] Benjamin ROUX : Ecriture de driver sous linux grce au langage c. http://broux.developpez.com/ articles/c/driver-c-linux/. [26] Jean-Michel Friedt SIMON GUINOT : rception dimages satellites : utilisation dun systme embarqu. http: //www.unixgarden.com/index.php/embarque/reception-d%E2%80%99images-satellites% C2%A0-utilisation-d%E2%80%99un-systeme-embarque. [27] Javier VALCARCE : Tv video signal generator with arduino. http://www.javiervalcarce.eu/wiki/TV_ Video_Signal_Generator_with_Arduino, April 2009. [28] WIKIPEDIA : Video graphics array wikipedia, the free encyclopedia, 2010. [Online ; accessed 5-February-2010]. [29] WIKIPEDIA : Gerber le wikipedia, the free encyclopedia, 2010. [Online ; accessed 9-February-2010]. [30] WIKIPEDIA : Flash memory wikipedia, the free encyclopedia, 2010. [Online ; accessed 15-February-2010]. [31] WIKIPEDIA : Types of capacitor wikipedia, the free encyclopedia, 2010. [Online ; accessed 10-February-2010]. [32] WIKIPEDIA : Organic led wikipedia, the free encyclopedia, 2010. [Online ; accessed 26-February-2010]. [33] WIKIPEDIA : Block (data storage) wikipedia, the free encyclopedia, 2009. [Online ; accessed 15-February-2010]. [34] WIKIPDIA : Processeur arm wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 07-avril-2010]. [35] WIKIPDIA : Noyau de systme dexploitation wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 4-fvrier-2010]. [36] WIKIPDIA : Serial peripheral interface wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 5-fvrier-2010]. [37] WIKIPDIA : Multitche premptif wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 11-fvrier- 2010]. [38] WIKIPDIA : Grep wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 17-fvrier-2010]. [39] WIKIPDIA : Polarisation (optique) wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 26-fvrier- 2010]. [40] WIKIPDIA : Phase (onde) wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 26-fvrier-2010]. [41] WIKIPDIA : Champ lectrique wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 26-fvrier- 2010]. [42] WIKIPDIA : Diode lectroluminescente organique wikipdia, lencyclopdie libre, 2010. [En ligne ; Page dispo- nible le 26-fvrier-2010]. [43] WIKIPDIA : cran cristaux liquides wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 26- fvrier-2010]. [44] WIKIPDIA : Ordonnancement dans les systmes dexploitation wikipdia, lencyclopdie libre, 2010. [En ligne ; Page disponible le 17-mars-2010]. [45] Lcd controller & driver ics. http://www.tstonramp.com/~pddwebacc/lcd_ics.htm. [46] Arduino wire library. http://arduino.cc/en/Reference/Wire, 2010. [47] Le format elf. http://asm-x86.fr/le-format-elf_a8. [48] Crer un chier elf sans mme gnu/ld. http://www.les-ziboux.rasama.org/elf-without-ld.html. [49] La gestion de la mmoire. http://www.commentcamarche.net/contents/systemes/memoire.php3. [50] La mmoire virtuelle. http://cui.unige.ch/~billard/systemeII/cours6.html. [51] Platform devices and drivers. http://www.mjmwired.net/kernel/Documentation/driver-model/ platform.txt. 49 BIBLIOGRAPHIE BIBLIOGRAPHIE [52] Overview of linux kernel spi support. http://www.mjmwired.net/kernel/Documentation/spi/ spi-summary. [53] The linux kernel api. http://www.kernel.org/doc/htmldocs/kernel-api/index.html. [54] Rgb video out. http://www.eecg.toronto.edu/~tm4/rgbout.html. [55] Mx2 framebuffer driver. http://www.linux-fbdev.org/HOWTO/index.html. [56] Le logiciel buildroot. http://buildroot.uclibc.org/. [57] Crer et lancer une application au format elf partir du systme de chier. http://a.michelizza.free.fr/ pmwiki.php?n=TutoOS.Elf. [58] Eagle 3d. http://www.matwei.de/doku.php?id=en:eagle3d:eagle3d, 2010. 50 ANNEXE A. THE GNU GENERAL PUBLIC LICENCE A The GNU General Public Licence The following is the text of the GNU General Public Licence, under the terms of which this software is distrubuted. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. A.1 Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free softwareto make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundations software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs ; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps : (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each authors protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modied by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reect on the original authors reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyones free use or not licensed at all. The precise terms and conditions for copying, distribution and modication follow. A.2 Terms and conditions for copying, distribution and modication 0. This License applies to any programor other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The Program, below, refers to any such program or work, and a work based on the Program means either the Program or any derivative work under copyright law : that is to say, a work containing the Program or a portion of it, either verbatim or with modications and/or translated into another language. (Hereinafter, translation is included without limitation in the term modication.) Each licensee is addressed as you. Activities other than copying, distribution and modication are not covered by this License ; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents 51 A.2. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ANNEXE A. THE GNU GENERAL PUBLIC LICENCE constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Programs source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty ; keep intact all the notices that refer to this License and to the absence of any warranty ; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modications or work under the terms of Section 1 above, provided that you also meet all of these conditions : (a) You must cause the modied les to carry prominent notices stating that you changed the les and the date of any change. (b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. (c) If the modied program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception : if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modied work as a whole. If identiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you ; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following : (a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange ; or, (b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange ; or, (c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface denition les, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. 52 A.2. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ANNEXE A. THE GNU GENERAL PUBLIC LICENCE If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims ; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program species a version number of this License which applies to it and any later version, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation ; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. Because the Program is licensed free of charge, there is no warranty for the Program, to the extent permitted by applicable law. except when otherwise stated in writing the copyright holders and/or other parties provide 53 A.3. APPENDIX : HOW TO APPLY THESE TERMS TO YOUR NEW PROGRAMS ANNEXE A. THE GNU GENERAL PUBLIC LICENCE the program as is without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and tness for a particular purpose. The entire risk as to the quality and performance of the Program is with you. Should the Program prove defective, you assume the cost of all necessary servicing, repair or correction. 12. In no event unless required by applicable law or agreed to in writing will any copyright holder, or any other party who may modify and/or redistribute the program as permitted above, be liable to you for damages, including any general, special, incidental or consequential damages arising out of the use or inability to use the program (including but not limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of the Program to operate with any other programs), even if such holder or other party has been advised of the possibility of such damages. END OF TERMS AND CONDITIONS A.3 Appendix : How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source le to most effectively convey the exclusion of warranty ; and each le should have at least the copyright line and a pointer to where the full notice is found. <one line to give the programs name and a brief idea of what it does.> Copyright (C) 19yy <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode : Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type show w. This is free software, and you are welcome to redistribute it under certain conditions; type show c for details. The hypothetical commands show w and show c should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than show w and show c ; they could even be mouse-clicks or menu itemswhatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a copyright disclaimer for the program, if necessary. Here is a sample ; alter the names : Yoyodyne, Inc., hereby disclaims all copyright interest in the program Gnomovision (which makes passes at compilers) written by James Hacker. 54 A.3. APPENDIX : HOW TO APPLY THESE TERMS TO YOUR NEW PROGRAMS ANNEXE A. THE GNU GENERAL PUBLIC LICENCE <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. 55 ANNEXE B. CODE SOURCES B Code sources B.1 Module Noyau 1 / * 2 * Display Driver for hx5116 controler for AMOLED 3 * 4 * Copyright (c) 2009 Fabien Marteau - ARMadeus Systems 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * / 11 12 #include <linux/module.h> 13 #include <linux/kernel.h> 14 #include <linux/init.h> 15 #include <linux/platform_device.h> 16 #include <linux/mutex.h> 17 #include <linux/fb.h> 18 #include <linux/delay.h> 19 20 #include <linux/display.h> 21 #include <linux/spi/spi.h> 22 23 #include <linux/version.h> 24 #include <mach/imxfb.h> / * Backlight machinfo struct is defined here * / 25 #include <mach/hardware.h> 26 #include <mach/gpio.h> 27 28 #include <video/LCD_TS.h> 29 30 #define DRIVER_NAME " l c d _ t s " 31 #define DRIVER_VERSION " 0. 1 " 32 33 static int lcd_ts_write(struct lcd_ts * lcd_ts_dev,u8 address, u16 data){ 34 35 u8 command[2]; 36 int ret; 37 / * Address * / 38 command[0] = (address << 1) | HX5116_SPI_WRITE; 39 command[1] = data; 40 ret = spi_write(lcd_ts_dev->spi, command, 2); 41 if (ret < 0) 42 printk("ERROR: can t wr i t e on hx5116 \ n"); 43 44 } 45 46 static int lcd_ts_init_screen( struct lcd_ts * lcd_ts_dev){ 47 48 / * gpio_set_value(lcd_ts_dev->resetpin,1); * / 49 50 / * initial procedure for 24-bit parallel RGB (DE) * / 51 lcd_ts_write (lcd_ts_dev, 0x04, 0x23); / * set display mode 24-bit parallel RGB (DE) * / 52 lcd_ts_write (lcd_ts_dev, 0x05, 0x82); / * set display mode * / 53 lcd_ts_write (lcd_ts_dev, 0x07, 0x0F); / * set driver capability * / 54 lcd_ts_write (lcd_ts_dev, 0x34, 0x18); / * set display timing * / 55 lcd_ts_write (lcd_ts_dev, 0x35, 0x28); / * set display timing * / 56 lcd_ts_write (lcd_ts_dev, 0x36, 0x16); / * set display timing * / 57 lcd_ts_write (lcd_ts_dev, 0x37, 0x01); / * set display timing * / 58 lcd_ts_write (lcd_ts_dev, 0x02, 0x02); / * OTP On * / 59 lcd_ts_write (lcd_ts_dev, 0x0A, 0x79); / * VGHVGL=+/-6V * / 60 lcd_ts_write (lcd_ts_dev, 0x09, 0x20); / * VGAM1OUT=4.85V * / 61 lcd_ts_write (lcd_ts_dev, 0x10, 0x6A); / * set R slop * / 62 lcd_ts_write (lcd_ts_dev, 0x11, 0x6A); / * set G slop * / 63 lcd_ts_write (lcd_ts_dev, 0x12, 0x68); / * set B slop * / 64 lcd_ts_write (lcd_ts_dev, 0x13, 0x00); / * set R_0 * / 65 lcd_ts_write (lcd_ts_dev, 0x14, 0x04); / * set R_10 * / 56 B.1. MODULE NOYAU ANNEXE B. CODE SOURCES 66 lcd_ts_write (lcd_ts_dev, 0x15, 0x05); / * set R_36 * / 67 lcd_ts_write (lcd_ts_dev, 0x16, 0x05); / * set R_80 * / 68 lcd_ts_write (lcd_ts_dev, 0x17, 0x04); / * set R_124 * / 69 lcd_ts_write (lcd_ts_dev, 0x18, 0x03); / * set R_168 * / 70 lcd_ts_write (lcd_ts_dev, 0x19, 0x02); / * set R_212 * / 71 lcd_ts_write (lcd_ts_dev, 0x1A, 0x02); / * set R_255 * / 72 lcd_ts_write (lcd_ts_dev, 0x1B, 0x00); / * set G_0 * / 73 lcd_ts_write (lcd_ts_dev, 0x1C, 0x06); / * set G_10 * / 74 lcd_ts_write (lcd_ts_dev, 0x1D, 0x05); / * set G_36 * / 75 lcd_ts_write (lcd_ts_dev, 0x1E, 0x06); / * set G_80 * / 76 lcd_ts_write (lcd_ts_dev, 0x1F, 0x06); / * set G_124 * / 77 lcd_ts_write (lcd_ts_dev, 0x20, 0x05); / * set G_168 * / 78 lcd_ts_write (lcd_ts_dev, 0x21, 0x05); / * set G_212 * / 79 lcd_ts_write (lcd_ts_dev, 0x22, 0x07); / * set G_255 * / 80 lcd_ts_write (lcd_ts_dev, 0x23, 0x00); / * set G_0 * / 81 lcd_ts_write (lcd_ts_dev, 0x24, 0x07); / * set B_10 * / 82 lcd_ts_write (lcd_ts_dev, 0x25, 0x06); / * set B_36 * / 83 lcd_ts_write (lcd_ts_dev, 0x26, 0x07); / * set B_80 * / 84 lcd_ts_write (lcd_ts_dev, 0x27, 0x07); / * set B_124 * / 85 lcd_ts_write (lcd_ts_dev, 0x28, 0x06); / * set B_168 * / 86 lcd_ts_write (lcd_ts_dev, 0x29, 0x04); / * set B_212 * / 87 lcd_ts_write (lcd_ts_dev, 0x2A, 0x07); / * set B_255 * / 88 lcd_ts_write (lcd_ts_dev, 0x06, 0x03); / * set display on * / 89 90 / * gpio_set_value(lcd_ts_dev->resetpin,1); * / 91 } 92 static int lcd_ts_probe (struct spi_device * spi_device){ 93 94 95 printk("LCD SPI Bus Re g i s t r a t i o n \ n"); 96 struct lcd_ts * lcd_data; 97 int err = -EINVAL; 98 lcd_data = (struct lcd_ts * )(spi_device->dev.platform_data); 99 lcd_data->init(spi_device); / * Initialise GPIO * / 100 101 lcd_data->spi = spi_device; 102 103 lcd_data->spi->mode = SPI_MODE_0; 104 lcd_data->spi->bits_per_word = 8; 105 lcd_data->spi->dev.power.power_state = PMSG_ON; 106 err = spi_setup(lcd_data->spi); 107 printk(" Renvoi e du s e t up %i \ n",err); 108 109 lcd_ts_init_screen(lcd_data); 110 return 0; 111 112 } 113 114 static int lcd_ts_remove(struct spi_device * spi_device){ 115 116 struct lcd_ts * lcd_data ; 117 lcd_data = (struct lcd_ts * )(spi_device->dev.platform_data); 118 119 lcd_data->exit(spi_device); / * Free GPIO * / 120 / * Init Sequence * / 121 lcd_data->reset(0); 122 123 return 0; 124 } 125 126 static int lcd_ts_shutdown(struct spi_device * spi_device){ 127 128 return 0; 129 130 } 131 132 static int lcd_ts_suspend(struct spi_device * spi_device){ 133 return 0; 134 135 136 } 137 static int lcd_ts_resume(struct spi_device * spi_device){ 138 139 return 0; 140 141 } 142 static struct spi_driver lcd_ts_driver = { 57 B.2. CODE DESSAI SDL - FRACTALE DE MANDELBROT ANNEXE B. CODE SOURCES 143 .probe = lcd_ts_probe, 144 .remove = lcd_ts_remove, 145 .shutdown = lcd_ts_shutdown, 146 .suspend = lcd_ts_suspend, 147 .resume = lcd_ts_resume, 148 .driver = { 149 .name = DRIVER_NAME, 150 .owner = THIS_MODULE, 151 }, 152 }; 153 154 155 static int __init lcd_ts_init(void) 156 { 157 printk(" Loadi ng LCD Dr i ve r modul e \ n"); 158 int i; 159 i = spi_register_driver(&lcd_ts_driver); 160 printk(" Renvoi e : %i \ n",i); 161 return i; 162 163 } 164 165 static void __exit lcd_ts_exit(void) 166 { 167 printk(" Unl oadi ng LCD Dr i ve r modul e \ n"); 168 spi_unregister_driver(&lcd_ts_driver); 169 170 171 } 172 173 module_init(lcd_ts_init); 174 module_exit(lcd_ts_exit); 175 176 MODULE_AUTHOR("HEINRICH Yanni ck <yageek@f r ee . f r >"); 177 MODULE_DESCRIPTION("HX5116 AMOLED Dr i ve r "); 178 MODULE_LICENSE("GPL"); B.2 Code dessai SDL - Fractale de MandelBrot 1 / * 2 ============================================================================ 3 Name : Mandel.c 4 Author : HEINRICH Yannick 5 Version : 1 6 Copyright : GPL 7 Description : Mandelbrot elements C, Ansi-style 8 ============================================================================ 9 * / 10 11 #include <stdio.h> 12 #include <stdlib.h> 13 #include<SDL/SDL.h> 14 15 / * 16 * DEFINE 17 * / 18 #define MAX_ITER 1000 19 #define WIDTH 1024 20 #define HEIGHT 768 21 #define XORIGIN WIDTH/2 22 #define YORIGIN HEIGHT/2 23 / * 24 * Variables 25 * / 26 SDL_Surface * ecran; 27 void pause() 28 { 29 int continuer = 1; 30 SDL_Event event; 31 32 while (continuer) 33 { 34 SDL_WaitEvent(&event); 35 switch(event.type) 58 B.2. CODE DESSAI SDL - FRACTALE DE MANDELBROT ANNEXE B. CODE SOURCES 36 { 37 case SDL_QUIT: 38 continuer = 0; 39 } 40 } 41 } 42 void affAxis(SDL_Surface * ecran){ 43 44 SDL_Rect rect; 45 rect.w = 1; 46 rect.h = 1; 47 int i; 48 / * 49 * Vertical AXIS 50 * / 51 rect.y = YORIGIN; 52 for(i=0;i< WIDTH;i++){ 53 rect.x = i; 54 SDL_FillRect(ecran,&rect,SDL_MapRGB(ecran->format,255,0,0)); 55 } 56 / * 57 * HORIZONTAL AXIS 58 * / 59 rect.x = XORIGIN; 60 for(i=0;i < HEIGHT;i++){ 61 rect.y = i; 62 SDL_FillRect(ecran,&rect,SDL_MapRGB(ecran->format,255,0,0)); 63 } 64 65 66 } 67 68 int main(void) { 69 / * 70 * SDL INIT 71 * / 72 if (SDL_Init(SDL_INIT_VIDEO) == -1) // Demarrage de la SDL. Si erreur alors... 73 { 74 fprintf(stderr, " Er r e u r d i n i t i a l i s a t i o n de l a SDL : %s \ n", SDL_GetError()); // Ecriture de lerreur 75 exit(EXIT_FAILURE); // On quitte le programme 76 } 77 78 ecran = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_HWSURFACE); 79 SDL_WM_SetCaption(" Mandel v0 . 1 ",NULL); 80 81 / * 82 * SDL Color 83 * / 84 Uint32 blackcolor = SDL_MapRGB(ecran->format,0,0,0); 85 Uint32 itercolor; 86 SDL_Rect rect; 87 rect.h = 1; 88 rect.w = 1; 89 90 / * 91 * Mandelbrot program 92 * / 93 double xtemp,x,y,xp,yp,factor; 94 int i,j,iter; 95 96 / * 97 * Scale Factor 98 * / 99 factor = 200.0; 100 for(i=0; i< WIDTH;i++){ 101 for(j=0;j< HEIGHT;j++){ 102 //Start with 0; 103 x=0; 104 y=0; 105 iter=0; 106 xp = (i - XORIGIN)/factor; 107 yp = (j - YORIGIN)/factor; 108 while((x * x + y * y <= 4) && iter < MAX_ITER){ 109 xtemp = x * x - y * y +xp; 110 y = 2 * x * y + yp; 111 x = xtemp; 59 B.3. AJOUT DE LA LIBRAIRIE CWIID DANS BUILDROOT ANNEXE B. CODE SOURCES 112 iter++; 113 } 114 //printf("Point (%i,%i) - Iterations %i\n",i,j,iter); 115 rect.x = i; 116 rect.y = j; 117 if(iter == MAX_ITER) SDL_FillRect(ecran,&rect,blackcolor); 118 else{ 119 120 itercolor = SDL_MapRGB(ecran->format,0,0,iter * 30); 121 SDL_FillRect(ecran,&rect,itercolor); 122 } 123 } 124 } 125 //affAxis(ecran); 126 SDL_Flip(ecran); 127 pause(); 128 129 SDL_Quit(); 130 131 return EXIT_SUCCESS; 132 } B.3 Ajout de la librairie CWIID dans buildroot Le code suivant prsente le chier makele ncessaire au rajout de la librarie CWIID au sein de la carte embarque, ainsi que les patchs ncessaires. Elle se base sur la pile ofciel de Linux pour la gestion des protocoles Buettoth (BlueZ). B.3.1 libcwiid.mk 1 ############################################################# 2 # 3 # libcwiid 4 # 5 ############################################################# 6 CWIID_VERSION:=0.6.00 7 CWIID_SOURCE:=cwiid-$(CWIID_VERSION).tgz 8 CWIID_SITE:=http://abstrakraft.org/cwiid/downloads 9 CWIID_DIR:=$(BUILD_DIR)/cwiid-$(CWIID_VERSION) 10 11 12 $(DL_DIR)/$(CWIID_SOURCE): 13 $(call DOWNLOAD,$(CWIID_SITE),$(CWIID_SOURCE)) 14 15 $(CWIID_DIR)/.source: $(DL_DIR)/$(CWIID_SOURCE) 16 $(ZCAT) $(DL_DIR)/$(CWIID_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) - 17 touch $@ 18 19 $(CWIID_DIR)/.patched: $(CWIID_DIR)/.source 20 toolchain/patch-kernel.sh $(CWIID_DIR) package/libcwiid * .patch 21 # $(CONFIG_UPDATE) $(CWIID_DIR) 22 touch $@ 23 24 $(CWIID_DIR)/.configured: $(CWIID_DIR)/.patched 25 (cd $(CWIID_DIR); rm -rf config.cache;autoconf; \ 26 $(TARGET_CONFIGURE_OPTS) \ 27 $(TARGET_CONFIGURE_ARGS) \ 28 ./configure \ 29 --target=$(GNU_TARGET_NAME)\ 30 --host=$(GNU_TARGET_NAME) \ 31 --build=$(GNU_HOST_NAME)\ 32 --prefix=$(STAGING_DIR)/usr \ 33 --sysconfdir=$(STAGING_DIR)/etc \ 34 --disable-ldconfig\ 35 --without-python ;\ 36 ) 37 38 touch $@ 39 40 $(CWIID_DIR)/.compiled: $(CWIID_DIR)/.configured 41 $(MAKE1) CC=$(TARGET_CC) CC_FOR_BUILD=" $ (HOSTCC) " -C $(CWIID_DIR) 42 touch $@ 43 60 B.3. AJOUT DE LA LIBRAIRIE CWIID DANS BUILDROOT ANNEXE B. CODE SOURCES 44 $(STAGING-DIR)/usr/lib/libcwiid.so: $(CWIID_DIR)/.compiled 45 $(MAKE) -C $(CWIID_DIR) install 46 cp -dpf $(STAGING_DIR)/usr/lib/libcwiid * .so * $(TARGET_DIR)/usr/lib/ 47 48 libcwiid cwiid: uclibc $(STAGING-DIR)/usr/lib/libcwiid.so 49 50 libcwiid-clean cwiid-clean: 51 $(MAKE) DESTDIR=$(TARGET_DIR) CC=$(TARGET_CC) -C $(CWIID_DIR) uninstall 52 -$(MAKE) -C $(SDL_DIR) clean 53 54 libcwiid-dirclean cwiid-dirclean: 55 rm -rf $(CWIID_DIR) 56 ############################################################# 57 # 58 # Toplevel Makefile options 59 # 60 ############################################################# 61 ifeq ($(strip $(BR2_PACKAGE_LIBCWIID)),y) 62 TARGETS+=cwiid 63 endif B.3.2 congure_.patch 1 --- cwiid-0.6.00.org/configure.ac 2007-08-27 02:27:58.000000000 +0200 2 +++ cwiid-0.6.00/configure.ac 2010-03-01 17:28:00.425401362 +0100 3 @@ -124,11 +124,6 @@ else 4 fi 5 AC_SUBST(LDCONFIG) 6 7 -pkg_modules=" gt k +2.0 >= 2 . 0 . 0 gt hr e ad 2.0 " 8 -PKG_CHECK_MODULES([GTK], [$pkg_modules]) 9 -AC_SUBST(GTK_CFLAGS) 10 -AC_SUBST(GTK_LIBS) 11 - 12 AC_OUTPUT( 13 [Makefile] 14 [defs.mak] 15 @@ -137,7 +132,6 @@ AC_OUTPUT( 16 [man/Makefile] 17 [libcwiid/Makefile] 18 [wmdemo/Makefile] 19 - [wmgui/Makefile] 20 [wminput/Makefile] 21 [wminput/plugins/Makefile] 22 [wminput/plugins/ir_ptr/Makefile] B.3.3 makele_in.patch 1 --- cwiid-0.6.00.org/Makefile.in 2007-07-28 20:47:03.000000000 +0200 2 +++ cwiid-0.6.00/Makefile.in 2010-03-01 17:28:08.337399709 +0100 3 @@ -3,7 +3,7 @@ 4 include @top_builddir@/defs.mak 5 6 LIB_DIRS = libcwiid 7 -BIN_DIRS = wmgui wminput lswm 8 +BIN_DIRS = wminput lswm 9 DOC_DIRS = man doc 10 ifdef PYTHON 11 BIND_DIRS = python 61