Course Code: ldd
Duration: 35 hours
Prerequisites:

  • Cunoștințe de bază despre utilizarea unui sistem GNU/Linux ca utilizator final
  • Cunoștințe de bază despre utilizarea unui shell de linie de comandă
  • Cunoștințe de bază despre dezvoltarea în spațiul utilizatorului / aplicații
  • Cunoștințe intermediare de programare în C
  • Ar trebui să fi participat la Arhitectura Sistemelor Embedded GNU/Linux înainte (foarte recomandat!) și/sau să aveți o bună înțelegere a subiectelor prezentate acolo

Overview:

Descriere

Acest curs de 5 zile folosește exerciții practice combinate cu instruire pentru a ilustra conceptele legate de internele nucleului GNU/Linux și dezvoltarea driverelor de dispozitive. Este conceput pentru a vă aduce rapid la același nivel. Descriem procesele, conceptele și comenzile necesare pentru a scrie drivere de dispozitive GNU/Linux printr-o combinație de teorie și formare practică.

Nu reinventați roata, ci învățați de la un trainer experimentat și luați acasă o cunoaștere funcțională și capacitatea de a o folosi eficient în propriul proiect de dezvoltare embedded.

Cine ar trebui să participe?

Persoane interesate sau însărcinate cu dezvoltarea sau evaluarea driverelor de dispozitive GNU/Linux, cum ar fi ingineri de software, ingineri de teren, manageri (de proiect), ingineri de hardware.

Course Outline:

Introducere

  • istoric rapid al GNU/Linux
  • licențiere
  • versiuni ale nucleului
  • ciclul de lansare
  • arbori de nucleu
  • linia principală
  • nucleu vs. spațiul utilizatorului
  • mecanism vs. politică
  • alternative la driverele de nucleu
  • RTOS vs. Linux

Gestionarea Memoriei

  • Memorie virtuală vs. memorie fizică
  • alocarea memoriei în nucleu
  • pagini
  • zone
  • API
  • slab

Patch-uri pentru Nucleu

  • ciclul de viață
  • git
  • sursele nucleului
  • crearea unui patch
  • verificarea patch-ului
  • corectarea patch-ului
  • trimiterea patch-ului
  • cod auditizat

Module de Nucleu

  • obținerea surselor nucleului
  • configurare/compilare/instalare
  • drivere de dispozitive (legate static, încărcate la runtime)
  • init/exit
  • licențiere
  • EXPORT SYMBOL GPL
  • makefile în afara arborelui
  • module-init-tools
  • modul în arborele nucleului
  • Kconfig
  • transmiterea parametrilor
  • sparse

Drivere de Caracter

  • arhitectura
  • interfața utilizator/nucleu
  • subsistemul I/O
  • VFS
  • sysfs (dispozitive, bus, drivere, clase),
  • kobject/ktype/kset
  • modelul de driver al nucleului Linux
  • fișiere de dispozitive
  • driver de caracter

    • inițializare
    • înregistrare
    • open, release
    • cdev, cdev add, cdev del,...
    • numere major/minor
    • udev, udevmonitor, udevadm

Operații Avansate cu Drivere de Caracter

  • ioctl
  • ioctl neblocat
  • ioctl compatibil
  • API spațiul utilizatorului
  • API spațiul nucleului
  • ciclul de viață al procesului
  • somn/blocare
  • somn/trezire
  • coadă de așteptare
  • efectul de turmă
  • poll/select

Depanarea Nucleului

  • depanare
  • depanarea nucleului

    • căutare binară cu git
    • suport de depanare din nucleu
    • printk syslogd, klogd, niveluri de log, limită de rată, niveluri de depanare, subsisteme selective de depanare
    • depanare prin interogarea debugfs
    • depanare oops, generare oops
    • Magic SysRq Key
    • kgdb/kdb
    • JTAG

Trasare

  • gcov
  • lcov
  • oprofile
  • ftrace

    • tracer nop
    • tracer de funcții
    • tracer de comutare de planificare
    • tracer de grafic de funcții
    • tracer dinamic
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interrupturi

  • interrupturi vs. polling
  • interrupt
  • secțiuni de program
  • reentranță
  • evenimente
  • handler de interrupt
  • handler de interrupt partajat
  • fluxul de interrupt
  • controlul de interrupt

Amânarea Lucrării

  • jumătăți superioare/inferioare
  • softirqs
  • tasklets
  • cozi de lucru
  • interrupturi cu fire

Concurrency

  • regiune/secțiune critică
  • atomic
  • condiție de cursă
  • sincronizare
  • blocare
  • soluții de blocare
  • blocaj
  • contenciune
  • ce să blochezi?
  • ce poate fi folosit?

    • operații atomice
    • spin locks
    • spin locks de tip reader-writer
    • semafor
    • semafor binar
    • mutex
    • semafor de tip reader-writer
    • variabile de completare
    • blocuri secvențiale
    • dezactivarea preempției
    • ordonare și bariere

Timp

  • HZ
  • Jiffies
  • întârzieri mari/mici
  • temporizatoare de nucleu

I/O Hardware

  • Porturi I/O
  • Memorie I/O
  • Cum să gestionăm efectele laterale la accesarea registrelor?

Comunicare Utilizator-Nucleu

  • put(get)_user()
  • copy to(from)_user()
  • I/O Nucleu
  • maparea memoriei
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilitate

  • dimensiunea cuvântului
  • tipuri opace
  • char semnat/nesemnat
  • alinierea datelor
  • promovarea integrală
  • reutilizarea codului
  • endianess
  • tick-ul sistemului
  • dimensiunea paginii
  • ordonarea instrucțiunilor
  • SMP/preempție/memorie mare

Exceptând cazurile în care se specifică altfel, conținutul și această descriere a cursului sunt licențiate sub Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

Sites Published:

United Arab Emirates - Embedded GNU/Linux Kernel Internals and Device Drivers

Qatar - Embedded GNU/Linux Kernel Internals and Device Drivers

Egypt - Embedded GNU/Linux Kernel Internals and Device Drivers

Saudi Arabia - Embedded GNU/Linux Kernel Internals and Device Drivers

South Africa - Embedded GNU/Linux Kernel Internals and Device Drivers

Brasil - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo

Canada - Embedded GNU/Linux Kernel Internals and Device Drivers

中国 - 嵌入式GNU/Linux内核与设备驱动

香港 - Embedded GNU/Linux Kernel Internals and Device Drivers

澳門 - Embedded GNU/Linux Kernel Internals and Device Drivers

台灣 - Embedded GNU/Linux Kernel Internals and Device Drivers

USA - Embedded GNU/Linux Kernel Internals and Device Drivers

Österreich - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Schweiz - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Deutschland - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Czech Republic - Interní struktura jádra GNU/Linuxu a ovladače zařízení

Denmark - Embedded GNU/Linux Kernel Internals and Device Drivers

Estonia - Embedded GNU/Linux Kernel Internals and Device Drivers

Finland - Embedded GNU/Linux Kernel Internals and Device Drivers

Greece - Εσώτερο Λειτουργικό των Πυρήνων GNU/Linux και Οδηγοί Συσκευών

Magyarország - Beágyazott GNU/Linux Kernel Belső Működése és Eszközmeghajtók

Ireland - Embedded GNU/Linux Kernel Internals and Device Drivers

Luxembourg - Embedded GNU/Linux Kernel Internals and Device Drivers

Latvia - Embedded GNU/Linux Kernel Internals and Device Drivers

España - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Italia - Interni del kernel GNU/Linux e driver di dispositivo

Lithuania - Embedded GNU/Linux Kernel Internals and Device Drivers

Nederland - Inwendige werking van de GNU/Linux-kernel en apparaatstuurprogramma's

Norway - Inne i Linux-kjernen for innbygde systemer og enhetsdrivere

Portugal - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo

România - Internele Nucleului GNU/Linux și Driverele de Dispozitive

Sverige - Inbyggd GNU/Linux-kärninterna funktioner och enhetsdrivrutiner

Türkiye - Gömülü GNU/Linux Çekirdek İç Yapıları ve Cihaz Sürücüleri

Malta - Embedded GNU/Linux Kernel Internals and Device Drivers

Belgique - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés

France - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés

日本 - 埋め込み GNU/Linux カーネルの内部構造とデバイスドライバ

Australia - Embedded GNU/Linux Kernel Internals and Device Drivers

Malaysia - Embedded GNU/Linux Kernel Internals and Device Drivers

New Zealand - Embedded GNU/Linux Kernel Internals and Device Drivers

Philippines - Embedded GNU/Linux Kernel Internals and Device Drivers

Singapore - Embedded GNU/Linux Kernel Internals and Device Drivers

Thailand - Embedded GNU/Linux Kernel Internals and Device Drivers

Vietnam - Kiến trúc Nhân GNU/Linux Nhúng và Trình điều khiển Thiết bị

India - Embedded GNU/Linux Kernel Internals and Device Drivers

Argentina - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Chile - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Costa Rica - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Ecuador - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Guatemala - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Colombia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

México - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Panama - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Peru - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Uruguay - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Venezuela - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Polska - Wewnętrzne mechanizmy jądra GNU/Linux i sterowniki urządzeń

United Kingdom - Embedded GNU/Linux Kernel Internals and Device Drivers

South Korea - 임베디드 GNU/리눅스 커널 내부 구조 및 장치 드라이버

Pakistan - Embedded GNU/Linux Kernel Internals and Device Drivers

Sri Lanka - Embedded GNU/Linux Kernel Internals and Device Drivers

Bulgaria - Вградени вътрешни принципи на ядрото GNU/Linux и драйвери на устройства

Bolivia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Indonesia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kazakhstan - Embedded GNU/Linux Kernel Internals and Device Drivers

Moldova - Internele Nucleului GNU/Linux și Driverele de Dispozitive

Morocco - Embedded GNU/Linux Kernel Internals and Device Drivers

Tunisia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kuwait - Embedded GNU/Linux Kernel Internals and Device Drivers

Oman - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovakia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kenya - Embedded GNU/Linux Kernel Internals and Device Drivers

Nigeria - Embedded GNU/Linux Kernel Internals and Device Drivers

Botswana - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovenia - Embedded GNU/Linux Kernel Internals and Device Drivers

Croatia - Embedded GNU/Linux Kernel Internals and Device Drivers

Serbia - Embedded GNU/Linux Kernel Internals and Device Drivers

Bhutan - Embedded GNU/Linux Kernel Internals and Device Drivers

Nepal - Embedded GNU/Linux Kernel Internals and Device Drivers

Uzbekistan - Embedded GNU/Linux Kernel Internals and Device Drivers

US Government - Embedded GNU/Linux Kernel Internals and Device Drivers