Ta kontakt

Kursplan

Introduksjon

  • Rask historie om Linux
  • Lisensiering
  • Versjonering av kjernen
  • Utgivelsessyklus
  • Kjernetrær
  • Hovedgren (mainline)
  • Kjernemodus kontra brukerspace
  • Mekanisme kontra politikk
  • Alternativer for kjerekjøreprogrammer
  • RTOS vs. Linux

Minnehåndtering

  • Virtuell minne kontra fysisk minne
  • Minneallokering i kjernen
  • Sider (pages)
  • Soner (zones)
  • API
  • Slab-allocator

Kjernelapper (Kernel Patches)

  • Livssyklus
  • git
  • Kjerekildekode
  • Lage lapp (patch)
  • Sjekk lapp
  • Fiks lapp
  • Lever lapp
  • Kodesjekk og godkjenning

Kjernelmoduler

  • Hente kjerekildekode
  • Konfigurere / bygge / installere
  • Enhetsdrivere (statisk sammenkoblet, lastes ved kjøretid)
  • init / exit
  • Lisensiering
  • EXPORT_SYMBOL GPL
  • Makefile for moduler utenfor trestrukturen (out of tree)
  • module-init-tools
  • Modul i kjernens trestruktur
  • Kconfig
  • Parameteroverføring
  • sparse (statiske analyseverktøy)

Karakterdrivere (Char Drivers)

  • Arkitektur
  • Bruker/kjerne-grensesnitt
  • I/O-underystemet
  • VFS (Virtual File System)
  • sysfs (enheter, busses, drivere, klasser),
  • kobject/ktype/kset
  • Linux-kjernens drivermodell
  • Enhetsfiler
  • Karakterdriver
    • Initialisering
    • Registrering
    • open, release
    • cdev, cdev add, cdev del,…
    • Hoved-– og undertall
    • udev, udevmonitor, udevadm

Avanserte operasjoner for karakterdrivere

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • Brukerspace-API
  • Kjernespace-API
  • Prosesslivssyklus
  • Sperre/blokkere
  • Sove/våkne
  • Ventekø (wait queue)
  • Thundering herd-problemet
  • poll/select

Kjernedegging (Kernel Debugging)

  • Feilsøking
  • Feilsøke kjernen
    • Binærsøking med git
    • Feilsøkestøtte fra kjernen
    • printk syslogd, klogd, loggnivåer, hastighetsbegrensning, feilsøkningsnivåer, selektiv feilsøking av underystemer
    • Feilsøking ved å hente data fra debugfs
    • Oops-feilsøking, simulere Oops
    • Magic SysRq-tasten
    • kgdb/kdb
    • JTAG

Sporingsverktøy (Tracing)

  • gcov
  • lcov
  • oprofile
  • ftrace
    • nop-tracer
    • funksjonstracer
    • sched switch-tracer
    • function graph-tracer
    • dynamisk tracer
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interrupper

  • Interrupper kontra polling
  • Interruppsprosessen
  • Programseksjoner
  • Reentrancy
  • Hendelser
  • Interruppsbehandler
  • Delt interruppsbehandler
  • Interruppsflyt
  • Interruppskontroll

Utsatt arbeid (Deferring Work)

  • top/bottom halves
  • softirqs
  • tasklets
  • arbeidskøer (work queues)
  • trådede interrupper

Konkurransesituasjoner (Concurrency)

  • Kritisk område
  • Atomiske operasjoner
  • Konkurranseforhold (race condition)
  • Synkronisering
  • Låsing
  • Låseløsninger
  • Deadlock
  • Contention
  • Hva skal låses?
  • Hva kan brukes?
    • atomiske operasjoner
    • spin locks
    • leser-skriver spin locks
    • semafork
    • binær semafork
    • mutex
    • leser-skriver semafork
    • fullføringsvariabler (completion variables)
    • sekvensielle låser
    • deaktivere preempting
    • rekkefølge og barriärer

Tid

  • HZ
  • Jiffies
  • store/små forsinkelser
  • kjernetimere

Maskinvare-I/O

  • I/O-poter
  • I/O-minne
  • Hvordan håndtere bivirkninger ved tilgang til registre?

Kommunikasjon mellom bruker og kjerne

  • put(get)_user()
  • copy to(from)_user()
  • Kjerne-I/O
  • minnekartlegging
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Bærekraft (Portability)

  • Ordstørrelse (word size)
  • Opaque typer
  • signerte/usignerte char
  • Datajustering (data alignment)
  • Integral opprykking (integral promotion)
  • Gjenbruk av kode
  • Endianess
  • Systemticking
  • Sidestørrelse
  • Instruksjonsrekkefølge
  • SMP/preempting/høyt minne

Med mindre annet er oppgitt, er innholdet og dette kursoppsettet lisensiert under Creative Commons Erkjennelse-IkkeKommerSiell-DelPåLignendeVilkår 4.0 internasjonale (CC BY-NC-SA 4.0).

Krav

  • Grunnleggende kjennskap til bruk av et Linux-system som sluttbruker
  • Grunnleggende kjennskap til et kommandolinjeskall
  • Grunnleggende kunnskap om utvikling i brukerspace / applikasjonsutvikling
  • Mellomnivå kunnskap om C-programmering
  • Bør ha deltatt på Arkitektur for innbygde Linux-systemer før (sterkt anbefalt!) og/eller ha god forståelse for de emnene som behandles der
 35 Timer

Antall deltakere


Pris per deltaker

Referanser (3)

Kommende kurs

Relaterte kategorier