Differences

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

Link to this comparison view

si:laboratoare:03 [2023/10/17 19:02]
robert_ionut.alexa
— (current)
Line 1: Line 1:
-===== 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. 
- 
-In final, vor fi prezentate cateva notiuni despre procesul de boot de pe Esp32. 
- 
-==== 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. 
- 
-In comunicatia prin Wi-Fi, un device poate sa aiba unul dintre rolurile de mai jos: 
- 
-  * Router - defineste o noua retea. 
-  * Access Point - un device care face parte dintr-o retea, se conecteaza la router, dar este folosit pentru a crea subretele. 
-  * Station - un simplu device conectat in retea. 
- 
-<note tip> 
-Un smartphone poate functiona ca un access point atunci cand este configurat hotspot-ul. 
-</​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. 
- 
-Pentru a putea conecta Esp32 la o retea Wi-Fi existenta identificata prin <​myssid>:<​mypasswd>,​ se pot folosi comenzile de mai jos: 
- 
-<​code>​ 
-ifup wlan0 
-wapi psk wlan0 <​mypasswd>​ 3 
-wapi essid wlan0 <​myssid>​ 1 
-renew wlan0 
-</​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: 
- 
-  * WEP 
-  * WPA 
-  * WPA2 (WPA2-PSK) 
-  * 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''​. 
- 
-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: 
- 
-<​code>​ 
-ifup wlan1 
-dhcpd_start wlan1 
-wapi psk wlan1 <​mypasswd>​ 3 
-wapi essid wlan1 nuttxapp 1 
-</​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. 
- 
-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]]. 
- 
-De asemenea, o alta comanda utila pentru a investiga starea interfetelor de retea este ''​ifconfig'',​ asemanatoarea cu cea din Linux. 
- 
-==== Bootloader ==== 
- 
-{{ :​si:​laboratoare:​nuttx_bootloader.png?​600 |}} 
- 
-Esp32 foloseste doua bootloadere intr-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. 
-  * Second-stage bootloader preia controlul de la first-stage bootloader, citeste tabela de partitii si incepe sa ruleze executabilul de NuttX. 
- 
-Tabela de partitii defineste, in mod implicit, doua tipuri de partitii: 
- 
-  * app - partitie care contine cod executabil. 
-  * data - partitie care contine date. 
- 
-Cu ajutorul partitiei ''​otadata''​ se implementeaza procedeul denumit OTA - Over-the-air update. Atunci cand second-stage bootloader-ul citeste tabela de partitii, cauta otadata si, bazandu-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. 
- 
-<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. 
-</​note>​ 
- 
-==== Exercitii ==== 
- 
-Pentru a putea rula exercitiile,​ este nevoie sa compilati NuttX folosind ''​esp32-devkitc:​sta_softap'',​ la care va trebui sa activati manuale alte cateva config-uri: 
- 
-  * CONFIG_NET_ROUTE=y 
-  * CONFIG_NET_IPFORWARD=y 
-  * CONFIG_NET_NAT=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''​. 
- 
-<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. 
-</​note>​ 
- 
-Rulati comanda ''​route''​ si inspectati output-ul acesteia. Va fi relevant la exercitiul 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. 
- 
-**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: 
- 
-  - De pe Esp32 mai rulati o 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''​. 
-  - 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''​. 
-  - 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''​. 
-  - Testati de pe laptopul personal folosind ping, iar din browser conectati-va la ''​www.google.com''​. 
- 
-==== Resurse ==== 
-  * [[https://​nuttx.apache.org/​docs/​latest/​applications/​wapi/​index.html| WAPI (Wireless API)]] 
-  * [[https://​www.lucadentella.it/​en/​2016/​12/​22/​esp32-4-flash-bootloader-e-freertos/​| Esp32 Bootloader]] 
-  * [[https://​eadalabs.com/​esp32-nuttx-and-bridged-networking/​|Esp32,​ NuttX and bridged networking]] ​ 
  
si/laboratoare/03.1697558529.txt.gz · Last modified: 2023/10/17 19:02 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