Differences

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

Link to this comparison view

si:laboratoare:2025:01 [2025/10/02 16:38]
mihnea.dinica python dependecies
si:laboratoare:2025:01 [2025/10/28 18:30] (current)
andreea.miu [Instalarea pachetelor lipsă]
Line 27: Line 27:
 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 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.).+Puteți descărca VM-ul pentru Sisteme Incorporate de [[https://github.com/cs-pub-ro/SI-Lab-VM/releases|aici pe GitHub]]. 
  
-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 niște pași în plus pentru a-l configura. +Pentru a instala mașina virtuală, este recomandat să descărcați [[https://archive.org/​download/​vmwareworkstationarchive/​17.x/|VMware Workstation ​17 Pro]], deoarece este singura soluție de virtualizare ​pe Windows cu funcționalitate ​de USB Passthrough funcțională pentru ​embedded development ​(din păcateVirtualBox are multe buguri pe acest punct).
- +
-Î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: +
-  * intrați în setările mașinii virtuale și adăugați a 2-a interfață de rețea. +
-  * Prima va fi o interfață **host-only** ​pentru ​a permite conectivitatea de la host la guest (ssh), iar a 2-a interfață va fi sub un **NAT** pentru a putea avea acces la internet. +
-  * porniți mașina virtuală. Testați cu ''​ping 8.8.8.8''​ că sunteți conectat la Internet. +
-  * adăugați o adresă IP statică pe a 2-a interfață folosind subrețeaua ''​192.168.56.0/​24''​. De exemplu, puteți folosi ''​192.168.56.56/​24''​. Alternativ, puteți configura un client de DHCP. +
- +
-Pentru a putea avea acces la portul **USB** direct ​din mașina virtuală, din bara de sus selectați ''​Devices''​ > ''​USB devices''​ > ''​controller-ul UART''​.+
  
 <note tip> <note tip>
Line 45: Line 37:
 ==== MacOS ==== ==== MacOS ====
  
-Pentru a rula pe MacOSurmați tutorialul de [[https://github.com/robertalexa2000/nuttx-esp32-docs/blob/si_labs/bringup/macos_tutorial.md|aici]].+Instalați pachetele necesareasigurați-vă că aveți [[https://brew.sh/|Homebrew]] în sistem. 
 +<​code>​ 
 +pip install esptool 
 +brew update 
 +brew install x86_64-elf-gcc u-boot-tools bash picocom 
 +</​code>​ 
 + 
 +Clonați repo-ul și instalați Kconfig-frontends compatibile cu MacOS: 
 +<​code>​ 
 +git clone https://​bitbucket.org/nuttx/​tools.git 
 +cd tools/​kconfig-frontends 
 +patch < ../kconfig-macos.diff -p 1 
 +./configure --enable-mconf --disable-shared --enable-static --disable-gconf --disable-qconf --disable-nconf 
 +make 
 +make install 
 +</​code>​ 
 + 
 +Descărcați [[https://docs.espressif.com/projects/esp-idf/en/latest/​esp32/​api-guides/​tools/​idf-tools.html#​xtensa-esp-elf|crosscompiler-ul pentru MacOS]] și adăgați-l în PATH. Eventual faceți această setare permanentă prin adăugarea în ~/.bashrc sau ~/.zshrc (nu uitați de ''​source''​ ulterior - pașii sunt similari cu instrucțiunile de Linux). 
 +<​code>​ 
 +export PATH=$PATH:/​path/​to/​xtensa-esp-elf/​bin 
 +</​code>​ 
 + 
 +Continuați cu Descărcarea repository-urilor. Urmăriți setul de instrucțiuni specifice MacOS.
  
 ===== Compilarea și încărcarea pe placă ===== ===== Compilarea și încărcarea pe placă =====
Line 64: Line 78:
 apt-get upgrade -y /* optional, realizeaza actualizarea intregului sistem */ apt-get upgrade -y /* optional, realizeaza actualizarea intregului sistem */
 apt-get install -y bison flex gettext texinfo libncurses5-dev libncursesw5-dev gperf automake libtool pkg-config build-essential gperf genromfs libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux chrony libusb-dev libusb-1.0.0-dev kconfig-frontends python3-pip apt-get install -y bison flex gettext texinfo libncurses5-dev libncursesw5-dev gperf automake libtool pkg-config build-essential gperf genromfs libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux chrony libusb-dev libusb-1.0.0-dev kconfig-frontends python3-pip
-pip3 install esptool pyserial+pip install esptool pyserial
 </​code>​ </​code>​
  
 +
 +<note tip>
 +In caz ca intampinati probleme cu instalarea **esptool** incercati sa utilizati **pipx**:
 +<​code>​
 +pipx upgrade esptool
 +pipx install --force esptool
 +echo '​export PATH="​$HOME/​.local/​bin:​$PATH"'​ >> ~/.bashrc
 +source ~/.bashrc
 +</​code>​
 +
 +Alternativ, puteti folosi un virtual environment,​ pe care il veti activa la fiecare reboot al masinii virtuale / host-ului (adaptati comanda cu calea dorita de voi):
 +<​code>​
 +python3 -m venv /​home/​user/​nuttxvenv
 +source /​home/​user/​nuttxvenv/​bin/​activate
 +pip install esptool pyserial
 +</​code>​
 +</​note>​
 ==== Descărcarea toolchain-ului ==== ==== Descărcarea toolchain-ului ====
 +
 +**Atenție:​** pe mașina virtuală, aveți toolchain-ul deja descărcat și adăugat în PATH (vedeți în ''/​opt/​xtensa''​).
  
 <​code>​ <​code>​
Line 81: Line 114:
  
 <​code>​ <​code>​
-git clone git@github.com:radupascale/​hectorwatch-nuttx.git+git clone --recurse-submodules https://github.com/radupascale/​hectorwatch-nuttx
 cd hectorwatch-nuttx cd hectorwatch-nuttx
-git submodule init 
-git submodule update 
 </​code>​ </​code>​
  
Line 107: Line 138:
 make -j$(nproc) make -j$(nproc)
 </​code>​ </​code>​
- 
-În funcție de tipul de placă pe care rulați, este posibil să fie nevoie să apăsați un buton 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. În cazul smartwatch-ului nostru, aveți mai jos o poză atașată care vă arată ce rol au cele doua butoane disponibile pe carcasa: 
- 
-{{ :​si:​iot2025:​hacktor_buttons.jpg?​300 }} 
- 
-Dacă vrem să încărcăm NuttX pe un ESP32S3 (microcontroller-ul care stă la baza ceasului nostru), pentru a comuta din **Boot** in **Download** nu este suficient să apăsați un singur buton, ci trebuie să urmați o secvență de operații: ''​Țineți apăsat BOOT''​ -> ''​apăsați RESET **o singură dată**''​ -> ''​ridicați degetul de pe BOOT''​. Acum puteți să flash-uiți microcontroller-ul folosind comanda ''​make flash ESPTOOL_PORT=/​dev/​ttyACM0 ESPTOOL_BAUD=115200 ESPTOOL_BINDIR=../​esp32s3-bins''​. 
- 
-După ce ați terminat procesul de flash, este nevoie de încă un reset pentru a comuta înapoi din modul de **Download** in cel de **Boot**. 
- 
-Pentru a vă conecta la placă veți folosi ''​picocom /​dev/​ttyACM0 -b 115200''​. 
  
 <note important>​ <note important>​
Line 123: Line 144:
 ./​tools/​configure.sh -m hacktorwatch:​usbnsh ./​tools/​configure.sh -m hacktorwatch:​usbnsh
 make -j$(sysctl -n hw.ncpu) make -j$(sysctl -n hw.ncpu)
-make flash ESPTOOL_PORT=/​dev/​cu.usbmodem101 ​ESPTOOL_BAUD=115200 ESPTOOL_BINDIR=../​esp32s3-bins+make flash ESPTOOL_PORT=/​dev/​cu.usbmodem01 ​ESPTOOL_BAUD=115200 ESPTOOL_BINDIR=../​esp32s3-bins
 sudo picocom -b 115200 /​dev/​cu.usbmodem01 sudo picocom -b 115200 /​dev/​cu.usbmodem01
 </​code>​ </​code>​
  
-Observați flag-ul "​-m"​ și denumirea diferită a portului usb.+Observați flag-ul "​-m"​ și denumirea diferită a portului usb. Verificați cu ''​ls /​dev/​cu.*''​ specific ce port aveți (01 sau 2101 etc.).
 </​note>​ </​note>​
 +
 +În funcție de tipul de placă pe care rulați, este posibil să fie nevoie să apăsați un buton 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. În cazul smartwatch-ului nostru, aveți mai jos o poză atașată care vă arată ce rol au cele doua butoane disponibile pe carcasa:
 +
 +{{ :​si:​iot2025:​hacktor_buttons.jpg?​300 }}
 +
 +Dacă vrem să încărcăm NuttX pe un ESP32S3 (microcontroller-ul care stă la baza ceasului nostru), pentru a comuta din **Boot** in **Download** nu este suficient să apăsați un singur buton, ci trebuie să urmați o secvență de operații: ''​Țineți apăsat BOOT''​ -> ''​apăsați RESET **o singură dată**''​ -> ''​ridicați degetul de pe BOOT''​. Acum puteți să flash-uiți microcontroller-ul folosind comanda ''​make flash ESPTOOL_PORT=/​dev/​ttyACM0 ESPTOOL_BAUD=115200 ESPTOOL_BINDIR=../​esp32s3-bins''​.
 +
 +După ce ați terminat procesul de flash, este nevoie de încă un reset pentru a comuta înapoi din modul de **Download** in cel de **Boot**.
 +
 +Pentru a vă conecta la placă veți folosi ''​picocom /​dev/​ttyACM0 -b 115200''​. Apăsați ''​Enter''​ de 3 ori pentru a debloca (,) consola NSH!
  
 Î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''​.
Line 149: Line 180:
 </​note>​ </​note>​
  
-**2(Bonus)** ​Compilați NuttX pentru plăcile Sparrow folosind config-ul ​''​esp32-sparrow-kit:​nsh''​ și nu uitați să ștergeți ​mai întâi config-ul deja existent ​pentru ​hacktorwatch.+**2 (Bonus).**  ​Folosind ​''​make menuconfig''​, dezactivați aplicația "​Hello,​ World!"​ pe care ați activat-o la Exercițiul 1. Recompilați ​și reîncărcați sistemul de operare. Verificați dacă aplicația mai este disponibilă în linia de comandă a NuttX. Acum ștergeți ​fișierele de configurare și compilare folosind ''​make distclean''​. Apoi, reinițializați sistemul de build pentru ​placa Hacktor Watch și recompilați. Observați diferența dintre ''​make clean''​ și ''​make distclean''​ (așa cum este menționat în nota tip).
  
 <note tip> <note tip>
si/laboratoare/2025/01.1759412333.txt.gz · Last modified: 2025/10/02 16:38 by mihnea.dinica
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