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

Next revision
Previous revision
doc:appunti:hardware:raspberrypi_kernel_upgrade_downgrade [2021/04/01 16:19] – created niccolodoc:appunti:hardware:raspberrypi_kernel_upgrade_downgrade [2022/04/26 12:36] (current) – [Download pacchetti Debian invece di rpi-update] 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.
  
-Per il Raspberry esiste il pacchetto **raspberrypi-kernel**, ma per gestire in maniera più precisa le versioni del kernel e del firmware che gestisce soprattutto la GPU, è stato sviluppato il progamma **[[https://www.raspberrypi.org/documentation/raspbian/applications/rpi-update.md|rpi-update]]**.+===== rpi-update =====
  
-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//:+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]]** (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/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 21: Line 25:
 </file> </file>
  
-Se si vuole tornare al kernel 4.19 quindi si esegue:+Quindi, se si vuole tornare in un colpo solo al kernel **4.19** installando anche librerie, firmware e tool relativi, si esegue:
  
 <code> <code>
Line 27: 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 rompe l'integrità della gestione dei 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 38: 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.1617286774.txt.gz · Last modified: 2021/04/01 16:19 by niccolo