User Tools

Site Tools


doc:appunti:hardware:raspberrypi_kernel_upgrade_downgrade

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
doc:appunti:hardware:raspberrypi_kernel_upgrade_downgrade [2021/04/01 16:43] niccolodoc:appunti:hardware:raspberrypi_kernel_upgrade_downgrade [2022/04/26 07:57] – [Upgrade e downgrade del kernel del Raspberry Pi] niccolo
Line 1: Line 1:
-====== Upgrade e downgrade del kernel nel Raspberry Pi ======+====== Upgrade e downgrade del kernel del Raspberry Pi ======
  
 La distribuzione ufficiale per il Raspberry Pi è **[[https://www.raspberrypi.org/software/|Raspberry Pi OS]]**, una distribuzione GNU/Linux direttamente derivata da **[[https://www.debian.org/|Debian]]**. A differenza di Debian però non esistono i pacchetti **%%linux-image-*%%** con i quali è possibile effettuare l'upgrade o il downgrade del kernel. La distribuzione ufficiale per il Raspberry Pi è **[[https://www.raspberrypi.org/software/|Raspberry Pi OS]]**, una distribuzione GNU/Linux direttamente derivata da **[[https://www.debian.org/|Debian]]**. A differenza di Debian però non esistono i pacchetti **%%linux-image-*%%** con i quali è possibile effettuare l'upgrade o il downgrade del kernel.
 +
 +===== rpi-update =====
  
 Per il Raspberry esiste il pacchetto **raspberrypi-kernel**, ma quel pacchetto deve andare di pari passo con i pacchetti **raspberrypi-bootloader**, **libraspberrypi-{bin|dev|doc}** e **libraspberrypi0**, che contengono le librerie per la gestione della GPU e varie utility. Per il Raspberry esiste il pacchetto **raspberrypi-kernel**, ma quel pacchetto deve andare di pari passo con i pacchetti **raspberrypi-bootloader**, **libraspberrypi-{bin|dev|doc}** e **libraspberrypi0**, che contengono le librerie per la gestione della GPU e varie utility.
  
-Per gestire in maniera più comoda e precisa le versioni del kernel, del firmware e delle librerie correlate, è stato sviluppato il progamma **[[https://www.raspberrypi.org/documentation/raspbian/applications/rpi-update.md|rpi-update]]**.+Per gestire in maniera più comoda e precisa le versioni del kernel, del firmware e delle librerie correlate, è stato sviluppato il progamma **[[https://www.raspberrypi.org/documentation/raspbian/applications/rpi-update.md|rpi-update]]** (si installa con l'omonimo pacchetto).
  
-Eseguito senza argomenti, effettua l'aggiornamento all'**ultima versione pre-release**. Per effettuare un downgrade è necessario individuare il commit che interessa nella pagina **[[https://github.com/Hexxeh/rpi-firmware|GitHub rpi-firmware]]**. Ad esempio si possono individuare i seguenti //kernel bump//:+Eseguito senza argomenti, effettua l'aggiornamento all'**ultima versione pre-release**. Per effettuare un downgrade è necessario individuare il commit che interessa nella pagina **[[https://github.com/raspberrypi/rpi-firmware|GitHub rpi-firmware]]** (fork del precedente repo di **[[https://github.com/Hexxeh/rpi-firmware|Hexxeh]]**). Cliccando sul link **commits** si possono individuare i seguenti //kernel bump//:
  
 <file> <file>
Line 23: Line 25:
 </file> </file>
  
-Quindi, se si vuole tornare in un colpo solo al kernel **4.19** installando anche le librerie e firmare relative, si esegue:+Quindi, se si vuole tornare in un colpo solo al kernel **4.19** installando anche librerie, firmware tool relativi, si esegue:
  
 <code> <code>
Line 29: Line 31:
 </code> </code>
  
-Per resintallare il kernel e il firmware ufficiali della distribuzione:+===== Cosa viene installato e dove ===== 
 + 
 +Il comando **rpi-update** scarica e installa file **fuori dal controllo del gestore pacchetti deb**, pertanto ci troveremo intere gerarchie di file installati, ma non collegati ad alcun pacchetto. Ad esempio tutti i file nella cartella **/lib/modules/5.10.17+/** sono stati installati dal pacchetto **raspberrypi-kernel**, ma gli analoghi file nella cartella **/lib/modules/4.19.118+/** non risultano installati da alcun pacchetto (verificare con **%%dpkg -S%%**). 
 + 
 +Addirittura **rpi-update** sovrascrive i file installati da un pacchetto, senza particolari precauzioni. Nel mio caso ad esempio il file **/boot/kernel.img** (una delle immagini kernel) risulta ancora appartenere al pacchetto **raspberrypi-kernel**, ma in realtà è stata sovrascritta dalla procedura di downgrade. 
 + 
 +In generale i file installati da ''rpi-update'' si trovano in: 
 + 
 +  * **%%/boot/bcm*%%** 
 +  * **%%/boot/bootcode.bin%%** 
 +  * **%%/boot/kernel*.img%%** 
 +  * **%%/boot/fixup*%%** 
 +  * **%%/boot/start*%%** 
 +  * **%%/boot/overlays/*%%** 
 +  * **%%/lib/modules/<version>/%%** 
 +  * **%%/opt/vc/bin/%%** 
 +  * **%%/opt/vc/include/%%** 
 +  * **%%/opt/vc/lib/%%** 
 +  * **%%/usr/bin/%%** 
 + 
 +Se si vuole evitare di perdere queste modifiche nei successivi aggiornamenti, è opportuno **mettere on-hold** il pacchetto **raspberrypi-kernel** e quelli strettamente correlati (vedi avanti). 
 + 
 +===== Download pacchetti Debian invece di rpi-update ===== 
 + 
 +A mio avviso è preferibile **installare i pacchetti Debian che contengono la versione del kernel desiderato**, invece di usare ''rpi-udate'' che rompere l'integrità del gestore pacchetti deb. Come fare? 
 + 
 +Per individuare quali sono le //source// dei pacchetti installati sul Raspberry si ispezionano i file **/etc/apt/sources.list** e **/etc/apt/sources.list.d/raspi.list**, scoprendo che vengono usati due repository: 
 + 
 +<file> 
 +deb http://raspbian.raspberrypi.org/raspbian/  buster   main contrib non-free rpi 
 +deb http://archive.raspberrypi.org/debian/     buster   main 
 +</file> 
 + 
 +Ispezionando il contenuto dalle liste in **/var/lib/apt/lists/** è possibile scoprire che il pacchetto **raspberrypi-kernel** proviene dal repository **%%archive.raspberrypi.org%%**. Sempre in quella lista si vede che l'URL base in cui si trova il pacchetto è **[[http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/]]**. Con un semplice script shell è possibile scaricare tutti i pacchetti necessari relativi ad una determinata versione: 
 + 
 +<code bash> 
 +#!/bin/sh -e 
 +BASEURL='http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware' 
 +PACKAGES='libraspberrypi0 libraspberrypi-bin libraspberrypi-dev libraspberrypi-doc raspberrypi-bootloader raspberrypi-kernel' 
 +VER='1.20200512-2' 
 +ARCH='armhf' 
 +for P in $PACKAGES; do 
 +    wget -c "${BASEURL}/${P}_${VER}_${ARCH}.deb" 
 +done 
 +</code> 
 + 
 +L'architettura dei pacchetti installati si vede con **%%dpkg --list%%**, e si scopre che è **armhf**. Non mi è chiaro perché invece il comando ''arch'' e il comando ''uname -m'' restituiscono il valore **armv7l**. 
 + 
 +Per avitare l'aggiornamento dei pacchetti è necessario metterli **on-hold**, ad esempio con il comando **apt-mark**: 
 + 
 +<code> 
 +apt-mark hold raspberrypi-kernel 
 +apt-mark hold raspberrypi-bootloader 
 +apt-mark hold ... 
 +</code> 
 + 
 +Per verificare che i pacchetti siano marcati opportunamente si può utilizzare **%%dpkg --get-selections%%**. 
 + 
 +===== Come ripristinare la versione ufficiale ===== 
 + 
 +Per resintallare kernel, firmware, librerie e tool forniti ufficialmente dalla distribuzione si possono reinstallare i seguenti pacchetti:
  
 <code> <code>
Line 40: Line 102:
     raspberrypi-kernel     raspberrypi-kernel
 </code> </code>
 +
 +Altri file rimasti da precedenti esecuzioi di **rpi-update** possono essere eventualmente cercati con ''find'' grazie al timestamp.
  
doc/appunti/hardware/raspberrypi_kernel_upgrade_downgrade.txt · Last modified: 2022/04/26 12:36 by niccolo