Course Outline

Invoering

    snelle geschiedenis van GNU/Linux-licenties kernelversiebeheer releasecyclus kernelbomen hoofdkernel vs. gebruikersruimtemechanisme vs. beleid kerneldriveralternatieven RTOS vs. Linux

Geheugen Management

    Virtueel geheugen versus fysiek geheugen geheugentoewijzing in kernelpaginazones API-plaat

Kernel-patch

    levenscyclus git kernelbron maak patchcontrole patchfix patch verzend patch gecontroleerde code

Kernelmodules

    kernelbronnen ophalen configureren/bouwen/installeren van apparaatstuurprogramma's (statisch gekoppeld, geladen tijdens runtime) init/exit-licenties EXPORTEREN SYMBOOL GPL uit boom makefile module-init-tools module in kernelboom Kconfig-parameter wordt sparse doorgegeven

Char-chauffeurs

    architectuur gebruiker/kernel interface I/O subsysteem VFS sysfs (apparaten, bus, stuurprogramma's, klassen), kobject/ktype/kset linux kernel driver model apparaatbestanden char driver initialisatie registratie open, release cdev, cdev add, cdev del,... grote/kleine nummers udev, udevmonitor, udevadm

Geavanceerde karakterbestuurderoperaties

    ioctl ontgrendeld ioctl compat ioctl gebruikersruimte API kernelruimte API proceslevenscyclus slapen/blokkeren slapen/wakker worden wachtrij donderende kudde poll/selecteren

Kernel-foutopsporing

    debuggen van bugs debuggen van de kernel binair zoeken met git debug-ondersteuning van kernel printk syslogd, klogd, loglevels, snelheidslimiet, debug-niveaus, debuggen van selectieve subsystemen debuggen door te bevragen debugfs oeps debuggen, bevestigen van oeps Magic SysRq Key kgdb/kdb JTAG

Traceren

    gcov lcov oprofile ftrace nop tracer functie tracer sched switch tracer functie grafiek tracer dynamische tracer
trace-cmd/kernelshark
  • perfect
  • LTTng
  • Onderbreekt
  • interrupts vs. polling interrupt programmasecties herintredingsgebeurtenissen interrupt handler gedeelde interrupt handler interrupt flow interrupt control

      Werk uitstellen

    bovenste/onderste helften softirqs tasklets werkwachtrijen threaded interrupts

      Gelijktijdigheid

    kritieke regio/sectie atomaire raceconditie synchronisatie vergrendeling vergrendelingsoplossingen impasse twist wat te vergrendelen? wat kan worden gebruikt? atomaire operaties spin locks lezer-schrijver spin locks semafoor binaire semafoor mutex lezer-schrijver semafoor voltooiingsvariabelen sequentiële vergrendelingen uitschakelen voorrangsvolgorde en barrières

      Tijd

    HZ Jiffies grote/kleine vertragingen kerneltimers

      Hardware-I/O

    I/O-poorten I/O-geheugen Hoe om te gaan met bijwerkingen bij toegang tot registers?

      Gebruikerskernel Communication

    put(get)_user() kopiëren naar(van)_user() Kernel I/O-geheugentoewijzing procfs sysfs debugfs relayfs netlink ioctl

      Draagbaarheid

    woordgrootte ondoorzichtige typen ondertekend/niet-ondertekend char-gegevensuitlijning integrale promotiecode hergebruik endianess-systeem vink paginagrootte aan instructie bestellen SMP/voorkoop/hoog geheugen

      Tenzij anders vermeld, zijn de inhoud en dit cursusoverzicht gelicentieerd onder Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

    Requirements

    • Basiskennis van het gebruik van een GNU/Linux-systeem als eindgebruiker
    • Basiskennis van een opdrachtregelshell
    • Basiskennis van gebruikersruimte / applicatieontwikkeling
    • Gemiddelde kennis van programmeren in C
    • Moet eerder Embedded GNU/Linux Systems Architecture hebben gevolgd (sterk aanbevolen!) en/of een goed begrip hebben van de onderwerpen die daar worden beschreven
     35 Hours

    Getuigenissen (4)

    Related Courses

    The Yocto Project - An Overview - hands-on

    28 Hours

    Related Categories