ebook img

Embedded Technologies: Vom Treiber bis zur Grafik-Anbindung PDF

337 Pages·2012·4.506 MB·German
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Embedded Technologies: Vom Treiber bis zur Grafik-Anbindung

Xpert.press DieReihe Xpert.press vermitteltProfessionals in den Bereichen Softwareentwicklung, InternettechnologieundIT-Managementaktuell und kompetentrelevantesFachwissenüber Technologienund ProduktezurEntwicklung und AnwendungmodernerInformationstechnologien. Joachim Wietzke Embedded Technologies Vom Treiber bis zur Grafik-Anbindung JoachimWietzke Karlsruhe Deutschland ISSN- ISBN---- ISBN----(eBook) DOI./---- BibliografischeInformationderDeutschenNationalbibliothek DieDeutscheNationalbibliothekverzeichnetdiesePublikationinderDeutschenNationalbibliografie; detailliertebibliografischeDatensindimInternetüberhttp://dnb.d-nb.deabrufbar. SpringerVieweg ©Springer-VerlagBerlinHeidelberg DasWerkeinschließlichallerseinerTeileisturheberrechtlichgeschützt.JedeVerwertung,dienichtaus- drücklichvomUrheberrechtsgesetzzugelassenist,bedarfdervorherigenZustimmungdesVerlags.Das giltinsbesonderefürVervielfältigungen,Bearbeitungen,Übersetzungen,MikroverfilmungenunddieEin- speicherungundVerarbeitunginelektronischenSystemen. DieWiedergabevonGebrauchsnamen,Handelsnamen,Warenbezeichnungenusw.indiesemWerkberech- tigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen-undMarkenschutz-Gesetzgebungalsfreizubetrachtenwärenunddahervonjedermann benutztwerdendürften. GedrucktaufsäurefreiemundchlorfreigebleichtemPapier SpringerViewegisteineMarkevonSpringerDE.SpringerDEistTeilderFachverlagsgruppeSpringer Science+BusinessMedia www.springer-vieweg.de Danksagung IndiesemBuchwurdeneinigeMaster-ArbeitenundVorlesungsbeiträgeausgewertet und teilweise integriert. Bei den Autoren, die im Folgenden alphabetisch genannt werden,bedankeichmichfürdiewertvollenBeiträge,fürihreDurchsichtundihre Genehmigung,dieQuellenzuverwenden. (cid:129) EnricoBedau:Linux-Treiber,JNI (cid:129) ElmarCochlovius:Multimedia (cid:129) ClemensFischer:Beispiele (cid:129) TobiasHolstein:Qt-HMIs (cid:129) AndreasKnirsch:MultiCore,Linux (cid:129) SimonKretschmer:QNX-Treiber,Debugging (cid:129) ChristianSteiger:Beispiele (cid:129) ManhTienTran:Java (cid:129) SergioVergata:VirtuelleMaschinen v Vorwort Designisnotjustwhatitlookslikeandfeelslike.Designishowitworks. [SteveJobs] Wir haben eine Idee oder sogar schon eine SW-Lösung. Nun muss sie noch auf einer Hardware realisiert werden. Übliche Boards laufen in einer Hauptschleife ohneBetriebssystemodersienutzenLinuxoderQNX.WennunsereLösungenauf existierenden fertigen Geräten installiert werden sollen, könnten wir es auch mit Android oder iOS zu tun haben. Nun wollen wir aber nicht Betriebssysteme stu- dieren und uns auch nicht in sieben verschiedene Frameworks einarbeiten, deren Speicher- und Performance-Merkmaleundokumentiertsind, sondernwir möchten nurdieerforderlichenKenntnisseerwerben,umdasBoardundunsereApplikation inklusivedererforderlichenTreiberundInterrupt-RoutinenzumLaufenzubringen. AuchwollenwirunsereLösungnichtnocheinmalschreiben,diesmalangepasst aneinbeliebigesFenster-Framework,welchesdavonausgeht,dassdieganzeWelt alsSammlungvonFensternbeschreibbarist. Eigentlichwollenwirnurdievorlie- gendeHardwareunddie verfügbarenBedienoberflächenauf großenDisplaysnut- zen.MöglicherweiseschreibenwiraucheineHMIinJavaundbindensiezuunserer SWhinzu.DannbrauchtesgeschickteÜbergängezwischendenWeltenundfürdie Java-WeltbrauchteseinpaarHinweise,wiewirmitSpeicher,Garbage-Collection und Performance umgehen sollten. Vielleicht sollten wir auch verschiedene SW- Komponentenauf verschiedeneCores des Prozessors verteilen, eventuellvirtuali- sierenwirdafürauchCores,umdieKomponentenundihreKonfigurationvonein- anderunabhängigzurealisieren.AlledieseKenntnissesolltenabersofundiertsein, dasswirnicht,wieinderInformatik-GemeindesooftderFall,qualifiziertenAber- vii viii Vorwort glaubenwaltenlassenmüssen,welcherKnopfzuwelcherZeitzudrückenist,damit „esläuft“(das„EinHuhnschlachten-Phänomen“1). Und wenn dann die Applikation das erste Mal läuft, kann es sein, dass wir einenvielzulangsamenStartkonstatieren,einSpeicherleckodereinPerformance- ProblemdesGesamtsystemserkennen.Schlimmernoch,nacheinigerZeitbleibtdas Systemvollständigstehen,sogarderProzessorwirdkalt.AuchhierkönntenKapi- telüberüblicheProblememitSpeichermedienoderüberdasTracenundDebuggen einesSystemshilfreichsein.VielzuoftwirddieMethode„mitderKapuzeüberden KopfundderTaschenlampeinderHandindendunklenKellergehenunddasPro- blemsuchen“angewendet,das30Jahrealtesogenannte„printf-Debugging“.Einige vorgestelltekleineToolskönntenhelfen,FehlerzufindenoderauchneueIdeenfür eigeneToolszuentwickeln. NocheinWortzudenverwendetenBegriffen.DieKombinationausenglischen und deutschen Begriffen ist nicht immer schön, gelegentlich aber unvermeidlich. Die Bezeichnungen „eingebettete“ oder „technische“ Systeme geben nicht wirk- lich die Vorstellung wieder, die man von embedded Systemen hat, die sich durch knappe und effizient eingesetzte Ressourcen auszeichnen. Auch die Diskussionen umBindestricheoderGroß-/Kleinschreibunglassensichhiernichtwiederspruchs- freiführen(mankannroot-Verzeichniswirklichnichtgroßschreiben). Schonmöglich,dass einigeder eingestreutenGeschichtenzur Motivationnach Benzin riechen,daskönnteandenletzten 20JahrenArbeitfürBosch, Blaupunkt, Harman/Becker,JohnsonControlsundandereeuropäischeAutomobilherstellerlie- gen.DieseGeschichtensollenaberimmerauchdieRelevanzdesThemasüberdie AnekdoteundauchüberdenautomotivenBereichhinauszeigen. Ichhoffe,diesgelingt.VielSpaßbeimLesen. Karlsruhe,Januar2012 JoachimWietzke 1IneinemmalaysischenKurzgeschichtenbuchlasicheinmalübereinenEingeborenenstammauf einerInsel,dernochniemitderZivilisationzutunhatteundgeradeuntereinergroßenHungersnot litt.InletzterVerzweiflungschlachtetemanalsOpfergabeandieGöttereinHuhn.InderFolge- nachtstrandeteeinvollbeladenesSchiff,dasmanplündernkonnte.Wannimmerindenspäteren JahrenwiedereineHungersnotaufkam,wurdeeinHuhngeschlachtet,inderHoffnung,dassdas wieder funktionieren würde. Diese Vorgehensweise steht im Widerspruch zu embedded Vorge- hensweisen. Inhaltsverzeichnis 1 Einleitung..................................................... 1 2 Hauptschleife.................................................. 3 2.1 SeriellesEEPROM......................................... 3 2.2 Emulator ................................................. 4 2.3 JTAG-Adapter ............................................ 4 3 Betriebssysteme................................................ 5 3.1 Prozesse,Threads.......................................... 5 3.2 DerScheduler............................................. 6 3.3 Kernelspace,Userspace,Kernelmode,Usermode ............... 6 3.4 ZusammenspielmitderMMU ............................... 7 4 QNX.......................................................... 9 4.1 Microkernel .............................................. 9 4.2 Resource-Manager......................................... 10 4.3 Komponentensystem ....................................... 11 5 Linux......................................................... 13 5.1 Linux-Build .............................................. 15 5.2 LinuxalsZielplattform ..................................... 21 5.3 Kernelverkleinern ......................................... 26 6 StartphaseeinesSystems........................................ 29 6.1 AllgemeineBetrachtungen .................................. 32 6.1.1 AusführungsmodelleinerCPU ........................ 32 6.1.2 Phase1:Power-On,IPL .............................. 32 6.1.3 Phase2:Bootloader,AusführungdesStartupImage ...... 35 6.1.4 Phase3:StartdesOS ................................ 37 6.1.5 Booten:Zusammenfassung ........................... 37 6.2 BootenunterQNX......................................... 38 6.2.1 BeispielQNX-IPL .................................. 38 ix x Inhaltsverzeichnis 6.2.2 ErkennenderSystemkomponentenundKonfiguration..... 39 6.2.3 Kernel............................................. 41 6.3 QNXImagevarianten....................................... 42 6.3.1 IFS ............................................... 42 6.3.2 Flash-Filesystem .................................... 43 6.3.3 EFS............................................... 44 6.3.4 ETFS ............................................. 44 6.4 Beispiel-BuildfüreinBeagleBoard,QNX ..................... 44 6.4.1 BeagleBoard ....................................... 44 6.4.2 Bootvorgang ....................................... 45 6.4.3 Minimal-Buildfile ................................... 46 6.4.4 Beispiel-Konfigurationen............................. 47 6.4.5 FormatiereneinerETFS-Partition...................... 48 6.4.6 MMCpartitionierenundformatieren ................... 49 6.4.7 FlashenvonX-LoaderundU-Boot2.................... 50 6.4.8 FlashenvonIPLundIFS-Image ....................... 51 6.4.9 LogfileStartupX-LoaderundU-Boot,QNX............. 51 6.4.10 LogfileStartupIPL/QNX............................. 52 6.5 BootenunterLinux ........................................ 53 7 SpeichermodellfürdieApplikation .............................. 55 8 ResetundOn/off............................................... 57 8.1 ResetbeiOn .............................................. 57 8.2 ResetdurchWatchdog...................................... 60 8.2.1 SW-Watchdog ...................................... 61 8.2.2 PrioritätdesWD-Threads............................. 61 8.2.3 Reset-Strategie ..................................... 62 8.2.4 WelcheFehler-SituationensolleinWDlösen ............ 62 8.2.5 SW-DUMMY-Watchdog ............................. 63 8.2.6 Watchdog-Reset,Analysen ........................... 64 9 UmgangmitFlash-Memory ..................................... 67 9.1 Flash-Probleme ........................................... 67 9.2 Reclaim.................................................. 71 9.2.1 SnippeteinesReclaimers(QNX) ...................... 71 9.3 Notfall-Persistenz.......................................... 72 9.3.1 Persistenzrestaurieren ............................... 72 10 HDD.......................................................... 75 10.1 HDD-Probleme ........................................... 75 10.2 Fazit..................................................... 76 Inhaltsverzeichnis xi 11 Treiber........................................................ 77 11.1 Systemaufrufe............................................. 78 11.2 Linux-Treiber............................................. 78 11.2.1 Treiber/Kernel-Modul................................ 79 11.2.2 Builddeshello-Beispiels ............................. 81 11.3 Geräte,Devices ........................................... 83 11.3.1 Character-Devices................................... 83 11.4 KopierfunktionenzumÜberwindenderSpeicherkapselung....... 91 11.5 Mapping-FunktionzumÜberwindenderSpeicherkapselung...... 91 11.5.1 WarteschlangezumblockierendenLesen................ 93 11.6 Treiber-SnippetsfürLinux .................................. 94 11.6.1 BeispieleineseinfachenSystemaufrufs ................. 94 11.6.2 Beispieleinereinfachenchardev-Implementierung ....... 96 11.6.3 procfs,Datenaustausch...............................100 11.7 QNX-TreibermitResource-ManagerImplementierung ..........107 11.7.1 RegistrierendesResource-Managers ...................108 11.7.2 ImplementierenderDateioperationen...................110 11.7.3 FüllendesAnwort-Buffers: ...........................111 11.7.4 DerRückgabewert...................................111 12 Interrupts.....................................................113 12.1 Interrupt-Latenz...........................................114 12.1.1 AnforderungenanInterrupt-Service-Routinen(ISR) ......115 12.1.2 ImplementierungenderISR...........................116 12.1.3 Nested-Interrupts....................................117 12.2 Shared-Interrupts ..........................................118 12.2.1 Flankensteuerung ...................................118 12.2.2 Pegelsteuerung .....................................120 12.2.3 Zusammenfassung...................................121 13 InterruptsunterLinux .........................................123 13.1 Implementierungskonzepte..................................124 13.2 Interrupt-AblaufunterLinux ................................125 13.3 SW-SnippetsfürLinux .....................................126 13.3.1 RegistrierungeinesInterrupt-Handlers..................126 13.3.2 Deregistrierung .....................................127 13.3.3 Interrupt-Handler ...................................127 13.3.4 Shared-Interrupt-Handler.............................127 13.3.5 Design-Regeln......................................128 13.3.6 KritischeBereicheschützen...........................128 13.3.7 RingpufferoderDoppelpuffer .........................129 13.3.8 Interruptssperren ...................................130 13.3.9 EinzelneInterruptssperren/maskieren ..................131 13.3.10Spinlocks ..........................................132

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.