Schița de curs

Introducere

    istoric rapid al licențelor GNU/Linux kernel versioning ciclu de lansare kernel trees kernel principal vs. mecanism de spațiu utilizator vs. politică kernel driver alternative RTOS vs. Linux

memorie Management

    Memoria virtuală vs. alocarea memoriei memoriei fizice în zonele de pagini kernel API slab

Patch Kernel

    ciclu de viață git kernel sursă creați corecție verificare corectură corectare corecție expediere corecție cod auditat

Modulele Kernel

    obțineți sursele de nucleu configurați/construiți/instalați driverele de dispozitiv (legate static, încărcate în timpul execuției) init/exit licențiere EXPORT SYMBOL GPL din arbore makefile module-init-tools modulul în arborele kernel Parametrul Kconfig trece rară

Drivere Char

    arhitectură interfață utilizator/kernel subsistem I/O VFS sysfs (dispozitive, magistrală, drivere, clase), kobject/ktype/kset Linux kernel driver model fișiere dispozitiv char driver inițializare înregistrare deschis, lansare cdev, cdev add, cdev del,... numere majore/minore udev, udevmonitor, udevadm

Operații avansate ale driverului de caractere

    ioctl deblocat ioctl compat ioctl user space API kernel space Ciclul de viață al procesului API adormire/blocare adormire/trezire coadă de așteptare sondaj/selectare turmă

Depanare kernel

    depanare erori depanare căutare binară a nucleului cu suport git debug de la kernel printk syslogd, klogd, loglevels, limită de viteză, niveluri de depanare, depanare selectivă a subsistemelor depanare prin interogare debugfs oops depanare, afirmând oops Magic SysRq Key kgdb/kdb JTAG

Urmărirea

    gcov lcov oprofile ftrace nop funcția de urmărire trasor sched switch funcția de urmărire grafic tracer dynamic tracer
trace-cmd/kernelshark
  • perf
  • LTTng
  • întreruperi
  • întreruperi vs. secțiuni de program de întrerupere de sondare evenimente de reintrare handler de întrerupere gestionar de întreruperi partajat întreruperea fluxului de control al întreruperii

      Amânarea Muncii

    jumătățile de sus/inferioare softirqs tasklet-uri cozi de lucru întreruperi cu fire

      Concurență

    regiune/secțiune critică stare de cursă atomică sincronizare blocare soluții de blocare conflict de blocare ce să blochezi? ce poate fi folosit? operațiuni atomice blocări de rotație cititor-scriitor blocuri de rotație semafor binar semafor mutex cititor-scriitor semafor variabile de completare blocări secvențiale dezactivați ordinea de preempțiune și bariere

      Timp

    HZ Jiffies întârzieri mari/mici temporizatoarele nucleului

      I/O hardware

    Porturi I/O Memorie I/O Cum să faceți față efectelor secundare accesând registrele?

      Nucleul utilizatorului Communication

    put(get)_user() copy to(from)_user() Maparea memoriei Kernel I/O procfs sysfs debugfs relayfs netlink ioctl

      Portabilitate

    dimensiunea cuvintelor tipuri opace semnate/nesemnate caracter aliniere a datelor cod de promovare integrală reutilizare sistem endianess bifare dimensiune pagină ordonare instrucțiuni SMP/preempționare/memorie mare

      Cu excepția cazului în care se menționează altfel, conținutul și această schiță a cursului sunt licențiate în conformitate cu Atribuire-NonComercial-Partajare la fel 4.0 Internațional (CC BY-NC-SA 4.0).

    Cerințe

    • Familiaritate de bază cu utilizarea unui sistem GNU/Linux ca utilizator final
    • Familiaritate de bază cu un shell de linie de comandă
    • Cunoștințe de bază privind spațiul utilizatorului / dezvoltarea de aplicații
    • Cunoștințe intermediare de programare C
    • Ar trebui să fi participat la Embedded GNU/Linux Systems Architecture înainte (recomandat cu tărie!) și/sau să aibă o bună înțelegere a subiectelor prezentate acolo
    • .
     35 ore

    Numărul de participanți



    Pret per participant

    Mărturii (5)

    Categorii înrudite