This is an old revision of the document!


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.

Un smartphone poate functiona ca un access point atunci cand este configurat hotspot-ul.

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:

ifup wlan0
wapi psk wlan0 <mypasswd> 3
wapi essid wlan0 <myssid> 1
renew wlan0

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:

ifup wlan1
dhcpd_start wlan1
wapi psk wlan1 <mypasswd> 3
wapi essid wlan1 nuttxapp 1

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 aici.

De asemenea, o alta comanda utila pentru a investiga starea interfetelor de retea este ifconfig, asemanatoarea cu cea din Linux.

Bootloader

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.

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.

Exercitii

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:

  • 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.

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.

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:

  1. 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.
  2. 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.
  3. 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.
  4. Testati de pe laptopul personal folosind ping, iar din browser conectati-va la www.google.com.

Resurse

si/laboratoare/03.1697629577.txt.gz · Last modified: 2023/10/18 14:46 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