Nvidia Jetson Nano: ora è possibile il boot da USB

Nvidia ARM

JetPack 4.5 presenta una nuova caratteristica, molto attesa dagli sviluppatori e dagli utilizzatori della piattaforma Nvidia Jetson Nano: la possibilità di eseguire il boot direttamente da un disco USB.

Perché USB?

Le ragioni per preferire un boot da USB sono molteplici. Innanzi tutto sappiamo (per averlo purtroppo spesso provato sulla nostra pelle) che le schede microSD non sono sempre “reliable”, affidabili: queste schede tendono a perdere nel tempo la capacità di acquisire e riportare in modo veloce ed efficiente le informazioni in essi salvate. Anche acquistando periferiche microSD dai nomi più blasonati, è difficile che un sistema SBC possa superare i 2-3 anni di attività. Se questo non rappresenta necessariamente un problema dal punto di vista economico, avere anche solo il dubbio di lavorare con un sistema potenzialmente inaffidabile (sebbene per l’IoT) non è certamente il massimo.

Anche la capacità dei sistemi, a parità di costi, rappresenta un vantaggio.

A questo occorre aggiungere  che la velocità di accesso ai dati, sia in scrittura che in lettura, può risultare decine di volte maggiore per le periferiche collegate via USB rispetto a quelleclassische che adottano il supporto microSD. Infine, la disponibilità di periferiche di memorizzazione di massa a stato solido su canale SATA o PCIe/NVME, nettamente più efficienti del più efficiente disco rigido, hanno oramai un firmware che consente loro di condividere connessioni USB 3.0 senza necessariamente perdere molto in velocità di accesso ai dati.

Ovviamente il Jetson Nano dispone di connessioni USB 3.0.

Modifiche apportate dal JetPack 4.5

nvidia jetpack 4.5 nano

Jetson Nano utilizza differenti partizioni per poter utilizzare al massimo gli accessi alla Flash Memory attraverso il sistema qspi-nor.

NOR rappresenta un tipo di Flash Memory, mentre QSPI è acronimo di Quad Serial Protocol Interface, l’interfaccia che consente il colloquio tra il chip Tegra della famiglia Jetson e la Flash memory NOR. Al boot i dati vengono trasferiti dalla SD card alla memoria NOR, in modo da non essere costretti ogni volta  leggere  le informazioni dalla SD.

Quando la microSD card non viene trovata, il sistema controlla se attraverso la connessione USB sia possibile accedere al filesystem di root (rootfs), magari con un drive NVME.

Esiste uno special file nella directory di boot che esplicita la locazione del rootfs: dovremo modificare tale file, extlinux.conf e fargli puntare la nuova posizione della root.

Creare un USB boot disk

Sarà necessario eseguire una configurazione iniziale di Jetson con JetPack 4.5+ per caricare il firmware aggiornato nella memoria flash del modulo Jetson QSPI-NOR. Gli archivi del Jetpack sono acessibili a questo link.

Durante la configurazione iniziale di L4T 32.5+, il firmware per i kit per sviluppatori Jetson Nano riposiziona il firmware di avvio dalla scheda micro SD alla memoria flash QSPI-NOR integrata nel modulo Jetson. Questo cambia anche il layout della scheda SD. Questo layout è ora analogo al BIOS di un PC.

Possiamo dividere il procedimento i tre fasi distinte:

  • Formattazione del drive USB
  • Copia del rootfs nel drive
  • Modifica del file extlinux.conf, per farlo puntare alla partizione contenente il nostro rootfs

Nell’account GitHub JetsonHacksNano troviamo un repository chiamato bootFromUSB, basta clonare il repository e spostarsi nella directory bootFromUSB.

Jetson Nano SSD Shield
Geekworm Jetson Nano SATA SSD/HDD Shield

Preparazione del disco

Preparare l’unità USB (USB 3.0+, SSD, HDD o flash drive) formattando il disco come GPT con una partizione Ext4. La formattazione del disco cancellerà tutti i dati che si trovano su quel disco. Al termine, il disco dovrebbe essere visualizzato come /dev/sda1 o simile. Nota: assicurati che la partizione sia Ext4, poiché altri formati sembreranno copiati correttamente ma causeranno problemi in seguito. È possibile impostare l’etichetta del volume durante questo processo.

Puoi preparare l’unità USB utilizzando l’app Dischi. La formattazione del disco utilizzando Format e la creazione di una partizione sono due attività diverse. Formatta il disco come GPT, quindi aggiungi una partizione formattata come Ext4.

Una volta che il disco è pronto, monta il disco. Se stai utilizzando un desktop, puoi farlo facendo clic sull’icona del disco USB e aprendo un browser di file sul suo contenuto.

Copia di rootfs nel disco USB

Copiare l’area dell’applicazione della scheda micro SD sull’unità USB. copyRootToUSB.sh copia il contenuto dell’intera scheda micro SD del sistema sull’unità USB. Naturalmente, la memoria dell’unità USB dovrebbe essere più grande della scheda micro SD. Nota: assicurati che l’unità USB sia montata prima di eseguire lo script, altrimenti il processo non andrà a buon fine.

Per copiare RootToUSB:

Ad esempio:

Nota:

L’indirizzo del dispositivo più probabile dell’unità USB sarà /dev/sda1 Nota che se non trovi una unità che termina con un numero, probabilmente non hai una partizione allocata su quell’unità. Per esempio,

se la partizione esiste, apparirà il messaggio

sda1 è dove si desidera copiare rootfs dalla scheda SD. Se vedi solo /dev/sda, significa che non c’è partizione.

Modifica di extlinux.conf per la sequenza di boot

Utilizzare il  file-browser per accedere all’unità USB, trovare la directory boot/extlinux e quindi aprire un terminale dal menu di scelta rapida.

Prima di modificare il file extlinux.conf, crearne una copia a scopo di backup. Siamo in un’area protetta dal sistema, quindi occorrono i giusti privilegi per cambiare il file, utilizzando ‘sudo’.

Modifica il file /boot/extlinux/extlinux.conf che si trova sull’unità USB. DIgitare ‘sudo gedit’, fare una copia della voce “PRIMARY” e rinominala sdcard.

Nella voce PRIMARY cambia la posizione della radice in modo che punti all’unità USB, cioè cambia ‘root = /dev/mmcblk0p1’ che è l’indirizzo della scheda SD. Consultare il file sample-extlinux.conf come esempio.

Mentre l’uso di root=/dev/sda1 in extlinux.conf potrebbe funzionare, può essere una buona idea usare il PARTUUID del disco per identificare la posizione del disco. Poiché non è garantito che i dispositivi USB enumerino sempre nello stesso ordine, è possibile che /dev/sda1 punti a un dispositivo diverso. Ciò potrebbe accadere se un’unità flash aggiuntiva viene collegata a Jetson insieme all’unità di avvio USB, ad esempio.

L’UUID del disco nella tabella delle partizioni GPT è chiamato PARTUUID. Questo è un descrittore di basso livello. Si noti che esiste un altro identificatore, denominato UUID, fornito dal file system di Linux. Utilizzare il PARTUUID per questa applicazione, poiché è stato segnalato che l’UUID in questi casi non funziona sempre correttamente.

C’è un comodo file: partUUID.sh che determinerà il PARTUUID di un dato dispositivo. Ciò è utile per determinare il PARTUUID dell’unità USB. Nota: se il PARTUUID restituito non è simile in lunghezza all’esempio sample-extlinux.conf (32a76e0a-9aa7-4744-9954-dfe6f353c6a7), è probabile che il dispositivo non sia formattato correttamente.

Anche se il valore predefinito è sda1 (/dev/sda1), è possibile utilizzare altri PARTUUID di unità. Ovviamente /dev/ rimane definito. Utilizzare il flag -d. Per esempio:

Partenza!

A questo punto sarà sufficiente estrarre la card microSD e far partire il sistema.

jetson nano boot usb

Come si evince dall’immagine, abbiamo la partizione root su sda1.

Link utili:

 

 

Definire ciò che si è non risulta mai semplice o intuitivo, in specie quando nella vita si cerca costantemente di migliorarsi, di crescere tanto professionalmente quanto emotivamente. Lavoro per contribuire al mutamento dei settori cardine della computer science e per offrire sintesi ragionate e consulenza ad aziende e pubblicazioni ICT, ma anche perche’ ciò che riesco a portare a termine mi dà soddisfazione, piacere. Così come mi piace suonare (sax, tastiere, chitarra), cantare, scrivere (ho pubblicato 350 articoli scientfici e 3 libri sinora, ma non ho concluso ciò che ho da dire), leggere, Adoro la matematica, la logica, la filosofia, la scienza e la tecnologia, ed inseguo quel concetto di homo novus rinascimentale, cercando di completare quelle sezioni della mia vita che ancora appaiono poco ricche.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.