Differences

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

Link to this comparison view

si:laboratoare:01 [2023/10/01 09:00]
laura.ruse [Linux]
si:laboratoare:01 [2024/09/24 19:49] (current)
florin.stancu [Compilarea și rularea]
Line 5: Line 5:
 Laboratorul își propune să vă familiarizeze cu sisteme embedded care rulează Linux și sisteme de operare RTOS precum NuttX care se pretează mai degrabă microcontrollerelor decât sistemelor de tip desktop. Laboratorul își propune să vă familiarizeze cu sisteme embedded care rulează Linux și sisteme de operare RTOS precum NuttX care se pretează mai degrabă microcontrollerelor decât sistemelor de tip desktop.
  
-În acest laborator veți învăța cum să compilați și să încărcați sistemul de operare NuttX pe plăcuțele ​ESP32 Sparrow. Acestea (ESP32 Sparrowsunt construite pornind de la un modul de ESP32 Wrover la care au fost adăugate:+În acest laborator veți învăța cum să compilați și să încărcați sistemul de operare NuttX pe plăcile [[https://​github.com/​dantudose/​ESP32-Sparrow-rev2| ​ESP32 Sparrow]]. Aceste plăci ​sunt construite pornind de la un modul de ESP32 Wrover la care au fost adăugate:
   * un senzor de lumină - LTR308   * un senzor de lumină - LTR308
   * un senzor de temperatură,​ umiditate și presiune - BME680   * un senzor de temperatură,​ umiditate și presiune - BME680
Line 12: Line 12:
   * un cititor de carduri microSD   * un cititor de carduri microSD
  
-Pentru a putea fi folosit pe microcontrollere,​ NuttX are un memory-footprint foarte scăzut (de ordinul câtorva sutelor de kilobytes). Un alt feature care îl face potrivit sistemelor low-end este faptul că nu folosește ​mecanisemele ​de memorie virtuală în mod implicit, acest mod de operare numindu-se flat-mode addressing.+Pentru a putea fi folosit pe microcontrollere,​ NuttX are un memory-footprint foarte scăzut (de ordinul câtorva sutelor de kilobytes). Un alt feature care îl face potrivit sistemelor low-end este faptul că nu folosește ​mecanismele ​de memorie virtuală în mod implicit, acest mod de operare numindu-se flat-mode addressing.
  
 {{ :​si:​laboratoare:​esp32_sparrow.jpg?​600 |}} {{ :​si:​laboratoare:​esp32_sparrow.jpg?​600 |}}
Line 20: Line 20:
 ==== Linux ==== ==== Linux ====
  
-Dacă rulați pe un sistem cu Linux nativ, continuați de la pasul [https://​ocw.cs.pub.ro/​courses/​si/​laboratoare/​01#compilarea_si_incarcarea_pe_placuta|Compilarea și încărcarea pe plăcuță].+Dacă rulați pe un sistem cu Linux nativ, continuați de la pasul [[01#compilarea_si_incarcarea_pe_placa|Compilarea și încărcarea pe placă]].
  
 ==== Windows ==== ==== Windows ====
  
-Pentru a putea rula pe Windows, va trebui să vă configurați o mașină virtuală de Linux prin care să aveți acces la porturile USB ale host-ului - astfel conectarea la plăcuță se va face direct prin USB de pe mașina virtuală. Pentru instalarea Linuxului puteți folosi [[https://​repository.grid.pub.ro/​cs/​so/​linux-2021/​so-ubuntu-20-04.ova|mașina virtuală]] de la SO din anul 3 - este suficient să aveți un sistem Linux minimal, doar din linie de comandă. Alternativ, puteți instala orice altă distribuție de Linux (Ubuntu, Linux Mint, etc.).+Pentru a putea rula pe Windows, va trebui să vă configurați o mașină virtuală de Linux prin care să aveți acces la porturile USB ale host-ului - astfel conectarea la placă se va face direct prin USB de pe mașina virtuală. Pentru instalarea Linuxului puteți folosi [[https://​repository.grid.pub.ro/​cs/​so/​linux-2021/​so-ubuntu-20-04.ova|mașina virtuală]] de la SO din anul 3 - este suficient să aveți un sistem Linux minimal, doar din linie de comandă. Alternativ, puteți instala orice altă distribuție de Linux (Ubuntu, Linux Mint, etc.).
  
 Pentru a instala mașina virtuală, este recomandat să folosiți [[https://​vmware.pub.ro/​|VMware Workstation 16 pro]], deoarece este foarte ușor de configurat. Pentru a instala mașina virtuală, este recomandat să folosiți [[https://​vmware.pub.ro/​|VMware Workstation 16 pro]], deoarece este foarte ușor de configurat.
  
-Dacă nu aveți acces la VMware (nu aveți licență), puteți să folosiți și [[https://​www.virtualbox.org/​|VirtualBox]],​ dar cu niste pași în plus pentru a-l configura.+Dacă nu aveți acces la VMware (nu aveți licență), puteți să folosiți și [[https://​www.virtualbox.org/​|VirtualBox]],​ dar cu niște ​pași în plus pentru a-l configura.
  
 În mod normal, o mașină virtuală prin VirtualBox nu este accesibilă direct de pe host. Totuși, pentru a vă putea conecta la mașina virtuală prin SSH (folosind [[https://​mobaxterm.mobatek.net/​|MobaXterm]],​ de exemplu), puteți urmări pașii de mai jos: În mod normal, o mașină virtuală prin VirtualBox nu este accesibilă direct de pe host. Totuși, pentru a vă putea conecta la mașina virtuală prin SSH (folosind [[https://​mobaxterm.mobatek.net/​|MobaXterm]],​ de exemplu), puteți urmări pașii de mai jos:
Line 43: Line 43:
 Pentru a rula pe MacOS puteți urmări tutorialul de [[https://​github.com/​robertalexa2000/​nuttx-esp32-docs/​blob/​si_labs/​bringup/​macos_tutorial.md|aici]]. Pentru a rula pe MacOS puteți urmări tutorialul de [[https://​github.com/​robertalexa2000/​nuttx-esp32-docs/​blob/​si_labs/​bringup/​macos_tutorial.md|aici]].
  
-===== Compilarea ​si incarcarea ​pe placuta ​=====+===== Compilarea ​și încărcarea ​pe placă ​=====
  
 Pașii de mai jos trebuie urmați ca utilizator privilegiat (root): Pașii de mai jos trebuie urmați ca utilizator privilegiat (root):
Line 51: Line 51:
   * descărcarea tabelei de partiții și a bootloader-ului. Acestea sunt precompilate pentru fiecare release (versiune) de NuttX, însă pot fi compilate și din linie de comandă.   * descărcarea tabelei de partiții și a bootloader-ului. Acestea sunt precompilate pentru fiecare release (versiune) de NuttX, însă pot fi compilate și din linie de comandă.
   * compilarea în urma căreia va rezulta un binar   * compilarea în urma căreia va rezulta un binar
-  * încărcarea binarului pe plăcuță+  * încărcarea binarului pe placă
  
 Dacă doriți să continuați ca utilizator neprivilegiat,​ puteți consulta tutorialul de [[https://​blog.espressif.com/​getting-started-with-esp32-and-nuttx-fd3e1a3d182c|aici]]. Dacă doriți să continuați ca utilizator neprivilegiat,​ puteți consulta tutorialul de [[https://​blog.espressif.com/​getting-started-with-esp32-and-nuttx-fd3e1a3d182c|aici]].
Line 78: Line 78:
 <​code>​ <​code>​
 mkdir ~/​nuttxspace && cd ~/​nuttxspace mkdir ~/​nuttxspace && cd ~/​nuttxspace
-git clone https://​github.com/​apache/​incubator-nuttx.git nuttx +git clone --branch=nuttx-12.5.1 ​https://​github.com/​apache/​incubator-nuttx.git nuttx 
-git clone https://​github.com/​apache/​incubator-nuttx-apps.git apps+git clone --branch=nuttx-12.5.1 ​https://​github.com/​apache/​incubator-nuttx-apps.git apps
 </​code>​ </​code>​
  
Line 105: Line 105:
 cd ~/​nuttxspace/​nuttx cd ~/​nuttxspace/​nuttx
 ./​tools/​configure.sh -l esp32-sparrow-kit:​nsh ./​tools/​configure.sh -l esp32-sparrow-kit:​nsh
-make -j4+make EXTRAFLAGS="​-DESP32_IGNORE_CHIP_REVISION_CHECK" ​-j4
 esptool.py erase_flash esptool.py erase_flash
 make flash ESPTOOL_PORT=/​dev/​ttyUSB0 ESPTOOL_BAUD=115200 ESPTOOL_BINDIR=../​esp-bins make flash ESPTOOL_PORT=/​dev/​ttyUSB0 ESPTOOL_BAUD=115200 ESPTOOL_BINDIR=../​esp-bins
 </​code>​ </​code>​
  
-În functie ​de tipul de plăcuță pe care rulați, este posibil să fie nevoie să apăsați butonul de ''​BOOT''​ (''​IO0''​) atunci când încărcați NuttX. Astfel, ​plăcuța ​intră în modul de "​Download"​ - în mod normal, ​plăcuța ​este în starea de "​Boot"​. Butonul trebuie apăsat doar atunci când se încearcă stabilirea conexiunii cu firmware-ul de pe ESP32, așa cum se poate vedea mai jos:+<note warning>​ 
 +Oficial, NuttX nu este garantat că funcționează pe revizii vechi ale chip-ului ESP32, și, din păcate, RTOS-ul va bloca rularea cu un PANIC, după cum puteți vedea în [[https://​github.com/​apache/​nuttx/​blob/​c724ed51fbb36b3e65003e474a3b7517bb91e2e7/​arch/​xtensa/​src/​esp32/​esp32_start.c#​L235|codul sursă ​de aici]]. 
 + 
 +Observăm că putem defini simbolul ''​ESP32_IGNORE_CHIP_REVISION_CHECK''​ pentru a trece peste această verificare, pe care îl putem insera prin variabla ''​EXTRAFLAGS''​ ca în exemplul ​de mai sus. Din păcate, acest workaround va trebui **MEREU** activat la compilare... așadar, **nu-l uitați**! 
 +</​note>​ 
 + 
 +<​hidden>​Uneori,​ dacă se uită oricare din flaguri sau se configurează greșit proiectul (e.g., nu se pune argumentul cu tipul plăcii bun), compilarea NuttX va crăpa ​cu mesaje de eroare dubioase. Ca workaround de urgență (dacă nu merge un simplu ''​make distclean''​ și configure din nou), se recomandă ștergerea directoarelor ''​nuttx''​ și ''​apps''​ și re-descărcarea lor pentru a nu pierde timp cu depanarea în zadar... 
 +</​hidden>​ 
 + 
 +În functie de tipul de placă pe care rulați, este posibil să fie nevoie să apăsați butonul de ''​BOOT''​ (''​IO0''​) atunci când încărcați NuttX. Astfel, ​placa intră în modul de "​Download"​ - în mod normal, ​placa este în starea de "​Boot"​. Butonul trebuie apăsat doar atunci când se încearcă stabilirea conexiunii cu firmware-ul de pe ESP32, așa cum se poate vedea mai jos:
  
 {{ :​si:​laboratoare:​nuttx_download_mode.png |}} {{ :​si:​laboratoare:​nuttx_download_mode.png |}}
  
-Pentru a vă conecta la placuță veți folosi ''​picocom /​dev/​ttyUSB0 -b 115200''​.+Pentru a vă conecta la placă veți folosi ''​picocom /​dev/​ttyUSB0 -b 115200''​.
  
 În cazul în care sistemul de build nu detectează în mod automat calea către repo-ul de apps, aceasta poate fi specificată prin ''​-a <​path>''​. Pentru toți parametri disponibili puteți folosi ''​./​tools/​configure.sh -h''​. Alternativ, calea către directorul de apps poate fi configurată prin ''​CONFIG_APPSDIR''​. În cazul în care sistemul de build nu detectează în mod automat calea către repo-ul de apps, aceasta poate fi specificată prin ''​-a <​path>''​. Pentru toți parametri disponibili puteți folosi ''​./​tools/​configure.sh -h''​. Alternativ, calea către directorul de apps poate fi configurată prin ''​CONFIG_APPSDIR''​.
  
-Dacă compilați pentru un alt tip de plăcuță ESP32 - pentru un modul WROOM, de exemplu - trebuie să folosiți ''​./​tools/​configure.sh esp32-devkitc:​nsh''​. De asemenea, deoarece plăcuțele ​Sparrow sunt construite peste modulul WROVER, puteți să folosiți și ''​./​tools/​configure.sh esp32-wrover-kit:​nsh''​. Însă în acest caz va trebui să configurați manual NuttX-ul prin ''​make menuconfig''​ astfel încât să aveți acces la componentele hardware adăugate pe Sparrow.+Dacă compilați pentru un alt tip de placă ESP32 - pentru un modul WROOM, de exemplu - trebuie să folosiți ''​./​tools/​configure.sh esp32-devkitc:​nsh''​. De asemenea, deoarece plăcile Sparrow sunt construite peste modulul WROVER, puteți să folosiți și ''​./​tools/​configure.sh esp32-wrover-kit:​nsh''​. Însă în acest caz va trebui să configurați manual NuttX-ul prin ''​make menuconfig''​ astfel încât să aveți acces la componentele hardware adăugate pe Sparrow.
  
-Încărcarea binarului pe plăcuță se poate face și prin ''​esptool.py --chip esp32 --port /​dev/​ttyUSB0 --baud 921600 write_flash 0x1000 ../​esp-bins/​bootloader-esp32.bin 0x8000 ../​esp-bins/​partition-table-esp32.bin 0x10000 nuttx.bin''​.+Încărcarea binarului pe placă se poate face și prin ''​esptool.py --chip esp32 --port /​dev/​ttyUSB0 --baud 921600 write_flash 0x1000 ../​esp-bins/​bootloader-esp32.bin 0x8000 ../​esp-bins/​partition-table-esp32.bin 0x10000 nuttx.bin''​.
  
 Dacă nu aveți erori, ar trebui să vă apară un log asemănător cu cel de mai jos: Dacă nu aveți erori, ar trebui să vă apară un log asemănător cu cel de mai jos:
Line 132: Line 141:
 ===== Exerciții ===== ===== Exerciții =====
  
-**1.** Folosind sistemul de build al NuttX, activați compilarea aplicației "​Hello,​ World!"​. Codul sursă îl puteți găsi în ''​apps/​examples/​hello''​. Odată încărcat pe plăcuță, rulați aplicația din linie de comandă.+**1.** Folosind sistemul de build al NuttX, activați compilarea aplicației "​Hello,​ World!"​. Codul sursă îl puteți găsi în ''​apps/​examples/​hello''​. Odată încărcat pe placă, rulați aplicația din linie de comandă.
  
 <note tip> <note tip>
Line 142: Line 151:
  
 <note tip> <note tip>
 +E nevoie de activarea config-ului ''​CONFIG_EXAMPLES_RGBLED''​. Pentru a putea vedea cum NuttX compilează selectiv, doar pe baza config-urilor activate, vă puteți uita in fișierele ''​Kconfig''​.
 +</​note>​
 +
 +<note important>​
 Dacă rulați pe plăcuțele verzi, trebuie să schimbați pinii LED-ului: Dacă rulați pe plăcuțele verzi, trebuie să schimbați pinii LED-ului:
   * CONFIG_ESP32_LEDC_CHANNEL0_PIN=25   * CONFIG_ESP32_LEDC_CHANNEL0_PIN=25
si/laboratoare/01.1696140028.txt.gz · Last modified: 2023/10/01 09:00 by laura.ruse
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