Differences

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

Link to this comparison view

iothings:laboratoare:lab8 [2022/02/11 16:54]
laura.ruse removed
iothings:laboratoare:lab8 [2022/05/11 20:05] (current)
cosmin.chenaru [Secure Boot]
Line 1: Line 1:
-====== Multitasking pentru Sparrow ======+===== Laborator 08. Securizarea aplicațiilor pe ESP32 =====
  
-In acest laborator ​vom studia implementarea unui mediu multi-tasking pentru platforma Sparrow. Pentru simplitate, functionalitatea multi-tasking este implementata peste IDE-ul Arduino sub forma unei biblioteci ce permite planificarea diferitelor task-uri, salvarea si refacerea contextului si rularea efectiva ​diferitelor procese intr-o maniera concurenta.+În laboratorul de astăzi ​vom folosi tool-ul ESP-IDF (Espressif IoT Development Framework) pentru ​securiza codul ce rulează pe plăcuța ESP32
  
-Biblioteca folosita este o versiune modificata a [[https://​github.com/​chrismoos/​avr-os|avr-os]] ce pune la dispozitie un mediu de execuie de baza pentru rularea de procese in regim de multitasking.+==== ESP-IDF ====
  
-Biblioteca foloseste ​un planificator preemptiv ​pentru ​a face schimbarea ​de context si fiecare task are propria stiva ce este salvata si refacuta ​la reluarea executieiUn timer AVR este initializat si folosit ​pentru a furniza tick-urile de ceas pe baza carora se face temporizarea executiei si schimbarea ​de context.+ESP-IDF este un framework ​pentru ​dezvoltarea de aplicații pentru plăcuțele ​de la EspressifVine cu un toolchain (compilator,​ debugger) pentru ESP32, diferite scripturi Python ​pentru a compila și scrie aplicațiile ​pe flash-ul plăcuței, cât și cu diferite exemple ​de aplicații foarte folositoare.
  
-===== Instalare si configurare =====+{{:​iothings:​laboratoare:​lab8-pic1.png|}}
  
-Biblioteca o puteti descarca de {{:iothings:​avr_os.zip|aici}}. Copiati continutul arhivei in directorul Libraries al Arduino si restartati IDE-ul.+Pentru a instala ESP-IDF, putem folosi acest tutorial:
  
-Un exemplu de folosire a bibliotecii il aveti in exemplul de mai jos:+https://​docs.espressif.com/​projects/​esp-idf/​en/​latest/​esp32/​get-started/​windows-setup.html
  
-<code C> +Puteți folosi "​ESP-IDF v4.4.1 - Offline Installer"​ pentru a instala tool-ul ESP-IDF.
-#include <AVR_OS.h>+
  
-spinlock_t testLock;+{{:​iothings:​laboratoare:​lab8-pic2.png?​300|}}
  
-// Create instance of OS multitasker +După instalare, o fereastră PowerShell se va deschide:
-AVR_OS os = AVR_OS();+
  
-// Define task 1 +{{:iothings:​laboratoare:​lab8-pic3.png?600|}
-void task1(void *arg) { +==== Secure Boot ====
-   ​uint8_t val=0; +
-    +
-    while(1) ​{ +
-        os.spinlock_acquire(&​testLock);​ +
-        Serial.println("​task1" + String((long)os.os_get_uptime()));​ +
-        os.spinlock_release(&​testLock);​ +
-        os.os_sleep(10000);​ +
-    ​+
-}+
  
-// Define task 2 +Plăcuța ESP32 are diferite niveluri de protecție, începând de la "​secure boot" și până la securizarea aplicației.
-void task2(void *arg) { +
-    int x = 0; +
-    uint8_t val = 0; +
-    while(1) {+
  
-        os.spinlock_acquire(&​testLock);​ +Vom urmări aceste doua tutoriale pentru a înțelege procesul de securizare:
-        Serial.println("​task2" + String(x++));​ +
-        os.spinlock_release(&​testLock);​ +
-        os.os_sleep(1000);​ +
-    } +
-}+
  
-// Define task 3 +https://blog.espressif.com/​understanding-esp32s-security-features-14483e465724 
-void task3(void *arg) { +https://​demo-dijiudu.readthedocs.io/​en/​latest/​security/​secure-boot.html
-    while(1) { +
-        os.spinlock_acquire(&​testLock);​ +
-        Serial.println("​task3:​ HELLOthis is a long message to make sure spinlock is working"​);​ +
-        os.spinlock_release(&​testLock);​ +
-        os.os_sleep(15000);​ +
-    } +
-}+
  
-void setup() {+=== XIP - eXecute-In-Place === 
 +=== eFUSE ===
  
-    Serial.begin(115200);​ +O siguranță electrică poate fi programată o singură dată.
-    Serial.println("​\n\nStarting up...\n\n"​);​+
  
-    os.spinlock_init(&​testLock);​+{{:​iothings:​laboratoare:​lab8-pic6-png.png|}}
  
-    os.os_schedule_task(task1,​ NULL, 0); +=== OTP keys - One Time Programmable keys === 
-    ​os.os_schedule_task(task2,​ NULL, 0); +==== Exerciții ====
-    os.os_schedule_task(task3,​ NULL, 0); +
-}+
  
-void loop() { +=== Ex1 ===
-    os.os_loop();  +
-+
-</​code>​+
  
-Task-urile sunt declarate ca functii apoi inscrise in planificator la initializarein functia setup(). Numarul total de task-uri ce pot fi declarate este limitat la 5 in avr_os.cpp, din ratiuni de dimensiune redusa a stivei.+Rulați exemplul "Hello World" din ESP-IDF. Pentru aceastaputeți copia directorul "​hello_world"​ din locația "​C:​\Espressif\frameworks\esp-idf-v4.4.1\examples\get-started"​ într-un alt folder ​(ex. "​Downloads\esp"​). Mergeți apoi către această locație în PowerShell și rulați comanda "idf.py menuconfig"​.
  
-<​note>​**Task 0:** Rulați exemplul de mai sus.</​note>​ +{{:iothings:​laboratoare:​lab8-pic4-1.png|}} 
-<​note>​**Task 1:** Definiti trei task-uri, cu o perioada de 1s, 2s, respectiv 3sFiecare task modifica starea unui LED (task1 pentru LED-ul rosu, task2 pentru LED-ul verde, task3 modifica LED-ul albastru). Un al patrulea task va comunica starea fiecarui LED pe interfata seriala, atunci cand aceasta se schimbaIn Arduino, led-urile sunt mapate pe pinii 8, 10 si 11 ai Sparrow.</​note>​ + 
-<​note>​**Task 2:** Rulati un program de achizitie de date si transmisie la gateway prin interfata radio folosind multitasking-ulUn task se ocupa cu achizitia de date de la senzorul de umiditate/temperatura,​ alt task pentru senzorul de lumina iar un al treilea task colecteaza datele culese si le transmite pe interfata radio folosind biblioteca SparrowTransfer implementata la laboratorul 3.</note>+Cu ajutorul următoarei interfațe grafice putem schimba diferite setări ale plăcuței șale aplicației. 
 + 
 +{{:​iothings:​laboratoare:​lab8-pic4.png?​600|}} 
 + 
 +Pentru a încărca noua aplicație, folosiți următoare comandă: 
 + 
 +<​note>​ 
 +idf.py -p COM5 flash 
 +</​note>​ 
 + 
 +Iar pentru a vedea consola plăcuței putem folosi: 
 + 
 +<​note>​ 
 +idf.py -p COM5 monitor 
 +</​note>​ 
 + 
 +{{:iothings:​laboratoare:​lab8-pic5.png?​600|}} 
 + 
 +=== Ex. 2 (Opțional=== 
 + 
 +===== Resurse ===== 
 + 
 +  * https://​docs.espressif.com/​projects/​esp-idf/​en/​latest/​esp32/​get-started/​index.html 
 +  https://demo-dijiudu.readthedocs.io/en/​latest/​security/​secure-boot.html 
 +  * https://​blog.espressif.com/​understanding-esp32s-security-features-14483e465724
iothings/laboratoare/lab8.1644591254.txt.gz · Last modified: 2022/02/11 16:54 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