This shows you the differences between two versions of the page.
|
si:laboratoare:2025:07 [2025/11/16 20:20] florin.stancu created |
si:laboratoare:2025:07 [2025/11/17 16:17] (current) farhad_ali.gul [Exerciții] |
||
|---|---|---|---|
| Line 64: | Line 64: | ||
| <note> | <note> | ||
| - | **În laborator, vom folosi echipamente Raspberry PI 4!** conectate prin USB Type-C și un adaptor UART la USB pentru vizualizarea consolei dispozitivului (din păcate, nu dispunem de suficiente monitoare HDMI în laborator + cabluri adaptoare). | + | **În acest laborator, vom folosi echipamente Raspberry PI 4!** conectate prin USB Type-C și un adaptor UART la USB pentru vizualizarea consolei dispozitivului (din păcate, nu dispunem de suficiente monitoare HDMI în laborator + cabluri adaptoare). |
| Înainte de a începe exercițiile, asigurați-vă că aveți cel puțin 10GB de storage disponibili în mașină virtuala de laborator. | Înainte de a începe exercițiile, asigurați-vă că aveți cel puțin 10GB de storage disponibili în mașină virtuala de laborator. | ||
| </note> | </note> | ||
| - | **0.** Descărcați [[https://github.com/cs-pub-ro/SI-rpi-debian-scripts/releases|de aici o arhivă unui sistem de fișiere folosit ca referință laborator]] pentru RPI4 + imaginea partiției ''rpi-boot.img'' (utilă în caz că se strică bootloaderul). | + | **0.** Descărcați [[https://github.com/cs-pub-ro/SI-rpi-debian-scripts/releases|de aici arhiva sistemului de fișiere folosit ca referință laborator]] (''rootfs.tar.xz'') pentru RPI4 + imaginea partiției de boot, ''rpi-boot.img'' (ce va trebui burn-uită inițial pe cardurile SD). |
| - | * Dezarhivați arhiva într-un subdirector (prin ''tar'', folosiți argumentul ''-C'' pentru a preciza directorul destinație, însă va trebui să îl creați înainte). **Atenție**: folosiți contul de ''root'', deoarece dorim să dezarhivăm fișierele și să păstrăm permisiunile originale (imaginea este un root filesystem de Linux pre-instalat!); | + | * Folosind SD card reader-ul extern, scrieți imaginea ''rpi-boot.img'' pe un MicroSD folosind utilitarul ''dd'' (pe Linux nativ sau VM, însă nu uitați să faceți USB passthrough!) sau [[https://etcher.balena.io/|Balena Etcher]] (pentru Windows, GUI):<code bash> |
| + | # prima dată, căutați denumirea dispozitivului SD cu lsblk (după capacitate, 8 sau 15GB, depinde de card): | ||
| + | lsblk # ar trebui să fie ceva cu /dev/sdX | ||
| + | sudo dd if=~/Downloads/rpi-boot.img.bin of=/dev/sd<x> bs=4k status=progress | ||
| + | # așteptați să se termine, apoi: | ||
| + | sudo sync | ||
| + | # și așteptați din nou ;)) | ||
| + | </code> | ||
| + | * Apoi, dezarhivați arhiva într-un subdirector (prin ''tar'', folosiți argumentul ''-C'' pentru a preciza directorul destinație, însă va trebui să îl creați înainte). **Atenție**: folosiți contul de ''root'', deoarece dorim să dezarhivăm fișierele și să păstrăm permisiunile originale (imaginea este un root filesystem de Linux pre-instalat!); | ||
| * Inspectați căile ''/boot'' (rețineți / copiați într-un fișier text output-ul, e util de comparat mai încolo). | * Inspectați căile ''/boot'' (rețineți / copiați într-un fișier text output-ul, e util de comparat mai încolo). | ||
| - | * Apoi, ne vom pregăti să pornim Raspberry PI 4! | + | * Apoi, ne vom pregăti să pornim Raspberry PI 4! Introduceți cardurile SD scrise mai sus... |
| - | * Asigurați-vă că firele ce conectează Raspberry PI-ul la adaptorul de serială nu sunt ieșite. Dacă da, [[https://pinout.xyz/|conectați-le corespunzător]] (UART RX (alb) / TX (verde) la TX (pin 8)/RX (pin 10) al RPI-ului!) + chemați asistentul să verifice! | + | Asigurați-vă că firele dintre Raspberry Pi și adaptorul USB–Serial sunt bine conectate. Dacă vreun fir a ieșit, reconectați-l astfel: |
| - | * TLDR: începeți cu negru (GND) la pin 6 (al treilea de pe margine), apoi imediat lângă (pe același rând), firele alb + verde (în această ordine); **firul roșu SĂ RĂMÂNĂ NECONECTAT**! | + | |
| + | * Raspberry Pi 4 Pinout: [[https://pinout.xyz/|conectați-le corespunzător]] | ||
| + | * Conexiuni corecte (USB–Serial → Raspberry Pi GPIO) | ||
| + | |||
| + | * GND (negru) → Pin 6 de pe Raspberry Pi | ||
| + | (este pinul de masă, al treilea pin de pe marginea exterioară) | ||
| + | |||
| + | * RX (alb) → Pin 8 (GPIO14 / TXD) al Raspberry Pi | ||
| + | (RX de la adaptor se conectează la TX al Raspberry Pi) | ||
| + | |||
| + | * TX (verde) → Pin 10 (GPIO15 / RXD) al Raspberry Pi | ||
| + | (TX de la adaptor se conectează la RX al Raspberry Pi) | ||
| + | |||
| + | * VCC / 5V (roșu) → NU se conectează! Raspberry Pi este alimentat separat. | ||
| + | |||
| + | * Pornește cu negru (GND) la pinul 6, iar imediat lângă pe același rând conectează alb (RX) apoi verde (TX). Roșu rămâne neconectat. După conectare, chemați asistentul să verifice. | ||
| <note warning> | <note warning> | ||
| Line 108: | Line 131: | ||
| * Aveți nevoie de toolchain-ul pentru Aarch64 să fie în ''$PATH'' (lucru adevărat pe VM-ul de la laborator); | * Aveți nevoie de toolchain-ul pentru Aarch64 să fie în ''$PATH'' (lucru adevărat pe VM-ul de la laborator); | ||
| * Urmați pașii: <code> | * Urmați pașii: <code> | ||
| - | # pe Lab VM 2023 lipsește acest pachet, instalați-l: | + | # pe Lab VM posibil să lipsească aceste pachete, instalați-le: |
| - | sudo apt install libssl-dev | + | sudo apt install libssl-dev gnutls-dev |
| git clone --branch=v2023.07.02 https://github.com/u-boot/u-boot.git | git clone --branch=v2023.07.02 https://github.com/u-boot/u-boot.git | ||
| cd u-boot | cd u-boot | ||
| Line 139: | Line 162: | ||
| * Acum directorul ''rpi-boot-firmware'' ar trebui să fie identic ca imaginea referință din laborator! | * Acum directorul ''rpi-boot-firmware'' ar trebui să fie identic ca imaginea referință din laborator! | ||
| * //Notă: Pentru a boota Linux, este necesar și ''cmdline.txt'' (folosiți-l pe cel din imaginea referință de bootloader);// | * //Notă: Pentru a boota Linux, este necesar și ''cmdline.txt'' (folosiți-l pe cel din imaginea referință de bootloader);// | ||
| - | |||
| - | <note important> | ||
| - | Dacă doriți să testați noua imagine, ar trebui să copiați aceste fișiere pe partiția FAT32 a Raspberry PI-ului. | ||
| - | Însă faceți asta doar dacă aveți încredere că nu stricați bootloaderul existent! | ||
| - | Dacă ați pățit totuși asta și doriți să refaceți, există mai multe tehnici de recuperat, cea mai simplă fiind folosirea unui SD card reader extern și scrierea imaginii ''rpi-boot.img'' descărcate la ex. 0. Alternativ, puteți scrie imaginea pe un stick USB și introduce în RPI, apoi folosiți comanda ''ums'' pentru a scrie cardul SD introdus în dispozitiv și apoi ''dd'' pentru a scrie bootloaderul referință:<code> | ||
| - | sudo dd if=~/Downloads/rpi-boot.img.bin of=/dev/sd<x> bs=4k status=progress && sudo sync | ||
| - | </code> | ||
| - | </note> | ||
| **3.** Ne dorim să instalăm sistemul de fișiere Linux referință pe cardul SD din Raspberry PI (folosind USB Mass Storage-ul prin USB Type-C). | **3.** Ne dorim să instalăm sistemul de fișiere Linux referință pe cardul SD din Raspberry PI (folosind USB Mass Storage-ul prin USB Type-C). | ||
| Line 153: | Line 168: | ||
| * Primul lucru, va trebui să creați o partiție ''ext4'' pe cardul SD, **după cea de boot, FAT32 (NU O ȘTERGEȚI)!**. Putem folosi ''fdisk'' sau utilitarul mai modern, ''parted'' (tot în linia de comandă :D ): | * Primul lucru, va trebui să creați o partiție ''ext4'' pe cardul SD, **după cea de boot, FAT32 (NU O ȘTERGEȚI)!**. Putem folosi ''fdisk'' sau utilitarul mai modern, ''parted'' (tot în linia de comandă :D ): | ||
| <code> | <code> | ||
| - | lsblk # NOTAȚI CU ATENȚIE CARE E CARDUL SD DE ~16GB !!!! | + | lsblk # POSIBIL SĂ SE SCHIMBAT, CĂUTAȚI DISPOZITIVUL CU ~8-16GB !!!! |
| # probabil SDB/SDC..., poate să fie sda dacă aveți ssd pe NVME și rulați Linux nativ... | # probabil SDB/SDC..., poate să fie sda dacă aveți ssd pe NVME și rulați Linux nativ... | ||
| sudo parted /dev/sd<X> # înlocuiți <X>-ul | sudo parted /dev/sd<X> # înlocuiți <X>-ul | ||
| Line 201: | Line 216: | ||
| <code> | <code> | ||
| + | # TODO: înlocuiți cu denumirea reală (versiunea) a fișierelor kernel și initrd! | ||
| # inițial, fără initramfs: | # inițial, fără initramfs: | ||
| - | fatload mmc <N>:1 ${kernel_addr_r} vmlinuz-6.1.61-rpi+ | + | fatload mmc <N>:1 ${kernel_addr_r} vmlinuz-6.1.xx |
| - | #fatload mmc <N>:1 ${ramdisk_addr_r} initrd.img-6.1.61-rpi+ # e degeaba, momentan :D | + | #fatload mmc <N>:1 ${ramdisk_addr_r} initrd.img-6.1.xx # e degeaba, momentan :D |
| # astea sunt setate deja în cmdline.txt, apoi sunt încărcate în DTB (FDT) mai departe de către BL2 | # astea sunt setate deja în cmdline.txt, apoi sunt încărcate în DTB (FDT) mai departe de către BL2 | ||
| # putem explora device tree-ul din memorie în felul următor: | # putem explora device tree-ul din memorie în felul următor: | ||
| Line 236: | Line 252: | ||
| * [[https://github-wiki-see.page/m/lulu98/projects-with-sel4/wiki/RPi4-Boot-Files|Explicație proces de boot al RPI 4 și fișierele firmware implicate]] | * [[https://github-wiki-see.page/m/lulu98/projects-with-sel4/wiki/RPi4-Boot-Files|Explicație proces de boot al RPI 4 și fișierele firmware implicate]] | ||
| * [[https://github.com/cs-pub-ro/SI-rpi-debian-scripts|Cod sursă scripturi compilare bootloader / kernel / generare rootfs]] | * [[https://github.com/cs-pub-ro/SI-rpi-debian-scripts|Cod sursă scripturi compilare bootloader / kernel / generare rootfs]] | ||
| + | |||