Skip to content
Snippets Groups Projects
Verified Commit 061fb01d authored by Nádudvari Ákos's avatar Nádudvari Ákos
Browse files

feat(tervezés): esp32 platform ismertető init

parent b8513808
Branches
No related tags found
No related merge requests found
Pipeline #2706 passed
......@@ -613,13 +613,16 @@ kényelmet a biztonság elé helyezni.
hiszen minden valaha létrejött szoftver életciklusában van emberi tényező. Az
emberi tényező hozzájárul a szoftver helytelen működéséhez, az abban keletkező
hibákhoz. A hibák akár sebezhetőséget is tudnak magukkal hordozni, melyek
kihasználásával harmadik fél számára adhatnak hozzáférést a rendszerhez.
A sebezhetőségek túlnyomórészt helytelen memóriakezelésből származnak --
túlcsordulás, use-after-free, nem inicializált memória. \cite{software-vuln}
Ezek elkerülése végett be kell vezetni a helyesség ellenőrzésére alkalmas
eszközöket, vagy ha lehet, az ezt megelőző módszereket alkalmazni. Ez lehet
a szoftver tervezés-fejlesztés-validálás életciklusban változtatás, vagy a
fejlesztői környezetben.
kihasználásával harmadik fél számára adhatnak hozzáférést a rendszerhez. A
Microsoft nemrég egy felmérést végzett a saját termékein, melyben a szofvteres
sebezhetőségekeket kiváltó okokat kereste. Az eremények magukért beszélnek:
a sebezhetőségekre kiadott biztonsági javítások $70 \%$-a memóriakezelési
hibákból származott a megállapításuk szerint. \cite{ms-rust} \cite{ms-vuln-70}
A sebezhetőségek sok forrásból keletkezhetnek, de túlnyomórészt helytelen
memóriakezelésből származnak -- túlcsordulás, use-after-free, nem inicializált
memória. \cite{software-vuln} Ezek elkerülése végett be kell vezetni a helyesség
ellenőrzésére alkalmas eszközöket, vagy ha lehet, az ezt megelőző módszereket
alkalmazni. Ez lehet a szoftver tervezés-fejlesztés-validálás életciklusban
változtatás, vagy a fejlesztői környezetben.
\clearpage % Ez azért kell, hogy nehogy képek átcsússzanak a következő fejezethez
......@@ -100,7 +100,7 @@ szereztem tudást az adott technológiákról, megoldásokról. A következő fe
részletesen adok ismertetést azokról.
\begin{figure}[htbp!]
\includesvg[width=\columnwidth]{images/rendszer.drawio.svg}
\includesvg[width=\textwidth]{images/rendszer.drawio.svg}
\caption{A teljes rendszer magas szintű vázlata}
\label{diag:rendszer}
\end{figure}
......@@ -109,9 +109,81 @@ részletesen adok ismertetést azokról.
\subsection{ESP32 platform}
\paragraph{} Az Espressif más megközelítéssel tervezi a hardvereit, mint hasonló
platfomok. Egy alacsony fogyasztású beépített rendszer általában minimális számú
perifériával van ellátva, elterjedten a mikrokontroller tokozásában nincsenek
kiegészítő perifériák, csak a processzor, órajel vezérlés, debug interfész,
és egyéb alapvető komponensek. Ez jellemző például az STMicroelectronics
ARM mikroprocesszor alapú chipjeire. Ez ideális egy olyan rendszernél,
ahol a hardver tervezését is szeretnénk maximálisan magunk elvégezni minden
részletében. Ezzel a módszerrel a végeredmény nagyon optimalizált összetételt
fog eredményezni egy nagyon specifikus célra. Hátránya, hogy a későbbi
változtatás felmerülő igényével számolni nehezebb, és azt legtöbb esetben
nehezebb kivitelezni, ezért rugalmatlanabb, mint itt az ESP32 esetében. Az
analógia a következő: legyen egy komplett, jól megválasztott perifériákkal
ellátott alaprendszer a chipen (``Systen on a Chip'' -- SoC) a kezünknél. Ez a
hardver tervezésének fázisát segíti elő, illetve a később felmerülő bővítéssel
számolni legtöbb esetben triviális az integrált perifériák jelenlétében. Ez az
analógia jól illeszkedik IoT célú eszközök körében, hiszen beépített WiFi és
Bluetooth rádióval van ellátva, mellé a szoftveres támogatás is integrált, a
gyors tervezés és implementálást elősegítve. \cite{esp32-family} Ahogy láttuk
\aref{kereskedelmi}. fejezetben, egy hagyományos riasztórendszerhez az előbbi
megközelítés áll jobban, és a DIY rendszerekhez az ESP32 megközelítését tartom
ideálisabbnak. Ezért esett rá a választás, hiszen a dolgozat keretében egy
alapot tervezek készíteni egy bővíthető rendszer számára.
Az ESP32 családjában több mikroprocesszor-architektúra is megtalálható,
nevezetesen: Xtensa, ARM és RISC-V. A legtöbb modell esetében Xtensa magok
találhatóak, mely kizárólag az ESP-k körében használatos manapság. 32 bites
ALU-val és 16 darab 32 bites általános célú regiszterrel rendelkezik, 16
bites utasításkészlet mellett (ISA). Az alap ISA 82 RISC utasítást tartalmaz.
\cite{xtensa} Az általam választott ESP32 alapú fejlesztőpanel (ESP32-D1-MINI)
az ESP32-WROOM-32 chipet használja. A chip tartalmaz 4MB beépített SPI
flash memóriát, 520KB SRAM-ot. Megítélésem szerint ez elegendő erőforrás a
fehasználásunkra, hiszen nem fogjuk használni a beépített WiFi rádiót, ami
működtetése szignifikáns ROM és RAM-ot felhasználna. \cite{esp-wroom} A chip
tartalmaz egy beépített MAC interfészt (Media Access Controller), amely 17
vezetéken (MII -- Media Independent Interface) vagy 9 (RMII -- Reduced Media
Independent Interface) vezetéken képes egy fizikai médium vezérlővel (PHY)
kommunikálni. \cite{esp} Ez esetünkben praktikus, mert csupán egy Ethernet
aljzat és PHY vezérlő elegendő Ethernet LAN hálózatokkal való integráláshoz.
Továbbá a chipen a MAC egyedi DMA (Direct Memory Access) vezérlővel működik
beépített adó és vevő oldali 512 szavas FIFO-val. Ezt alkalmazva az adatátvitel
akár $100\ Mbit/s$ sebességen tud működni. \cite{esp} Számunkra nem a sebesség
a fontos, hanem a stabilitás, megbízhatóság, melynek ezek a beépített perifériák
eleget tesznek. Az adatátvitel szoftveres kezelését a gyártó által fejlesztett
framework-ben implementált driver fogja végezni, mely kevésbé rizikósabb, mint
harmadik fél által fejlesztett megoldások.
Az Espressif fenn tart ehhez az architektúrához készült fordítóprogramokat,
melyek az ESP-IDF (Espressif IoT Development Framework) szofverfejlesztői
csomagban használatosak. \cite{idf-tools} A framework alapvetően C/C++ nyelvekre
célzott. A Rust támogatás esete speciális, mely két különböző módon adott.
Az egyik mód keretében az ESP-IDF függvénykönyvtárának felhelhasználásával
implementált Rust standard library (std) segítségével tudunk fejleszteni
alkalmazást. Vagy a sokkal kisebb binárist eredményező és memóriahasználatú,
alacsonyabb szintű út: std és ESP-IDF nélkül (``\verb|no_std|''), úgynevezett
``baremetal Rust'' környezetben tudunk fejleszteni. \cite{esp-rust-approaches}
A dokumentáció jól szemlélteti a két megközelítés közötti különbségeket,
illetve mikor érdemes melyiket választani. A projektünkhöz az std használatát
választom az ESP-IDF kifejledt ökoszisztémája miatt, mellyel korábban pozitív
tapasztalataim voltak. Az eszköz szoftverében a működése óta nem találtam hibát,
ami hasonlóan egy ESP32-WROVER-32 alapú rendszer volt titkosított adatközléssel
WiFi hálozat felett. \cite{onlab} Az ESP-IDF több biztonságot garantál a program
stabilitása érdekében, mint a bare metal megoldás, hiszen ott futásidőben
nincsen operációs rendszer, ezért minden a fejlesztőre van bízva -- nincsen
heap, ezért a memóriakezelés visszaesik ránk. \cite{rust-nostd} \Aref{inf-bizt}.
fejezetben indokoltak miatt a projekt keretében a bare metal használata nem
ideális. Több minden van a fejlesztőre bízva, több befolyást ad a kezünkbe,
de ezzel egyben biztonság kárára optimalizálnánk a program memóriahasználatát
és bináris méretét. A bare metal megközelítést inkább elszigetelt, beágyazott
célhardverekhez tartom jobban igazodónak, nem magas szintű IoT-barát
megoldásoknak.
\subsection{Rust nyelv és környezet}
% Rövid ismertető a nyelvről, miért jó választás esetünkben. A nyelv körüli ekoszisztéma és a hardver integrációjáról ismertetés.
\paragraph{} A Rust nyelv ötlete egy Mozilla-nál dolgozó fejlesztő fejéből
pattant ki, amikor egy liftbe beszállt és az elromlott, hibás szoftver miatt.
\subsection{MQTT protokoll}
......
@thesis{bizt-rendszerek,
author = {Török Krisztián Antal},
author = {Török, Krisztián Antal},
title = {Biztonságtechnikai rendszerek üzemeltetése-karbantartása},
type = {szakdolgozat},
year = {2024},
......@@ -435,3 +435,101 @@ urldate = {2025-04-22},
url = {https://www.home-assistant.io/integrations/mqtt/#setting-up-a-broker},
urldate = {2025-04-23},
}
@manual{esp32-family,
title = {ESP32 Series - Datasheet},
author = {{Espressif}},
url = {
https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf
},
urldate = {2025-04-24},
}
@online{idf-tools,
title = {List of ESP-IDF Tools - Downloadable IDF tools - ESP32},
url = {
https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-guides/tools/idf-tools.html#list-of-esp-idf-tools
},
urldate = {2025-04-24},
}
@manual{xtensa,
title = {Xtensa Instruction Set Architecture (ISA)},
type = {Reference Manual},
author = {{Tensilica, Inc.}},
url = {https://0x04.net/~mwk/doc/xtensa.pdf},
urldate = {2025-04-24},
}
@manual{esp,
title = {ESP32 Series - Datasheet version 4.9},
url = {
https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf
},
urldate = {2025-04-24},
}
@manual{esp-wroom,
title = {ESP32-WROOM-32 - Datasheet},
url = {https://www.hestore.hu/prod_getfile.php?id=13796},
urldate = {2025-04-24},
}
@online{esp-rust-approaches,
title = {Overview of Development Approaches - The Rust on ESP Book},
url = {
https://docs.esp-rs.org/book/overview/index.html#overview-of-development-approaches
},
urldate = {2025-04-24},
}
@online{rust-nostd,
title = {A no{\_}std Rust Environment},
url = {
https://docs.rust-embedded.org/book/intro/no-std.html#a-no_std-rust-environment
},
urldate = {2025-04-24},
}
@book{rust-book,
title = {The Rust Programming Language (Covers Rust 2018)},
author = {Klabnik, S. and Nichols, C.},
isbn = {9781718500457},
url = {https://doc.rust-lang.org/book},
urldate = {2025-04-24},
year = {2019},
publisher = {No Starch Press},
}
@report{onlab,
author = {Nádudvari, Ákos},
title = {ITK alkalmazás (ITKapp) fejlesztése modern, Web alapú
technológiákkal},
type = "Önálló Laboratórium",
institution = {PPKE ITK},
year = 2024,
month = {5},
url = {https://users.itk.ppke.hu/~nadak/files/itkapp_onlab.pdf},
}
@online{ms-rust,
title = {Microsoft is Getting Rusty: A Review of Successes and Challenges},
type = "presentation",
author = {Mark Russinovich},
organization = {Rust Nation UK},
date = {2025-02-26},
url = {https://youtu.be/1VgptLwP588},
urldate = {2025-04-24},
}
@online{ms-vuln-70,
title = {A proactive approach to more secure code},
author = {Gavin Thomas},
organization = {{Microsoft - MSRC}},
type = "blog",
date = {2019-07-16},
url = {
https://msrc.microsoft.com/blog/2019/07/a-proactive-approach-to-more-secure-code/
},
urldate = {2025-04-24},
}
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment