Differences

This shows you the differences between two versions of the page.

Link to this comparison view

si:laboratoare:2026:01 [2026/09/28 18:13]
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: Intro, Building a simple ​app ======+====== Lab 01: Zephyr RTOS, compilarea unei aplicații ​simple ======
  
-Zephyr OS is a small, open-source real-time operating system ​(RTOS) ​designed for resource-constrained ​embedded ​and IoT devices, from tiny microcontrollers up to more capable edge hardware. ​It focuses on predictable, low-latency behavior with a preemptive kernel, strong configurability ​(you build only what you need), and broad hardware ​support through a clean device-driver ​model. Zephyr ​includes common ​embedded ​features like threads, synchronization primitives, timers, power management, networking stacks ​(e.g., TCP/IP, Bluetooth LE), and security options, all maintained under the Linux Foundation ​with an emphasis on portability, modularity, and production use.+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.
  
 {{ :​iothings:​laboratoare:​2025:​zephyr_rtos_logo.png?​300|}} {{ :​iothings:​laboratoare:​2025:​zephyr_rtos_logo.png?​300|}}
  
-This tutorial ​walks you through:+Acest tutorial ​te ghidează prin următorii pași: 
 + 
 +  - 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** 
 +  - scrierea aplicației în memoria flash a ceasului **Hacktor Watch** 
 +  - vizualizarea mesajului „Hello World” prin conexiunea **USB** 
 + 
 +===== 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**.
  
-  - setting up a fresh Zephyr development environment (“from scratch”) on a computer 
-  - building Zephyr’s ''​hello_world''​ sample for an **ESP32‑S3** target 
-  - flashing it onto the **Hacktor** watch 
-  - seeing the “Hello World” log over the **USB** connection ​ 
  
-===== 1. Install ​Zephyr ​“from scratch” on your computer ​=====+===== 2. Instalarea ​Zephyr ​„de la zero” pe calculator ​=====
  
-Zephyr’s official ​**Getting Started Guide** is the source of truth for host setup (Ubuntu/​macOS/​Windows),​ Python ​environment, ​west, and SDK installation.   +**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.   
-Reference: https://​docs.zephyrproject.org/​latest/​develop/​getting_started/​index.html+Referință: https://​docs.zephyrproject.org/​latest/​develop/​getting_started/​index.html
  
-Below is a practical “do this in order” setup that follows that guide.+Mai jos este prezentată o procedură practică de configurare,​ cu pași de urmat în ordine, conform acestui ghid.
  
  
-==== 1.1 Install OS dependencies ​====+==== 2.1 Instalarea dependențelor sistemului de operare ​====
  
-Follow the **Install dependencies** step for your OS in Zephyr’s Getting Started Guide (Ubuntu/​macOS/​Windows). ​  +Urmează pasul **Instalarea dependențelor** din ghidul introductiv ​Zephyr, corespunzător sistemului tău de operare ​(Ubuntu/​macOS/​Windows). ​  
-Guide: https://​docs.zephyrproject.org/​latest/​develop/​getting_started/​index.html+Ghid: https://​docs.zephyrproject.org/​latest/​develop/​getting_started/​index.html
  
-Typical things you’ll need include: Python 3, CMake, Ninja, Git, and system build tools.+În mod obișnuit, vei avea nevoie de: Python 3, CMake, Ninja, Git și instrumentele de compilare ale sistemului.
  
  
-==== 1.2 Create a Zephyr ​workspace and Python ​virtual ​environment ​====+==== 2.2 Crearea unui spațiu de lucru Zephyr ​și a unui mediu virtual ​Python ​====
  
-Pick a workspace folder. In this tutorial ​I’ll use ''​~/​zephyrproject'' ​on Linux/​macOS. ​  +Alege un director pentru spațiul de lucru. În acest tutorial ​voi folosi ​''​~/​zephyrproject'' ​pe Linux/​macOS. ​  
-(Windows ​users can use something like ''​C:​\zephyrproject''​.)+(Utilizatorii ​Windows ​pot folosi, de exemplu, ​''​C:​\zephyrproject''​.)
  
 <code bash> <code bash>
Line 42: Line 61:
 </​code>​ </​code>​
  
-On Windows PowerShell (example):+În Windows PowerShell (exemplu):
  
 <code powershell>​ <code powershell>​
Line 53: Line 72:
  
  
-==== 1.3 Install ​west ====+==== 2.3 Instalarea ​west ====
  
-Zephyr’s official ​west install guide:  ​+Ghidul oficial ​Zephyr ​pentru instalarea ​west:  ​
 https://​docs.zephyrproject.org/​latest/​develop/​west/​install.html https://​docs.zephyrproject.org/​latest/​develop/​west/​install.html
  
Line 62: Line 81:
 </​code>​ </​code>​
  
-==== 1.4 Initialize and update the Zephyr ​workspace ​====+==== 2.4 Inițializarea și actualizarea spațiului de lucru Zephyr ====
  
 <code bash> <code bash>
Line 70: Line 89:
 </​code>​ </​code>​
  
-Export ​Zephyr’s ​CMake package ​(so CMake can find Zephyr):+Exportă pachetul ​CMake al Zephyr ​(pentru ca CMake să poată găsi Zephyr):
  
 <code bash> <code bash>
Line 76: Line 95:
 </​code>​ </​code>​
  
-Install ​Python ​requirements for Zephyr ​and its modules:+Instalează dependențele ​Python ​pentru ​Zephyr ​și modulele sale:
  
 <code bash> <code bash>
Line 82: Line 101:
 </​code>​ </​code>​
  
-(That exact command appears in the Getting Started flow and is commonly the next step after ''​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 Install the Zephyr SDK (toolchain) ====+==== 2.5 Instalarea ​Zephyr SDK (setul de instrumente de compilare) ====
  
-Zephyr SDK documentation:  ​+Documentația ​Zephyr SDK:  ​
 https://​docs.zephyrproject.org/​latest/​develop/​toolchains/​zephyr_sdk.html https://​docs.zephyrproject.org/​latest/​develop/​toolchains/​zephyr_sdk.html
  
-Install the Zephyr SDK for your OS, then ensure your environment can find it (either via the SDK setup script registering it, or via environment variables like ''​ZEPHYR_SDK_INSTALL_DIR''​ / ''​ZEPHYR_TOOLCHAIN_VARIANT=zephyr''​).+Instalează ​Zephyr SDK pentru sistemul tău de operare, apoi asigură-te că mediul de dezvoltare îl poate găsi (fie prin înregistrarea acestuia de către scriptul de configurare al SDK-ului, fie prin variabile de mediu precum ​''​ZEPHYR_SDK_INSTALL_DIR''​ / ''​ZEPHYR_TOOLCHAIN_VARIANT=zephyr''​).
  
-**Note:** ESP32‑S3 ​is **Xtensa** ​based, so you’ll need the Xtensa ​toolchain that’s included with the Zephyr SDK.+**Notă:** ESP32‑S3 ​se bazează pe arhitectura ​**Xtensa**, ​așa că vei avea nevoie de setul de instrumente de compilare pentru ​Xtensa ​inclus în Zephyr SDK.
  
  
-===== 2. ESP32 (Espressif) ​prerequisites inside ​Zephyr =====+===== 3. Cerințe preliminare pentru ​ESP32 (Espressif) ​în Zephyr =====
  
-==== 2.1 Fetch Espressif RF binary blobs ====+==== 3.1 Descărcarea componentelor binare ​Espressif ​pentru ​RF ====
  
-Zephyr’s Espressif ​HAL requires binary blobs (RF calibration, ​etc.). Zephyr ​board docs for Espressif ​boards call this out and recommend fetching after ''​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''​. ​  
-Example ​(ESP32 DevKitC ​doc): it explicitly instructs ​''​west blobs fetch hal_espressif''​.+Exemplu ​(documentația ​ESP32 DevKitC): ​se indică explicit executarea comenzii ​''​west blobs fetch hal_espressif''​.
  
-Run:+Rulează:
  
 <code bash> <code bash>
Line 108: Line 127:
 </​code>​ </​code>​
  
-If you skip this, you may see build or runtime failures for ESP32 targets.+Dacă omiți acest pas, pot apărea erori de compilare sau de execuție pentru platformele țintă ​ESP32.
  
  
-===== 3. Pick a Zephyr ​“board target” for Hacktor =====+===== 4. Alegerea unei plăci țintă ​Zephyr ​pentru ​Hacktor =====
  
-Hacktor ​is **not** (yet) an upstream ​Zephyr ​board (maybe you could help with that?), so we need a compatible ​Zephyr ​board definition to build/flash a first image.+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.
  
-You have two reasonable approaches:+Există două abordări rezonabile:
  
-  - **A. Quick path (recommended for Hello World):​** ​use an upstream ​ESP32‑S3 ​board definition that is already ​**4 MB flash** ​and uses **USB‑C** ​programming. +  - **A. Varianta rapidă ​(recomandată pentru ​Hello World):​** ​folosește o definiție de placă ​ESP32‑S3 ​din proiectul principal Zephyr, care are deja **4 MB de memorie ​flash** ​și permite programarea prin **USB‑C**. 
-  - **B. Proper port:** create a custom “out‑of‑tree” ​Zephyr ​board for Hacktor (best long‑term, required once you use GPIOs/​peripherals and want correct pin mapping).+  - **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).
  
-This tutorial ​focuses on **A** to get you a successful first boot quickly, and then outlines ​**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 Approach ​A: Use ''​esp32s3_devkitc'' ​as a close match ====+==== 4.1 Abordarea ​A: Folosirea ​''​esp32s3_devkitc'' ​ca variantă apropiată ​====
  
-Zephyr ​includes the **Official ​Espressif ESP32 S3 Devkitc** ​board, which is explicitly documented as an ESP32-S3-WROOM-1,​ 8 MB Quad flash and 8MB Octal PSRAM. ​  +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.   
-Board doc: https://​docs.zephyrproject.org/​latest/​boards/​espressif/​esp32s3_devkitc/​doc/​index.html+Documentația plăcii: https://​docs.zephyrproject.org/​latest/​boards/​espressif/​esp32s3_devkitc/​doc/​index.html
  
-Limitations: +Limitări: 
-  * Pin mapping ​(LED, I2C, etc.) won’t match Hacktor. +  * Maparea pinilor ​(LED, I2C etc.) nu va corespunde celei de pe Hacktor. 
-  * For hello_world, ​pin mapping doesn’t matter.+  * Pentru ​hello_world, ​maparea pinilor nu contează.
  
  
-===== 4. Build “Hello World” ​for Hacktor ​and route console over USB =====+===== 5. Compilarea aplicației „Hello World” ​pentru ​Hacktor ​și redirecționarea consolei prin USB =====
  
-This section is where the Hacktor‑specific “special care” matters: +În această secțiune trebuie acordată atenție unor aspecte specifice ​Hacktor: 
-  * **ensure ​8 MB flash** +  * **asigură-te că memoria flash este configurată la 8 MB** 
-  * **ensure console output goes over the USB Serial/​JTAG ​port** (not UART0)+  * **asigură-te că ieșirea consolei este transmisă prin portul ​USB Serial/​JTAG** (nu prin UART0)
  
-We will: +Vom: 
-  1. create a small application folder +  1. crea un director pentru o aplicație simplă 
-  2. add a devicetree ​overlay ​that selects the USB serial ​device for console +  2. adăuga un fișier ​overlay ​devicetree care selectează dispozitivul ​serial ​USB pentru consolă 
-  3. build and flash+  3. compila aplicația și o vom scrie în memoria ​flash
  
  
-==== 4.1 Create a tiny application directory ​====+==== 5.1 Crearea directorului pentru o aplicație minimală ​====
  
-From your Zephyr ​workspace root:+Din directorul rădăcină al spațiului de lucru Zephyr:
  
 <code bash> <code bash>
Line 156: Line 175:
 </​code>​ </​code>​
  
-Create these files:+Creează următoarele fișiere:
  
   * ''​CMakeLists.txt''​   * ''​CMakeLists.txt''​
   * ''​prj.conf''​   * ''​prj.conf''​
   * ''​src/​main.c''​   * ''​src/​main.c''​
-  * a board overlay ​file+  * un fișier ​overlay ​pentru placă
  
-You can copy the sample ​hello_world, ​but I recommend creating ​a tiny app so you fully control ​the console configuration.+Poți copia exemplul ​hello_world, ​dar recomand crearea unei aplicații minimale, pentru ​a avea control ​deplin asupra configurației consolei.
  
 **CMakeLists.txt** **CMakeLists.txt**
Line 193: Line 212:
 </​code>​ </​code>​
  
-**prj.conf** (minimal ​logging/console)+**prj.conf** (configurație ​minimală pentru jurnalizare/consolă)
 <code conf> <code conf>
 CONFIG_CONSOLE=y CONFIG_CONSOLE=y
Line 203: Line 222:
  
  
-==== 4.2 Devicetree overlay: force console to USB Serial/JTAG ====+==== 5.2 Overlay devicetree: forțarea utilizării ​USB Serial/​JTAG ​pentru consolă ​====
  
-On ESP32 chips with a USB Serial/​JTAG ​device exposed to Zephyr ​as a UART, you can route the console by changing the devicetree ​''​chosen'' ​nodes.+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.
  
-A Zephyr ​issue discussing USB serial ​output on ESP32 shows an overlay ​pattern like:+O discuție despre o problemă raportată în proiectul ​Zephyr, referitoare la ieșirea ​serială USB pe ESP32, prezintă următorul model de overlay:
  
-  * set ''​zephyr,​console'' ​to ''&​usb_serial''​ +  * setează ​''​zephyr,​console'' ​la ''&​usb_serial''​ 
-  * enable the ''​usb_serial'' ​node+  * activează nodul ''​usb_serial''​
  
-(See Zephyr issue #​60825 ​about using ''​usb_serial'' ​for console on ESP32-class devices.)+(Consultă problema ​#​60825 ​din proiectul Zephyr, despre utilizarea ​''​usb_serial'' ​pentru consolă pe dispozitive din familia ​ESP32.)
  
-In the root of the project folder, create:+În rădăcina directorului proiectului, creează:
  
 **app.overlay** **app.overlay**
Line 229: Line 248:
 </​code>​ </​code>​
  
-Why this matters for Hacktor: +De ce este important acest lucru pentru ​Hacktor: 
-  * DevKit‑style ESP32 boards often default the console to **UART0** (meant for an external ​USB‑UART ​bridge). +  * Plăcile ESP32 de tip DevKit ​folosesc adesea implicit ​**UART0** ​pentru consolă ​(destinat unei punți ​USB‑UART ​externe). 
-  * Hacktor ​uses **USB Serial/​JTAG ​over the USB connector**, so the console needs to be routed there.+  * Hacktor ​folosește ​**USB Serial/​JTAG ​prin conectorul ​USB**, ​așa că ieșirea consolei trebuie redirecționată acolo.
  
  
  
-==== 4.3 Build the application ​====+==== 5.3 Compilarea aplicației ​====
  
-Activate your Python ​venv first if it isn’t active:+Activează mai întâi mediul virtual ​Python, dacă nu este deja activ:
  
 <code bash build.sh>​ <code bash build.sh>​
Line 244: Line 263:
 </​code>​ </​code>​
  
-Then go to your ''​hacktor_hello'' ​folder and create this build script, ​name it ''​build.sh'':​+Apoi accesează directorul ​''​hacktor_hello'' ​și creează următorul ​script ​de compilare, cu numele ​''​build.sh'':​
  
 <code bash> <code bash>
Line 372: Line 391:
  
  
-==== 4.4 Flash Hacktor ​over USB ====+==== 5.4 Scrierea aplicației pe Hacktor ​prin USB ====
  
-Connect ​Hacktor ​Watch over USB‑C.+Conectează ceasul ​Hacktor ​prin USB‑C.
  
-Then build and flash by running:+Apoi compilează aplicația și scrie-o în memoria ​flash, rulând:
  
 <code bash> <code bash>
Line 382: Line 401:
 </​code>​ </​code>​
  
-You will see the app being built, uploaded and then a serial ​terminal ​will print out the Hello World message. +Vei vedea cum aplicația este compilată și încărcată pe dispozitiv, după care un terminal ​serial va afișa mesajul ​Hello World.
- +
  
si/laboratoare/2026/01.1790608411.txt.gz · Last modified: 2026/09/28 18:13 by dan.tudose
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0