Beágyazott Linux és platformjai

VIMIAC19  |  Villamosmérnök BSc  |  Félév: 5  |  Kredit: 5

A tantárgy célkitűzése

A tárgy elsődleges célja a hallgatók bevezetése a beágyazott Linux alkalmazás (user-space)
fejlesztés részleteibe, beleértve a platform választást is. A platformok tekintetében érintjük a
klasszikus PC (x86) platformot, de elsősorban a modern heterogén architektúrájú rendszerchipekre
(SoC) és az FPGA platformra összpontosítunk.
Ismertetjük a beágyazott Linux user-space szoftver lehetőségeit, a fejlesztés menetét, a tipikus
alapfeladatokat, pl. parancssor és konfiguráció feldolgozás, programvégrehajtás és életciklus
menedzsment részletei (systemd), párhuzamos és valós-idejű végrehajtás (multicore és heterogén
környezetben). Ezen kívül sor kerül még az fájlrendszerrel való ismerkedésre és a hálózatkezelésre
is bevezető szinten.
Kitérünk a Linux videó alrendszerére (V4L2), a hardver gyorsított kép- és videó feldolgozást
támogató magas szintű megoldásokra (GStreamer, FFmpeg, OpenCV), valamint a párhuzamos
végrehajtó egységek (grafikus processzorok, FPGA-k) programozási lehetőségeire (OpenCL, CUDA).
Ismertetjük a komplex, heterogén System-on-Chip (SoC) megoldások jellemző felépítését (pl. TI
AM3x/4x/5x/6x, NXP i.MXx, NVIDIA Jetson), az újrakonfigurálható SoC-k (pl. Xilinx MPSoC, Versal)
architektúráját. Bemutatjuk az újrakonfigurálható hardverek szoftver környezetének kialakítását,
valamint az egyedi, hardver gyorsított alkalmazásfejlesztés lehetőségeit.
Kovácsházy Tamás
Kovácsházy Tamás

docens

tárgyfelelős

A tárgy oktatói

A tantárgy részletes tematikája

Előadás

1. Beágyazott Linux bevezető, a Linux felépítése és platformjai (SoC, FPGA, stb.), SW végrehajtási
modell és memória menedzsment (virtuális tárkezelés és annak következményei), perifériák kezelés lehetőségei és következményei Linuxban (user- és kernel-space).

2. Shell használta. Linux programok alapjai, parancssor és konfiguráció kezelése. Fájlrendszer és
használata, beleértve /proc, /sys, stb. fájlrendszereket. Soros port (UART) használata programozott
módon.

3. Ütemező, ütemező befolyásolása, valós-idejű ütemezés. Folyamatok és szálak használata és
alkalmazásának a következményei. Eseményvezérelt programozás mintái (select, poll, epol).
Rendszerindítás és folyamatmenedzsment alapjai (systemd és alternatívái).

4. Kölcsönös kizárás, kommunikáció és szinkronizáció Linux-ban. Megoldások közös memória
esetén (folyamat kontextusában futó szálak között). Mutex, readers-writer lock, user-space
spinlock, conditional variable és azok használata.

5. Folyamatok közötti kommunikáció (IPC) alacsony szinten és magas szinten (DBUS).
Eseménykezelés, csővezetékek, folyamatok közötti osztott memória és annak ahasználata, file
locking, DBUS alapok.

6. Beágyazott perifériák kezelésére alkalmas alrendszerek, rövid bevezetés a Device Tree-be. GPIO
kezelése Linux-ban és a programozási modelleknek a hatása a teljesítményre. A/D és D/A kezelés,
I2C, SPI és CAN kezelése Linux-ban, a kapcsolódó alrendszerek felépítése.

7. User-space driverek, USB kezelés és TUN/TAP felhasználói módban. Memóriába leképzett
perifériák elérése felhasználói módban, előnyök és hátrányok.

8. Alacsony (socket) és magas szintű (HTTP, stb.) hálózatkezelés, köztes rétegek (Middleware).

9. Heterogén architektúra támogatása, feladatütemezés és kommunikáció külső HW gyorsítókkal
(valós-idejű magok, AI gyorsítás, OpenCV gyorsítás példával, etc).

10. A Linux multimédia alrendszere: Video for Linux (V4L2). Multimédia keretrendszerek
áttekintése: Gstreamer, FFmpeg.

11. SoC, fogalma, jellemző felépítése. Fix funkciós és programozható hardver egységek, ezek
rendszerbe illesztése. GPU-k felépítése.

12. Heterogén rendszerek programozási modellje: OpenCL és CUDA.

13. FPGA alapú SoC eszközök jellemzői (Intel, Lattice, Xilinx). Processzoros alrendszer,
programozható logika és egyéb rendszer elemek ismertetése. FPGA alapú gyorsítók magas szintű
leírása: OpenCL és HLS.

Gyakorlat

1. gyakorlat: Fejlesztő Rendszer összeállítása

2. gyakorlat: Shell programozás és parancssor kezelés, soros port kezelése termio-val.

3. gyakorlat: Folyamat és szál létrehozása, ütemezés befolyásolása (RT és CPU affinitás),
folyamatkezelés systemd-vel

4. gyakorlat: Select és poll/epol alapú komplex SW architektúrák

5. gyakorlat: Kölcsönös kizárás és szinkronizáció közös memóriában, IPC megoldások használata

6. gyakorlat: GPIO (GPIO user-space könyvtárral és memóriába leképezve) kezelése felhasználói
programban, I2C és SPI kezelése (user-space saját driver megírása és létező kernel driver
használata)

7. gyakorlat: User-space USB periféria kezelése (periféria MCU-n megvalósítva, kész kóddal, kommunikációs specifikációval)

8. gyakorlat: Socket programozás, HTTP kliens programozás (információ letöltése programból
szerverről)

9. gyakorlat: Remoteproc és rpmsg a gyakorlatban, OpenCV heterogén rendszerchip-en
(remoteproc és rpmsg magas szinten)

10. gyakorlat: V4L2 user space API használata.

11. gyakorlat: Gstreamer használata.

12. gyakorlat: OpenCL/CUDA alapok: hoszt kód és egyszerű kernel.

13. gyakorlat: OpenCL/CUDA: kernel programozás.