Linux Internals and Application Programming
O incursiune practică în interiorul Linux: învățăm despre crearea de aplicații user-space (dar atingem un pic de kernel-space applications), system calls, procese, IPC, managementul memoriei și nu numai, folosind limbajul de programare C (cu un pic de C++)
Exerciții hands‑on cu POSIX, file I/O, signals, pipe‑uri, shared memory și nu numai.
Explorăm în detaliu algoritmii de scheduling, management-ul thread‑urilor și sincronizarea dintre ele.
Dobândești experiență practică prin programare și testare de aplicații user‑space (cam 70% din timp reprezintă laboratoare și exerciții practice).
Cum te ajută: capeți o înțelegere solidă a modului în care operează Linux, studiezi granița dintre sistem de operare si aplicații => vei putea dezvolta aplicații Linux eficiente și portabile.
Cui i se adresează: conceput pentru persoane cu baze decente de C sau C++ și Linux la nivel de operare de bază care doresc upskilling în zona de Sisteme de Operare (Linux în particular).
Curriculum
Introducere în embedded Linux
- Analiza principalelor componente ale unui proiect embedded Linux
Toolchains
- Tipuri de toolchains
- Alegerea bibliotecii C
- Componentele și uneltele toolchain-ului
- Construirea unui toolchain (focus pe ARM)
- Static vs. dynamic linking
- Cross-compiling pentru proiecte mai mari — exemplu
Bootloaders
- Înțelegerea bootloader-elor
- Introducere în device trees
- Das U-Boot: instalare, configurare, comenzi principale
Booting the kernel
- Boot pe BeagleBone Black
- Boot pe QEMU
O aplicație Linux simplă
- Introducere foarte scurtă în POSIX IPC
- Construirea unei aplicații IPC folosite pe parcursul cursului
Debugging și core dumps
- Debugging de bază
- Debugging remote
- Comenzile principale GDB
- Analiza fișierelor core și controlul aplicațiilor CPU‑intensive
Intro în Yocto
- Instalarea Yocto
- Configurare, build și rulare
- Layers, BitBake și rețete
- Personalizarea imaginilor
Kernel programming – preview
- Error numbers și output-ul kernelului
- Prezentare task_struct
- Liste înlănțuite în kernel
- Mecanisme OOP în kernel
Intro în module
- Exemplu trivial
- Compilarea modulelor
- Modules vs. built‑in
- Utilitare pentru module
- Încărcare/descărcare automată
- Export de simboluri
Intro în device drivers
- Modules și device drivers
- Alocare/dealocare memorie
- Transfer de date între user‑space și kernel‑space
- Character devices
- Utilizarea cache-ului
- Interrupts și exceptions
- Deferrable functions
Module opționale
Îmbunătățiri sugerate (opțional)
- Unități systemd și supravegherea proceselor
- IPC avansat: POSIX message queues, shared memory, semaphores
- Filesystems: bazele /proc și sysfs pentru developeri de aplicații
- Scheduling și priorități (nice/rtprio) în user‑space
- gdbserver + sfaturi de debugging remote în VS Code
- perf și un scurt intro eBPF pentru troubleshooting
Structura zilei de curs
- Part 1: 09:00–10:30
- Break: 10:30–10:45
- Part 2: 10:45–12:15
- Lunch break: 12:15–13:15
- Part 3: 13:15–15:15
- Break: 15:15–15:30
- Part 4: 15:30–17:30