Kursplan
Introduktion
- snabb historik över GNU/Linux licensiering kärnversionering versionscykel kärnträd huvudlinje kärna vs. användarutrymme mekanism kontra policy kärna drivrutin alternativ RTOS vs. Linux
Minne Management
- Virtuellt minne kontra fysiskt minne minnesallokering i kärna sidor zoner API-skiva
Kernel Patch
- livscykel git kärnkälla skapa patch check patch fix patch ship patch granskad kod
Kärnmoduler
- hämta kärnkällor konfigurera/bygga/installera enhetsdrivrutiner (statiskt länkade, laddade vid körning) init/exit licensing EXPORTERA SYMBOL GPL out of tree makefile modul-init-tools modul i kärnträdet Kconfig-parameter passerar sparse
Char drivrutiner
- arkitektur användar/kärngränssnitt I/O-undersystem VFS sysfs (enheter, buss, drivrutiner, klasser), kobject/ktype/kset linux kärna drivrutin modell enhetsfiler char drivrutin initiering registrering öppen, release cdev, cdev add, cdev del,... dur/moll tal udev, udevmonitor, udevadm
Avancerade Charachter-drivrutiner
- ioctl olåst ioctl compat ioctl användarutrymme API kärna utrymme API process livscykel sova/blockera sova/vakna vänta kö åskande flockundersökning/välj
Kernel Debugging
- felsökning felsökning av kärnan binär sökning med git felsökningsstöd från kärnan printk syslogd, klogd, loglevels, hastighetsgräns, felsökningsnivåer, felsökning av selektiva delsystem felsökning genom att fråga debugfs oops felsökning, hävdar oops Magic SysRq Key kgdb/kdb JTAG
Spårning
- gcov lcov oprofile ftrace nop spårningsfunktion spårare schemalagd switch spårningsfunktion graf spårare dynamisk spårare
avbrott vs. avfrågningsavbrott programsektioner återinträdeshändelser avbrottshanterare delad avbrottshanterare avbryta flödesavbrottskontroll
- Uppskjutande arbete
övre/botten halvor softirqs tasklets arbetsköer gängade avbrott
- Samtidighet
kritisk region/sektion atomrace tillstånd synkronisering låsning låslösningar dödläge konflikt vad ska man låsa? vad kan användas? atomoperationer spinnlås läsare-skrivare spinnlås semafor binär semafor mutex läsare-skrivare semafor kompletteringsvariabler sekventiella lås inaktivera preemption orderig och barriärer
- Tid
HZ Jiffies stora/små fördröjningar kärntimers
- Hårdvara I/O
I/O-portar I/O-minne Hur hanterar man biverkningar när man kommer åt register?
- Användarkärna Communication
put(get)_user() copy to(from)_user() Kernel I/O minnesmapping procfs sysfs debugfs relayfs netlink ioctl
- Bärbarhet
ordstorlek ogenomskinliga typer signerade/osignerade char datajustering integral kampanjkod återanvändning endianess system tick sidstorlek instruktion beställning SMP/preemption/högt minne
- Förutom där annat anges innehåll och denna kursöversikt är licensierade under Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
Krav
- Grundläggande förtrogenhet med att använda ett GNU/Linux-system som slutanvändare
- Grundläggande förtrogenhet med ett kommandoradsskal
- Grundläggande kunskap om användarutrymme/applikationsutveckling
- Medellång C-programmeringskunskap
- Borde ha deltagit i Embedded GNU/Linux Systems Architecture tidigare (rekommenderas starkt!) och/eller ha en god förståelse för de ämnen som beskrivs där
Vittnesmål (5)
Edward är en fantastisk facilitator
Zibusiso Ncube - Agricatural Research Council
Kurs - Ionic 4 and Angular for Developers
Machine Translated
Miguel's knowledge of the subject was extensive. He made the training easy to understand and the flow was balanced; adding on to each section with new features as needed. He covered everything that was asked and answered each and every question thoroughly. It was a very pleasant experience.
Paul Coaton - SEMPCheck Services
Kurs - Flutter Development Bootcamp with Dart
That the trainer adapts to our needs
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Kurs - The Yocto Project - An Overview - hands-on
The trainer was enthusiastic, kind, and loved the topic
Isaac Murphy - Royal New Zealand Airforce
Kurs - Build Native iOS and Android Apps with Flutter
Learning the steps required to implement the MVVM model.