This shows you the differences between two versions of the page.
|
si:laboratoare:2026:01 [2026/09/28 18:20] dan.tudose |
si:laboratoare:2026:01 [2026/09/28 18:31] (current) dan.tudose [4. Alegerea unei plăci țintă Zephyr pentru Hacktor] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Lab 01: Zephyr RTOS, compilarea unei aplicații simple ====== | ====== Lab 01: Zephyr RTOS, compilarea unei aplicații simple ====== | ||
| + | |||
| + | Bine ați venit în laboratorul de **Sisteme Încorporate**! | ||
| + | |||
| + | În cadrul acestui laborator, ne propunem să vă familiarizăm cu sisteme de operare **RTOS (Real-Time Operating System)** - în speță **Zephyr OS** - care se pretează mai degrabă microcontrolerelor decât sistemelor de tip desktop. | ||
| Zephyr OS este un sistem de operare în timp real (RTOS), de dimensiuni reduse și cu sursă deschisă, conceput pentru dispozitive embedded și IoT cu resurse limitate, de la microcontrolere foarte mici până la platforme hardware edge mai performante. Acesta pune accentul pe un comportament predictibil, cu latență redusă, printr-un nucleu preemptiv, posibilități extinse de configurare (compilezi doar ceea ce îți trebuie) și suport pentru o gamă largă de platforme hardware, printr-un model bine structurat de drivere pentru dispozitive. Zephyr include funcționalități uzuale în sistemele embedded, precum fire de execuție, primitive de sincronizare, temporizatoare, gestionarea consumului de energie, stive de protocoale de comunicație (de exemplu, TCP/IP și Bluetooth LE) și opțiuni de securitate. Toate acestea sunt dezvoltate și întreținute sub egida Linux Foundation, cu accent pe portabilitate, modularitate și utilizarea în produse finale. | Zephyr OS este un sistem de operare în timp real (RTOS), de dimensiuni reduse și cu sursă deschisă, conceput pentru dispozitive embedded și IoT cu resurse limitate, de la microcontrolere foarte mici până la platforme hardware edge mai performante. Acesta pune accentul pe un comportament predictibil, cu latență redusă, printr-un nucleu preemptiv, posibilități extinse de configurare (compilezi doar ceea ce îți trebuie) și suport pentru o gamă largă de platforme hardware, printr-un model bine structurat de drivere pentru dispozitive. Zephyr include funcționalități uzuale în sistemele embedded, precum fire de execuție, primitive de sincronizare, temporizatoare, gestionarea consumului de energie, stive de protocoale de comunicație (de exemplu, TCP/IP și Bluetooth LE) și opțiuni de securitate. Toate acestea sunt dezvoltate și întreținute sub egida Linux Foundation, cu accent pe portabilitate, modularitate și utilizarea în produse finale. | ||
| Line 9: | Line 13: | ||
| - configurarea unui mediu de dezvoltare Zephyr nou („de la zero”) pe un calculator | - configurarea unui mediu de dezvoltare Zephyr nou („de la zero”) pe un calculator | ||
| - compilarea exemplului ''hello_world'' din Zephyr pentru o platformă țintă **ESP32‑S3** | - compilarea exemplului ''hello_world'' din Zephyr pentru o platformă țintă **ESP32‑S3** | ||
| - | - scrierea aplicației în memoria flash a ceasului **Hacktor** | + | - scrierea aplicației în memoria flash a ceasului **Hacktor Watch** |
| - vizualizarea mesajului „Hello World” prin conexiunea **USB** | - vizualizarea mesajului „Hello World” prin conexiunea **USB** | ||
| - | ===== 1. Instalarea Zephyr „de la zero” pe calculator ===== | + | ===== 1. Hacktor Watch ===== |
| + | |||
| + | În acest laborator veți învăța cum să compilați și să încărcați sistemul de operare Zephyr OS pe smartwatch-ul **[[https://github.com/hacktorwatch/Hacktor-Watch-2.0 | Hacktor Watch]]**, dezvoltat în facultate și bazat pe un microprocesor **ESP32 S3** la care au fost adăugate: | ||
| + | * două butoane externe | ||
| + | * un display cu touch | ||
| + | * un senzor de haptics | ||
| + | * un accelerometru și giroscop | ||
| + | |||
| + | Mai jos puteți vedea diagrama hardware a ceasului: | ||
| + | |||
| + | {{ :si:iot2025:hacktor_watch_2.0.jpg?600 }} | ||
| + | |||
| + | Pentru a putea fi folosit pe microcontrolere, Zephyr are un **memory-footprint foarte scăzut** (de ordinul câtorva sute de kilobytes). Un alt feature care îl face potrivit sistemelor low-end este faptul că **nu folosește mecanismele de memorie virtuală** (mai costisitoare atât din punct de vedere hardware, cât și software) în mod implicit, acest mod de operare numindu-se **flat-mode addressing**. | ||
| + | |||
| + | |||
| + | ===== 2. Instalarea Zephyr „de la zero” pe calculator ===== | ||
| **Ghidul introductiv oficial** al Zephyr reprezintă referința principală pentru configurarea calculatorului de dezvoltare (Ubuntu/macOS/Windows), a mediului Python și pentru instalarea west și a SDK-ului. | **Ghidul introductiv oficial** al Zephyr reprezintă referința principală pentru configurarea calculatorului de dezvoltare (Ubuntu/macOS/Windows), a mediului Python și pentru instalarea west și a SDK-ului. | ||
| Line 20: | Line 39: | ||
| - | ==== 1.1 Instalarea dependențelor sistemului de operare ==== | + | ==== 2.1 Instalarea dependențelor sistemului de operare ==== |
| Urmează pasul **Instalarea dependențelor** din ghidul introductiv Zephyr, corespunzător sistemului tău de operare (Ubuntu/macOS/Windows). | Urmează pasul **Instalarea dependențelor** din ghidul introductiv Zephyr, corespunzător sistemului tău de operare (Ubuntu/macOS/Windows). | ||
| Line 28: | Line 47: | ||
| - | ==== 1.2 Crearea unui spațiu de lucru Zephyr și a unui mediu virtual Python ==== | + | ==== 2.2 Crearea unui spațiu de lucru Zephyr și a unui mediu virtual Python ==== |
| Alege un director pentru spațiul de lucru. În acest tutorial voi folosi ''~/zephyrproject'' pe Linux/macOS. | Alege un director pentru spațiul de lucru. În acest tutorial voi folosi ''~/zephyrproject'' pe Linux/macOS. | ||
| Line 53: | Line 72: | ||
| - | ==== 1.3 Instalarea west ==== | + | ==== 2.3 Instalarea west ==== |
| Ghidul oficial Zephyr pentru instalarea west: | Ghidul oficial Zephyr pentru instalarea west: | ||
| Line 62: | Line 81: | ||
| </code> | </code> | ||
| - | ==== 1.4 Inițializarea și actualizarea spațiului de lucru Zephyr ==== | + | ==== 2.4 Inițializarea și actualizarea spațiului de lucru Zephyr ==== |
| <code bash> | <code bash> | ||
| Line 84: | Line 103: | ||
| (Această comandă apare exact în această formă în procedura din ghidul introductiv și reprezintă, de obicei, pasul următor după ''west update''.) | (Această comandă apare exact în această formă în procedura din ghidul introductiv și reprezintă, de obicei, pasul următor după ''west update''.) | ||
| - | ==== 1.5 Instalarea Zephyr SDK (setul de instrumente de compilare) ==== | + | ==== 2.5 Instalarea Zephyr SDK (setul de instrumente de compilare) ==== |
| Documentația Zephyr SDK: | Documentația Zephyr SDK: | ||
| Line 94: | Line 113: | ||
| - | ===== 2. Cerințe preliminare pentru ESP32 (Espressif) în Zephyr ===== | + | ===== 3. Cerințe preliminare pentru ESP32 (Espressif) în Zephyr ===== |
| - | ==== 2.1 Descărcarea componentelor binare Espressif pentru RF ==== | + | ==== 3.1 Descărcarea componentelor binare Espressif pentru RF ==== |
| Stratul de abstractizare hardware (HAL) Espressif din Zephyr necesită componente binare (pentru calibrarea RF etc.). Documentația Zephyr pentru plăcile Espressif menționează acest lucru și recomandă descărcarea lor după ''west update''. | Stratul de abstractizare hardware (HAL) Espressif din Zephyr necesită componente binare (pentru calibrarea RF etc.). Documentația Zephyr pentru plăcile Espressif menționează acest lucru și recomandă descărcarea lor după ''west update''. | ||
| Line 111: | Line 130: | ||
| - | ===== 3. Alegerea unei plăci țintă Zephyr pentru Hacktor ===== | + | ===== 4. Alegerea unei plăci țintă Zephyr pentru Hacktor ===== |
| Hacktor **nu** se află (încă) printre plăcile incluse în proiectul principal Zephyr (poate ai putea contribui la acest lucru?), așa că avem nevoie de o definiție de placă Zephyr compatibilă pentru a compila și a scrie în memoria flash o primă imagine a aplicației. | Hacktor **nu** se află (încă) printre plăcile incluse în proiectul principal Zephyr (poate ai putea contribui la acest lucru?), așa că avem nevoie de o definiție de placă Zephyr compatibilă pentru a compila și a scrie în memoria flash o primă imagine a aplicației. | ||
| Line 120: | Line 139: | ||
| - **B. Portare completă:** creează o definiție de placă Zephyr personalizată pentru Hacktor, în afara arborelui sursă Zephyr (cea mai bună variantă pe termen lung, necesară atunci când începi să folosești GPIO-uri și periferice și ai nevoie de o mapare corectă a pinilor). | - **B. Portare completă:** creează o definiție de placă Zephyr personalizată pentru Hacktor, în afara arborelui sursă Zephyr (cea mai bună variantă pe termen lung, necesară atunci când începi să folosești GPIO-uri și periferice și ai nevoie de o mapare corectă a pinilor). | ||
| - | Acest tutorial se concentrează pe **A**, pentru a obține rapid o primă pornire reușită, apoi prezintă pe scurt **B**. | + | Acest tutorial se concentrează pe **A**, pentru a obține rapid o primă pornire reușită, dar varianta mai serioasă pentru proiecte viitoare ar trebui să fie **B**. |
| - | ==== 3.1 Abordarea A: Folosirea ''esp32s3_devkitc'' ca variantă apropiată ==== | + | ==== 4.1 Abordarea A: Folosirea ''esp32s3_devkitc'' ca variantă apropiată ==== |
| Zephyr include placa **oficială Espressif ESP32 S3 Devkitc**, descrisă explicit în documentație ca fiind bazată pe ESP32-S3-WROOM-1, cu 8 MB de memorie flash Quad și 8 MB de PSRAM Octal. | Zephyr include placa **oficială Espressif ESP32 S3 Devkitc**, descrisă explicit în documentație ca fiind bazată pe ESP32-S3-WROOM-1, cu 8 MB de memorie flash Quad și 8 MB de PSRAM Octal. | ||
| Line 133: | Line 152: | ||
| - | ===== 4. Compilarea aplicației „Hello World” pentru Hacktor și redirecționarea consolei prin USB ===== | + | ===== 5. Compilarea aplicației „Hello World” pentru Hacktor și redirecționarea consolei prin USB ===== |
| În această secțiune trebuie acordată atenție unor aspecte specifice Hacktor: | În această secțiune trebuie acordată atenție unor aspecte specifice Hacktor: | ||
| Line 145: | Line 164: | ||
| - | ==== 4.1 Crearea directorului pentru o aplicație minimală ==== | + | ==== 5.1 Crearea directorului pentru o aplicație minimală ==== |
| Din directorul rădăcină al spațiului de lucru Zephyr: | Din directorul rădăcină al spațiului de lucru Zephyr: | ||
| Line 203: | Line 222: | ||
| - | ==== 4.2 Overlay devicetree: forțarea utilizării USB Serial/JTAG pentru consolă ==== | + | ==== 5.2 Overlay devicetree: forțarea utilizării USB Serial/JTAG pentru consolă ==== |
| Pe cipurile ESP32 care dispun de un dispozitiv USB Serial/JTAG expus în Zephyr ca UART, poți redirecționa consola modificând nodurile ''chosen'' din devicetree. | Pe cipurile ESP32 care dispun de un dispozitiv USB Serial/JTAG expus în Zephyr ca UART, poți redirecționa consola modificând nodurile ''chosen'' din devicetree. | ||
| Line 235: | Line 254: | ||
| - | ==== 4.3 Compilarea aplicației ==== | + | ==== 5.3 Compilarea aplicației ==== |
| Activează mai întâi mediul virtual Python, dacă nu este deja activ: | Activează mai întâi mediul virtual Python, dacă nu este deja activ: | ||
| Line 372: | Line 391: | ||
| - | ==== 4.4 Scrierea aplicației pe Hacktor prin USB ==== | + | ==== 5.4 Scrierea aplicației pe Hacktor prin USB ==== |
| Conectează ceasul Hacktor prin USB‑C. | Conectează ceasul Hacktor prin USB‑C. | ||