Differences

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

Link to this comparison view

si:laboratoare:03 [2023/10/18 14:46]
laura.ruse [Exercitii]
si:laboratoare:03 [2023/10/22 10:57] (current)
robert_ionut.alexa
Line 1: Line 1:
 ===== Laboratorul 03. NuttX - Wi-Fi, Bootloader ===== ===== Laboratorul 03. NuttX - Wi-Fi, Bootloader =====
  
-In laboratorul de astazi ​vom configura placa Esp32 sa acceseze internetul prin intermediul Wi-Fi-ului (denumit station mode), iar mai apoi vom conecta laptopul la Esp32 (care va rula intr-o configuratie denumita ​SoftAP) pentru a avea conectivitate la internet.+În laboratorul de astăzi ​vom configura placa Esp32 să acceseze internetul prin intermediul Wi-Fi-ului (denumit station mode), iar mai apoi vom conecta laptopul la Esp32 (care va rula într-o configurație denumită ​SoftAP) pentru a avea conectivitate la internet.
  
-In final, vor fi prezentate ​cateva notiuni ​despre procesul de boot de pe Esp32.+În final, vor fi prezentate ​câteva noțiuni ​despre procesul de boot de pe Esp32.
  
 ==== Wi-Fi ==== ==== Wi-Fi ====
  
-Placile ​Esp32 incorporeaza ​un modul RF (Radio Frequency) prin intermediul ​caruia ​dispun de Wi-Fi, Bluetooth ​si BLE (Bluetooth Low Energy). Deoarece toate cele trei tehnologii ​functioneaza ​la frecventa ​de 2.4GHz, nu putem sa primim ​si sa trimitem date in acelasi ​timp si pe Wi-Fi si prin Bluetooth. Pentru a fi posibil acest lucru, se foloseste ​time-division multiplexing.+Plăcile ​Esp32 încorporează ​un modul RF (Radio Frequency) prin intermediul ​căruia ​dispun de Wi-Fi, Bluetooth ​și BLE (Bluetooth Low Energy). Deoarece toate cele trei tehnologii ​funcționează ​la frecvența ​de 2.4GHz, nu putem să primim ​și să trimitem date în același ​timp și pe Wi-Fi și prin Bluetooth. Pentru a fi posibil acest lucru, se folosește ​time-division multiplexing.
  
-In comunicatia ​prin Wi-Fi, un device poate sa aiba unul dintre rolurile de mai jos:+În comunicația ​prin Wi-Fi, un device poate să aibă unul dintre rolurile de mai jos:
  
-  * Router - defineste ​noua retea+  * Router - definește ​nouă rețea
-  * Access Point - un device care face parte dintr-o ​retea, se conecteaza ​la router, dar este folosit pentru a crea subretele+  * Access Point - un device care face parte dintr-o ​rețea, se conectează ​la router, dar este folosit pentru a crea subrețele
-  * Station - un simplu device conectat ​in retea.+  * Station - un simplu device conectat ​în rețea.
  
 <note tip> <note tip>
-Un smartphone poate functiona ​ca un access point atunci ​cand este configurat hotspot-ul.+Un smartphone poate funcționa ​ca un access point atunci ​când este configurat hotspot-ul.
 </​note>​ </​note>​
  
-In NuttX, Esp32 poate rula atat ca un station, ​cat si cat un access point (software access point - SoftAP - deoarece managementul ​comunicatiei ​se intampla in cadrul sistemului de operare, nu in hardware). ​Configuratiile ​precum ''​esp32-wrover-kit:​wifi''​ permit ​placii sa functioneze ​doar ca un station, dar exista si ''​esp32-devkitc:​sta_softap'',​ de exemplu, care ofera suport ​atat pentru station ​cat si pentru SoftAP.+În NuttX, Esp32 poate rula atât ca un station, ​cât și ca un access point (software access point - SoftAP - deoarece managementul ​comunicației ​se întâmplă în cadrul sistemului de operare, nu în hardware). ​Configurațiile ​precum ''​esp32-wrover-kit:​wifi''​ permit ​plăcii să funcționeze ​doar ca un station, dar există și ''​esp32-devkitc:​sta_softap'',​ de exemplu, care oferă ​suport ​atât pentru station ​cât și pentru SoftAP.
  
-Pentru a putea conecta Esp32 la o retea Wi-Fi existenta identificata ​prin <​myssid>:<​mypasswd>,​ se pot folosi comenzile de mai jos:+Pentru a putea conecta Esp32 la o rețea ​Wi-Fi existentă identificată ​prin <​myssid>:<​mypasswd>,​ se pot folosi comenzile de mai jos:
  
 <​code>​ <​code>​
Line 30: Line 30:
 </​code>​ </​code>​
  
-''​wapi psk''​ este folosit pentru a specifica nivelul de securitate minim pe care reteaua ​trebuie ​sa il indeplineasca, precum ​si algoritmul de criptare - in cazul de fata, se foloseste ​WPA2 si algoritmul CCMP. In total, ​exista ​patru niveluri de securitate, iar in NuttX sunt suportate doar ultimele trei:+''​wapi psk''​ este folosit pentru a specifica nivelul de securitate minim pe care rețeaua ​trebuie ​să îl îndeplinească, precum ​și algoritmul de criptare - în cazul de față, se folosește ​WPA2 și algoritmul CCMP. În total, ​există ​patru niveluri de securitate, iar în NuttX sunt suportate doar ultimele trei:
  
   * WEP   * WEP
Line 37: Line 37:
   * WPA3 (WPA3-AES)   * WPA3 (WPA3-AES)
  
-Deoarece ''​wapi essid''​ doar seteaza ​intern numele ​retelei, pentru conectarea ​efectiva ​la retea si obtinerea ​unei adrese IP este nevoie de o comanda explicita ​- ''​renew wlan0''​.+Deoarece ''​wapi essid''​ doar setează ​intern numele ​rețelei, pentru conectarea ​efectivă ​la rețea și obținerea ​unei adrese IP este nevoie de o comandă explicită ​- ''​renew wlan0''​.
  
-Pentru a putea configura Esp32 sa ruleze ca un SoftAP (prin a doua interfata ​de retea disponibila ​- wlan1), e nevoie de un set asemanator ​de comenzi:+Pentru a putea configura Esp32 să ruleze ca un SoftAP (prin a doua interfață ​de rețea disponibilă ​- wlan1), e nevoie de un set asemănător ​de comenzi:
  
 <​code>​ <​code>​
Line 48: Line 48:
 </​code>​ </​code>​
  
-Astfel, se creeaza reteaua ​''​nuttxapp'', ​protejata ​tot prin WPA2 si CCMP, avand parola <​mypasswd>​. Prin ''​dhcpd_start''​ se porneste ​daemon-ul ''​dhcpd''​ care va rula un server de DHCP si va asigna un IP tuturor device-urile conectate.+Astfel, se creează rețeaua ​''​nuttxapp'', ​protejată ​tot prin WPA2 si CCMP, având ​parola <​mypasswd>​. Prin ''​dhcpd_start''​ se pornește ​daemon-ul ''​dhcpd''​ care va rula un server de DHCP și va asigna un IP tuturor device-urile conectate.
  
-O descriere mai detaliata ​a API-ului expus prin WAPI (de exemplu, ''​wapi show wlan0''​),​ precum ​si cum te poti conecta la o retea nesecurizata ​(open network), poate fi consultata ​[[https://​nuttx.apache.org/​docs/​latest/​applications/​wapi/​index.html|aici]].+O descriere mai detaliată ​a API-ului expus prin WAPI (de exemplu, ''​wapi show wlan0''​),​ precum ​și cum te poți conecta la o rețea nesecurizată ​(open network), poate fi consultată ​[[https://​nuttx.apache.org/​docs/​latest/​applications/​wapi/​index.html|aici]].
  
-De asemenea, o alta comanda utila pentru a investiga starea ​interfetelor ​de retea este ''​ifconfig'', ​asemanatoarea ​cu cea din Linux.+De asemenea, o altă comandă utilă ​pentru a investiga starea ​interfețelor ​de rețea ​este ''​ifconfig'', ​asemănătoare ​cu cea din Linux.
  
 ==== Bootloader ==== ==== Bootloader ====
Line 58: Line 58:
 {{ :​si:​laboratoare:​nuttx_bootloader.png?​600 |}} {{ :​si:​laboratoare:​nuttx_bootloader.png?​600 |}}
  
-Esp32 foloseste doua bootloadere ​intr-un proces denumit multi-stage boot:+Esp32 folosește două bootloadere ​într-un proces denumit multi-stage boot:
  
-  * First-stage bootloader se afla in memoria ROM si este primul cod care se executa ​la un reset de placa. Are rolul de a initializa ​accesul la memoria flash externa ​CPU-ului ​si de a stoca datele venite pe UART in cazul in care flash-uim placa. +  * First-stage bootloader se află în memoria ROM și este primul cod care se execută ​la un reset de placă. Are rolul de a inițializa ​accesul la memoria flash externă ​CPU-ului ​și de a stoca datele venite pe UART în cazul în care flash-uim placa. 
-  * Second-stage bootloader preia controlul de la first-stage bootloader, ​citeste ​tabela de partitii si incepe sa ruleze executabilul de NuttX.+  * Second-stage bootloader preia controlul de la first-stage bootloader, ​citește ​tabela de partiții și începe să ruleze executabilul de NuttX.
  
-Tabela de partitii definestein mod implicit, ​doua tipuri de partitii:+Tabela de partiții defineșteîn mod implicit, ​două tipuri de partiții:
  
-  * app - partitie ​care contine ​cod executabil. +  * app - partiție ​care conține ​cod executabil. 
-  * data - partitie ​care contine ​date.+  * data - partiție ​care conține ​date.
  
-Cu ajutorul ​partitiei ​''​otadata''​ se implementeaza ​procedeul denumit OTA - Over-the-air update. Atunci ​cand second-stage bootloader-ul ​citeste ​tabela de partitiicauta otadata ​sibazandu-se pe continutul ​acesteia, ​incepe executia partitiei ​''​ota_1''​ sau ''​ota_2''​. Astfel, ​presupunand ca sistemul ​foloseste ​''​ota_1'', ​in cazul in care vrem sa reflash-uim placa putem sa incarcam ​noul binar in ''​ota_2'',​ iar mai apoi doar sa dam un reset. ​In cazul in care partitia ​otadata nu exista ​sau nu este initializata, bootloader-ul foloseste ​partitia ​''​factory'' ​implicita ​de la adresa 0x10000.+Cu ajutorul ​partiției ​''​otadata''​ se implementează ​procedeul denumit OTA - Over-the-air update. Atunci ​când second-stage bootloader-ul ​citește ​tabela de partițiicaută ​otadata ​șibazându-se pe conținutul ​acesteia, ​începe execuția partiției ​''​ota_1''​ sau ''​ota_2''​. Astfel, ​presupunând că sistemul ​folosește ​''​ota_1'', ​în cazul în care vrem să reflash-uim placa putem să încărcăm ​noul binar în ''​ota_2'',​ iar mai apoi doar să dăm un reset. ​În cazul în care partiția ​otadata nu există ​sau nu este inițializată, bootloader-ul foloseste ​partiția ​''​factory'' ​implicită ​de la adresa 0x10000.
  
 <note important>​ <note important>​
-In functie ​de nevoile ​aplicatiei, este posibil ​sa incarcam ​executabilul direct la adresa 0x1000 ​in locul bootloader-ului pentru a fi executat direct de first-stage bootloader.+În funcție ​de nevoile ​aplicației, este posibil ​să încărcăm ​executabilul direct la adresa 0x1000 ​în locul bootloader-ului pentru a fi executat direct de first-stage bootloader.
 </​note>​ </​note>​
  
-==== Exercitii ​====+==== Exerciții ​====
  
-Pentru a putea rula exercitiile, este nevoie ​sa compilati ​NuttX folosind ''​esp32-devkitc:​sta_softap'',​ la care va trebui ​sa activati ​manual alte cateva ​config-uri:+Pentru a putea rula exercițiile, este nevoie ​să compilați ​NuttX folosind ''​esp32-devkitc:​sta_softap'',​ la care va trebui ​să activați ​manual alte câteva ​config-uri:
  
   * CONFIG_NET_ROUTE=y   * CONFIG_NET_ROUTE=y
Line 83: Line 83:
   * CONFIG_SYSTEM_IPTABLES=y   * CONFIG_SYSTEM_IPTABLES=y
  
-**1.** ​Conectati ​Esp32-ul la reteaua facultatii si testati ​cu ''​ping 8.8.8.8'' ​ca aveti acces la internet. ​Folositi ​interfata ''​wlan0''​.+**1.** ​Conectați ​Esp32-ul la rețeaua facultății și testați ​cu ''​ping 8.8.8.8'' ​că aveți ​acces la internet. ​Folosiți ​interfata ''​wlan0''​. 
 + 
 +<note tip> 
 +În cazul în care nu reușiți să vă conectați la rețeaua facultății,​ puteți folosi hotspot-ul de pe telefonul mobil. Acest lucru vă va permite să testați atăt conectarea la o rețea nesecurizată,​ căt și la una securizată (prin WPA2). 
 +</​note> ​
  
 <note important>​ <note important>​
-NuttX nu trateaza in mod implicit semnalul SIGINT, iar in urma rularii ​ping-ului vi se va bloca consola de nsh. Puteti ​evita aceasta problema ​prin activarea CONFIG_TTY_SIGINT.+NuttX nu tratează în mod implicit semnalul SIGINT, iar în urma rulării ​ping-ului vi se va bloca consola de nsh. Puteți ​evita această problemă ​prin activarea CONFIG_TTY_SIGINT.
 </​note>​ </​note>​
  
-Rulati ​comanda ''​route'' ​si inspectati ​output-ul acesteia. Va fi relevant la exercitiul ​3.+Rulați ​comanda ''​route'' ​și inspectați ​output-ul acesteia. Va fi relevant la exercițiul ​3.
  
-**2.** ​Configurati ​placa sa ruleze ​in modul SoftAP ​si conectati-va cu laptopul la retea pentru a testa. ​Folositi interfata ​''​wlan1''​. ​Rulati ​din nou comanda ''​route'' ​si observati ​cum s-a modfiicat ​tabela de routare.+**2.** ​Configurați ​placa să ruleze ​în modul SoftAP ​și conectați-vă cu laptopul la rețea ​pentru a testa. ​Folosiți interfața ​''​wlan1''​. ​Rulați ​din nou comanda ''​route'' ​și observați ​cum s-a modificat ​tabela de routare.
  
-**3.** ​In urma exercitiului ​2, laptopul este conectat la Esp32, dar nu are acces la internet. ​Puteti ​testa acest lucru din CMD/​terminal folosind ''​ping 8.8.8.8''​. Mai departe, ​urmariti pasii de mai jos:+**3.** ​În urma exercițiului ​2, laptopul este conectat la Esp32, dar nu are acces la internet. ​Puteți ​testa acest lucru din CMD (Windows)/​terminal ​(Linux) ​folosind ''​ping 8.8.8.8''​. Mai departe, ​urmăriți pașii ​de mai jos:
  
-  - De pe Esp32 mai rulati ​data comanda ''​ping 8.8.8.8''​. ​Observati ca nu aveti acces la internet. Configurarea wlan1 ca SoftAP a stricat tabela de routare, ​asa cum se poate observa din output-ul comenzii ''​route''​. +  - De pe Esp32 mai rulați ​dată comanda ''​ping 8.8.8.8''​. ​Observați că nu aveți ​acces la internet. Configurarea wlan1 ca SoftAP a stricat tabela de routare, ​așa cum se poate observa din output-ul comenzii ''​route''​. 
-  - Setati ​regula ​implicita ​de routare folosind comanda ''​addroute default 192.168.0.1 wlan0''​. Esp32 este conectat din nou la internet, ​puteti testati ​folosind ''​ping''​. +  - Setați ​regula ​implicită ​de routare folosind comanda ''​addroute default 192.168.0.1 wlan0''​. Esp32 este conectat din nou la internet, ​puteți să testați ​folosind ''​ping''​. 
-  - Ultimul pas implica adaugarea ​unei reguli in iptables pentru a aplica NAT pe fiecare pachet routat de Esp32: ''​iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE''​. +  - Ultimul pas implică adăugarea ​unei reguli in iptables pentru a aplica NAT pe fiecare pachet routat de Esp32: ''​iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE''​. 
-  - Testati ​de pe laptopul personal folosind ping, iar din browser ​conectati-va la ''​www.google.com''​.+  - Testați ​de pe laptopul personal folosind ping, iar din browser ​conectați-vă la ''​www.google.com''​.
  
 ==== Resurse ==== ==== Resurse ====
si/laboratoare/03.txt · Last modified: 2023/10/22 10:57 by robert_ionut.alexa
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