Differences

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

Link to this comparison view

si:laboratoare:06 [2024/11/11 12:02]
florin.stancu
si:laboratoare:06 [2024/11/11 12:43] (current)
florin.stancu [Exerciții]
Line 74: Line 74:
   * 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!
-  * 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/TX la TX/RS-ul adaptorului!) + chemați asistentul să verifice!+  * 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
 +  * 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**
  
 <note warning> <note warning>
Line 94: Line 95:
   * După ce vă apare prompt-ul ''​U-Boot>​ '',​ rulați comanda ''​mmc list''​. O să vă apară o listă de dispozitive MMC (ar trebui să vedeți cardul SD ca fiind detectat); încercați-le pe fiecare cu ''​mmc dev <​N>''​ și apoi ''​mmc info''​ până găsiți cardul SD;   * După ce vă apare prompt-ul ''​U-Boot>​ '',​ rulați comanda ''​mmc list''​. O să vă apară o listă de dispozitive MMC (ar trebui să vedeți cardul SD ca fiind detectat); încercați-le pe fiecare cu ''​mmc dev <​N>''​ și apoi ''​mmc info''​ până găsiți cardul SD;
   * Apoi rulați comanda ''​ums mmc <​N>'',​ unde ''<​N>''​ este numărul perifericului MMC. Acesta va lansa în execuție un program care emulează un Mass Storage Device pe interfața USB Type-C folosită la conectarea la laptop;   * Apoi rulați comanda ''​ums mmc <​N>'',​ unde ''<​N>''​ este numărul perifericului MMC. Acesta va lansa în execuție un program care emulează un Mass Storage Device pe interfața USB Type-C folosită la conectarea la laptop;
-  * Inspectați noul dispozitiv montat (nu uitați să faceți pass-through la noul device USB în mașina virtuală, dacă este cazul!). Mai precis, montați prima partiție (posibil să fie și singura) pe mașina voastră virtuală cu Linux. Ce fișiere există? Comparați cu partiția ''/​boot''​ a rootfs-ului.+  * Inspectați noul dispozitiv montat (nu uitați să faceți pass-through la noul device USB în mașina virtuală, dacă este cazul!). Mai precis, montați prima partiție (posibil să fie și singura) pe mașina voastră virtuală cu Linux, e.g., în /mnt. Ce fișiere există? Comparați cu partiția ''/​boot''​ a rootfs-ului.
  
 <note important>​ <note important>​
Line 154: Line 155:
 lsblk  # NOTAȚI CU ATENȚIE CARE E CARDUL SD DE ~16GB !!!! lsblk  # NOTAȚI CU ATENȚIE CARE E CARDUL SD DE ~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...
-parted /​dev/​sd<​X> ​ # înlocuiți <​X>​-ul+sudo parted /​dev/​sd<​X> ​ # înlocuiți <​X>​-ul
 # în parted, dați comenzile '​print'​ pentru a vedea partițiile curente, '​help'​ pentru comenzi # în parted, dați comenzile '​print'​ pentru a vedea partițiile curente, '​help'​ pentru comenzi
 +# creați o partiție nouă (primary, ext2 sunt setări bune) pe restul de spațiu liber (puteți scrie ''​100%''​),​ apoi quit
 +# apoi, pentru a încărca tabela nouă de partiții, folosiți comanda:
 +sudo partprobe /​dev/​sd<​X>​
 </​code>​ </​code>​
  
Line 163: Line 167:
 Dacă folosiți mașina virtuală, este recomandat să faceți snapshot (riscați să ștergeți partițiile sistemului de operare real dacă nu aveți grijă!). Dacă folosiți mașina virtuală, este recomandat să faceți snapshot (riscați să ștergeți partițiile sistemului de operare real dacă nu aveți grijă!).
  
-Dacă sunteți pe un Linux în mașină fizică ​(please don't), întrebați un asistent dacă dați comenzile bune **ÎNAINTE DE A LE DA**!+Dacă sunteți pe un Linux în mașină fizică ​și nu sunteți siguri de ce faceți, întrebați un asistent dacă dați comenzile bune **ÎNAINTE DE A LE DA**!
 </​note>​ </​note>​
-  * Formatați noua partiție (cea de-a doua) folosind utilitarul ''​mkfs.ext4''​. Folosiți și argumentul ''​-L RPI_ROOTFS''​ pentru a-i da un label (nume). +  * Formatați noua partiție (cea de-a doua, e.g. ''/​dev/​sdX2''​) folosind utilitarul ''​mkfs.ext4''​. Folosiți și argumentul ''​-L RPI_ROOTFS''​ pentru a-i da un label (nume). 
-  * Copiați conținutul ​directoarelor ​rootfs-ului oficial în partiția ''​ext4''​ nou-creată (folosiți ​''​sudo cp -ar''​ pentru a păstra meta-informațiile fișierelor -- utilizatorii șchmod-ul atribuit).+  * Copiați conținutul ​arhivei ''​rootfs.tar.xz''​ (descărcată de pe GitHub la începutul laboratorului) pe partiția ''​ext4''​ nou-creată
 +<​code>​ 
 +# montăm partiția în /​media/​rootfs ​(pe care trebuie să-l cream) 
 +sudo mkdir /​media/​rootfs 
 +sudo mount /dev/sdX2 /​media/​rootfs 
 +# TODO: mount sdX1 undeva (veți avea nevoie mai jos), creați un dir nou sau folosiți ​/mnt 
 +sudo tar xf rootfs.tar.xz ​-C /​media/​rootfs 
 +sudo sync  # sincronizează datele cacheuite în RAM către dispozitivele fizice 
 +# dacă comanda sync durează mult, NU O ÎNTRERUPEȚI!!! citiți notița 
 +# când a terminat, nu dați unmount, mai avem de copiat ceva de pe partiție!! 
 +</​code>​ 
 <​note>​ <​note>​
-Este posibil ca operația ​de copiere să dureze neobișnuit de mult (cel mult 10 min)totul depinde ​de calitatea cardului SD folosit în RPI (cele mai ieftine ​:).+Cardurile SD sunt extrem ​de lente, iar Linux are un obicei prost de a cache-ui fișierele copate în RAM-ul local și a le scrie în background după ce returnează comenzile ​de dezarhivare / copiere! Rulați comanda ''​sudo sync''​care este blocantă până toate operațiile ​de scriere pe disk se vor completa. 
 + 
 +Pentru a monitoriza progresul, utilizați one-liner-ul ''​watch grep -e Dirty-e Writeback: /​proc/​meminfo''​ (așteptați până Writeback devine aproape de zero, iar Dirty sub 1MB).
 </​note>​ </​note>​
  
-  * Acum mai avem nevoie de câteva fișiere pentru a boota linux-ul (pe care le găsiți ​pe rootfs ​în ''/​boot''​),​ anume:+  * Așa cum a fost menționat, ​avem nevoie de câteva fișiere ​din sistemul rădăcină ​pentru a boota linux-ul (pe care le găsiți în ''​/​media/​rootfs/​boot'' ​pe partiția a doua, sau în arhiva rootfs.tar.xz în directorul de boot), anume:
     * ''​vmlinuz--*'';​     * ''​vmlinuz--*'';​
     * ''​initrd.img-*'';​     * ''​initrd.img-*'';​
-    * //device tree blob-ul ar trebui să fie bun cel de la BL2, încărcat automat și de către u-boot!//;+    * //device tree blob-ul ar trebui să fie bun cel de la BL2, încărcat automat și de către u-boot, nu-l preluați pe acesta!//;
  
-<note important>​ +  ​* NU UITAȚI: după ce procesul de copiere s-a terminat ​(și ''​sync''​ nu mai blochează!), demontați toate device-urile implicate (i.e., cele 2 partiții ale cardului SD).
-Cardurile SD sunt extrem de lente, iar Linux are un obicei prost de a cache-ui fișierele copate în RAM-ul local și a le scrie în background după ce returnează comenzile de dezarhivare / copiere! Rulați comanda ''​sudo sync'',​ care este blocantă până toate operațiile de scriere pe disk se vor completa. +
- +
-Pentru a monitoriza progresul, utilizați one-liner-ul ''​watch grep -e Dirty: -e Writeback: /​proc/​meminfo''​ (așteptați până Writeback devine aproape de zero, iar Dirty sub 1MB). +
-</​note>​ +
- +
-  ​* NU UITAȚI: după ce procesul de copiere s-a terminat, demontați toate device-urile implicate (i.e., cele 2 partiții ale cardului SD).+
   * După copiere, puteți vizualiza fișierele de pe partiția FAT32 din U-Boot: ''​fatls mmc 1''​ ;)   * După copiere, puteți vizualiza fișierele de pe partiția FAT32 din U-Boot: ''​fatls mmc 1''​ ;)
  
Line 191: Line 202:
 <​code>​ <​code>​
 # inițial, fără initramfs: # inițial, fără initramfs:
-fatload mmc <N>:1 ${kernel_addr_r} vmlinuz-6.1.0-13-arm64 +fatload mmc <N>:1 ${kernel_addr_r} vmlinuz-6.1.61-rpi+ 
-#fatload mmc <N>:1 ${ramdisk_addr_r} initrd.img-6.1.0-13-arm64 +#fatload mmc <N>:1 ${ramdisk_addr_r} initrd.img-6.1.61-rpi+  # e degeaba, momentan :D 
-# astea sunt setate deja în cmdline.txt ​(verificați), 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 
-#setenv ​bootargs "​earlycon=pl011,​mmio32,​0xfe201000 console=serial0,​115200 root=/​dev/​mmcblk0p2 rw rootwait"​+putem explora device tree-ul din memorie în felul următor: 
 +fdt addr ${fdt_addr} 
 +fdt print /chosen 
 +# verificați valoarea ​bootargs ​să conțină cel puțin: 
 +# bootargs = "... earlycon=pl011,​mmio32,​0xfe201000 console=serial0,​115200 root=/​dev/​mmcblk0p2 rw rootwait"​ 
 +booti ${kernel_addr_r} - ${fdt_addr} 
 +# se va plânge că nu aveți zonă de memorie de decompresie alocată! facem asta: 
 +# set decompression zone in RAM at 400MB, 64MB in size 
 +setenv kernel_comp_addr_r 0x19000000 
 +setenv kernel_comp_size 0x04000000 
 +# try again:
 booti ${kernel_addr_r} - ${fdt_addr} booti ${kernel_addr_r} - ${fdt_addr}
-sau cu initramfs:​ +ramdisk-ul momentan nu merge folosit, dar e opțional la debian
-#booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr}+
 </​code>​ </​code>​
  
Line 207: Line 227:
  
 <​note>​ <​note>​
-Pentru a vedea parametrii de boot configurați în device tree de către BL2, rulați comenzile de u-boot: +Login-ul pentru rootfs este ''​pi''​ (fără parolă)!
-<​code>​ +
-fdt addr ${fdt_addr} +
-fdt print /chosen +
-</​code>​+
 </​note>​ </​note>​
  
si/laboratoare/06.1731319352.txt.gz · Last modified: 2024/11/11 12:02 by florin.stancu
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