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).
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
香港 - 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