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
trace-cmd/kernelshark
  • perfekt
  • LTTng
  • Avbryter
  • 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
     35 timmar

    Antal deltagare



    Price per participant

    Vittnesmål (5)

    Relaterade Kategorier