Debian e firmware

Versione del 19 giu 2017 alle 08:53 di S3v (discussione | contributi) (Spostati link esterni in "collegamenti esterni")
Lock.png ATTENZIONE: questa guida tratta software a sorgente chiuso e potenzialmente non conforme alle Debian Free Software Guidelines.
Considerare la possibilità di ricorrere a programmi aderenti ai principi del Free Software.


Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

Uno dei problemi più diffusi in cui si imbattono gli utenti che installano Debian è quello di far funzionare correttamente le periferiche hardware e, spesso, uno dei motivi principali per cui questo accade è la mancanza di firmware adatto alla propria periferica.
Debian, a partire da "Squeeze", ha eliminato tutto il firmware non libero dal kernel e lo ha inserito in pacchetti separati la cui installazione è demandata all'utente finale. Questo è dovuto al fatto che quasi tutto il firmware è accompagnato da licenze non aderenti alle DFSG ed è, pertanto, escluso dalla distribuzione ufficiale.

In questa guida verrà spiegato come capire se il proprio hardware ha bisogno di firmware per poter funzionare e quali pacchetti installare in base alla propria (o alle proprie) periferiche.

Prima di iniziare

La prima esigenza da soddisfare è sapere esattamente quale hardware è presente sulla propria macchina. Per far questo è possibile avvalersi di strumenti grafici o testuali che ricavano informazioni sull'hardware di sistema oppure eseguire i comandi:

  • uname -a
  • lspci
  • lsusb
  • lscpu

che in genere sono sufficienti per fornire le informazioni di cui si ha bisogno.

  Periferica non trovata
Se attraverso i precedenti comandi non si riesce a risalire al modello della propria periferica, è altamente probabile che il sistema non riesca a rilevare hardware particolarmente recente.
In questo caso prelevare una versione più recente del kernel, possibilmente dai backports se si sta utilizzando una stable.


Periferiche che hanno bisogno di firmware

Per individuare le periferiche che necessitano di firmware, si possono utilizzare i comandi:

# update-initramfs -u -k all

oppure:

$ dmesg | egrep -i "firmware|fw"

Ad esempio:

# update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-3.2.0-4-amd64
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168f-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168f-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8105e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-3.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-1.fw for module r8169

il comando rigenera il l'initramfs e ci informa del fatto che il modulo "r8169" (che gestisce la scheda di rete) ha bisogno di firmware.
Allo stesso modo il comando:

$ dmesg | egrep -i "firmware|fw"
[    6.588840] platform microcode: firmware: agent aborted loading intel-ucode/06-36-01 (not found?)
[    6.595326] platform microcode: firmware: agent aborted loading intel-ucode/06-36-01 (not found?)
[    6.603745] platform microcode: firmware: agent aborted loading intel-ucode/06-36-01 (not found?)
[    6.612709] platform microcode: firmware: agent aborted loading intel-ucode/06-36-01 (not found?)
[    7.106563] psmouse serio2: elantech: assuming hardware version 3 (with firmware version 0x450f00)
[   20.866395] r8169 0000:03:00.0: firmware: agent aborted loading rtl_nic/rtl8105e-1.fw (not found?)
[   20.871348] r8169 0000:03:00.0 eth0: unable to load firmware patch rtl_nic/rtl8105e-1.fw (-2)

ci darà più o meno le stesse informazioni oltre al fatto che è stata individuata dal sistema anche la mancanza del firmware per il microcodice della CPU.

Un ulteriore metodo consiste nel guardare il contenuto della directory /run/udev/firmware-missing/ in cui udev inserisce informazioni riguardanti il firmware mancante durante il riconoscimento delle periferiche:

$ ls /run/udev/firmware-missing/
intel-ucode\x2f06-36-01  rtl_nic\x2frtl8105e-1.fw

Quali pacchetti installare

Ci sono diverse strade.
1) Utilizzare un motore di ricerca specificando la periferica hardware individuata attraverso il comando "lspci" o "lsusb".
Ad esempio per cercare firmware per la propria scheda di rete:

$ lspci
..
02:00.0 Network controller: Atheros Communications Inc. AR9485 Wireless Network Adapter (rev 01)
...

e specificare la stringa di ricerca "Atheros Communications Inc. AR9485 Wireless Network Adapter (rev 01)" (inserire gli apici) magari accompagnata da altre parole chiave come "Debian", "package" o "Firmware".

2) Utilizzare apt-file per cercare i pacchetti adatti in base alle informazioni fornite dai precedenti comandi. Ad esempio la stringa:

r8169 0000:03:00.0: firmware: agent aborted loading rtl_nic/rtl8105e-1.fw (not found?)

informa del fatto che non viene trovato il file /lib/firmware/rtl_nic/rtl8105e-1.fw . A questo punto basta cercare il pacchetto a cui appartiene:

$ apt-file update && apt-file search rtl8105e-1.fw
...
firmware-realtek: /lib/firmware/rtl_nic/rtl8105e-1.fw

cioè "firmware-realtek". Allo stesso modo:

$ apt-file update && apt-file search intel-ucode
...
intel-microcode: /lib/firmware/intel-ucode/06-0f-02
...

Nel caso in cui i precedenti metodi non possano essere applicati, o perché la connessione alla Rete è assente o perché non si ha a disposizione un terminale con cui interfacciarsi con Debian, la ricerca del firmware mancante può essere comunque eseguita utilizzando questa pagina [4]].

Installare il firmware

Individuato il pacchetto contenente il firmware di cui si ha bisogno, basta installarlo dai repository con il classico:

# apt-get install nomepacchetto

Ad esempio:

# apt-get install firmware-realtek

Prestare attenzione alla sezione di cui il pacchetto fa parte. Se questo appartiene alla sezione non-free, bisognerà abilitarla nel file /etc/apt/sources.list e poi eseguire un "apt-get update" per rigenerare la lista dei pacchetti.

Se non si ha a disposizione una connessione funzionante alla Rete, l'unica soluzione è prelevare il pacchetto deb e trasferirlo alla macchina su cui deve essere installato. Il pacchetto da prelevare deve appartenere alla stessa versione di Debian che si sta utilizzando, cioè, se si sta utilizzando Stretch, bisogna prelevare il pacchetto nella sua versione contenuta in "Stretch" e deve essere relativo all'architettura della macchina su cui deve essere installato (amd64, i386, etc.).
Le pagine da cui prelevare i pacchetti .deb sono quelle classiche. Ad esempio, questa [3] è la pagina relativa al pacchetto "firmware-realtek" per "Stretch"; il download si avvia dopo aver scelto l'architettura della propria macchina (oppure "all" se il pacchetto è valido per tutte le architetture) e poi il mirror.

 

Una volta prelevato il pacchetto .deb, quest'ultimo va installato con dpkg:

# dpkg -i nomepacchetto.deb

Ad esempio:

# dpkg -i firmware-realtek_20161130-3_all.deb

Una strada alternativa è utilizzare Gdebi nel caso si abbiano problemi di dipendenze che non si vogliono risolvere manualmente.

Pacchetti firmware

Una lista parziale dei pacchetti contenenti firmware può essere visualizzata in questa pagina [5]].

  • firmware-linux-free
    firmware conforme alle DFSG; è contenuto nelle sezione main.
  • firmware-linux-nonfree
    firmware non conforme alle DFSG; è contenuto nella sezione non-free e contiene firmware per varie periferiche (ad esempio per le schede ATI Radeon) che non è incluso in un pacchetto specifico.
  • firmware-linux
    metapacchetto che installa i pacchetti firmware-linux-free e firmware-linux-nonfree. Appartiene alla sezione non-free.
  • firmware-atheros, firmware-intelwimax, firmware-b43-installer, firmware-ipw2x00, etc.
    Pacchetti anch'essi non free contenenti firmware diversi da quelli presenti in firmware-linux-nonfree; sono suddivisi per tipo di hardware di riferimento.
  • intel-microcode e amd64-microcode
    firmware rilasciato dai produttori per aggiornare o correggere il microcodice dei processori Intel o AMD. In genere questo firmware è a sorgente chiuso.

Firmware non presente nei repository

Può accadere che i produttori di hardware rilascino del firmware più aggiornato per le proprie periferiche. Questo firmware, se disponibile per distribuzioni GNU/Linux, va prelevato dalle rispettive homepage dei produttori e installato come normale pacchetto (se presente in formato .deb) oppure utilizzando l'installer fornito (tipicamente è uno script .run o .sh).
Prestare particolare attenzione alla versione del kernel per cui questo firmware è stato scritto, alla licenza che lo accompagna e al formato con cui viene distribuito. Le note di installazione sono sempre visibili in un file README, o con nome simile, presente all'interno del pacchetto stesso.

Spesso l'installazione di questo firmware non è strettamente indispensabile in quanto viene incluso nei successivi aggiornamenti dei pacchetti di firmware Debian.
Seguire questa strada soltanto nel caso in cui tutti gli altri metodi portino all'impossibilità di far funzionare il proprio hardware.

Firmware durante l'installazione

Durante l'installazione di Debian può accadere che l'installer produca un messaggio simile a questo:

 


lamentando l'impossibilità di far funzionare determinate periferiche senza che l'utente abbia il firmware adatto.
Questo 'problema' può essere risolto prelevando uno dei tre file (.zip, .tar.gz o cpio.gz) da questo indirizzo [1] per poi copiarlo su una pendrive, oppure ricorrendo all'installazione di Debian attraverso questa immagine contenente firmware non-free [2]
L'immagine non appartiene alla distribuzione ufficiale Debian in quanto ha al suo interno del firmware distribuito con licenza non conforme alle DFSG.

Nel caso l'individuazione del firmware copiato su pendrive fallisca, è sempre possibile, nel caso in cui l'installer lo permetta, ignorare il messaggio e proseguire fino al termine dell'installazione di Debian. A questo punto installare il firmware necessario con i metodi elencati in precedenza.
Se si sta procedendo all'installazione di Debian attraverso una netinst o una mini.iso e si ha la necessità di firmware per la propria scheda Ethernet cablata o wireless (che permettono il collegamento alla Rete necessario per scaricare i pacchetti di cui si ha bisogno), è sempre obbligatorio copiare uno dei tre file di cui sopra su una pendrive (o altro supporto rimovibile) altrimenti ci si potrebbe trovare nell'impossibilità di terminare correttamente l'installazione di Debian (se si sta usando una mini.iso) o nelle condizioni di terminare con successo l'installazione ma di far partire Debian senza un'interfaccia grafica (nel caso si stia utilizzando una netinst).

Collegamenti esterni

[1] Indirizzo dei tre file contenenti firmware
[2] Immagine con firmware
[3] Pacchett .deb per firmware Realtek
[4] Ricerca tra i pacchetti Debian
[5] Ricerca pacchetti firmware




Guida scritta da: S3v 16:31, 10 gen 2014 (CET)   Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized