Firmware mancante in Debian? Ecco come affrontare il problema

Mer, 23/03/2011 - 17:03

Firmware mancante in Debian? Ecco come affrontare il problema

Inviato da Sarkiapone 0 commenti

Come forse già saprete dall'ultima versione di Debian, Squeeze, il firmware non-free non fa più parte dell'installazione standard di un sistema Debian. Questa decisione causerà sicuramente qualche problema a quegli utenti che hanno bisogno di firmware non-free, dal blog di Raphael Hertzog vi riporto quali sono i passaggi da eseguire per ovviare a questi problemi:

Cos'è il firmware e come viene utilizzato?

Dal punto di vista dell'utente, un firmware è una manciata di dati necessari a qualche componente hardware per poter funzionare correttamente. Solitamente è il driver per l'hardware che carica il firmware del dispositivo come parte della sua inizializzazione.

Nel kernel di Linux, i driver utilizzano un'interfaccia standard (request_firmware) per recuperare il firmware prima di inviarlo al dispositivo. Grazie a questa standardizzazione, è possibile inserire il firmware nel kernel o far richiedere il firmware da user-space quando necessario.

Debian (come la maggior parte delle distribuzioni) ha scelto la seconda opzione. Così, quando il kernel ha bisogno di un firmware, invia una richiesta a user-space. udev riceve la richiesta con il nome del firmware, e nella sua configurazione di default (vedi /lib/udevrules.d/80-drivers.rules) si esegue /lib/udev/firmware.agent in risposta.

Dove sono memorizzati i firmware?

firmware.agent è un semplice script di shell che cerca di individuare un firmware prima di inviarlo nuovamente al kernel attraverso una voce sysfs. Esamina le seguenti directory:

/lib/firmware/$(uname -r) 
/lib/firmware 
/usr/local/lib/firmware 
/usr/lib/hotplug/firmware 

I firmware forniti dai pacchetti solitamente sono in /lib/firmware e si può usare /usr/local/lib/firmware per il firmware installato manualmente.

Come faccio a sapere se ho bisogno di un firmware?

In primo luogo, si può controllare dai messaggi del kernel che riportano di aver tentato di caricare un firmware, ma non ci è riuscito. Ed è simile a questo:

e100: eth0: e100_request_firmware: Failed to load firmware "e100/d101m_ucode.bin": -2

Ma è anche possibile essere informati prima. Quando si installa una nuova versione del kernel di Linux con i pacchetti ufficiali di Debian, lo script di post-installazione passerà attraverso tutti i moduli caricati (quelli elencati da lsmod) e verificherà se uno dei moduli, come previsto dal kernel appena installato potrebbe richiedere un firmware. Queste informazioni possono essere recuperate con modinfo:

$ modinfo -F firmware /lib/modules/2.6.32-5-amd64/kernel/drivers/net/e100.ko
e100/d102e_ucode.bin
e100/d101s_ucode.bin
e100/d101m_ucode.bin

Se uno o più di questi firmware non sono ancora disponibili sul sistema, verrà visualizzato un messaggio di avviso simile a questa:

update-initramfs genererà anche un avvertimento simile a questo sul terminale:

update-initramfs: Generating /boot/initrd.img-2.6.32-5-amd64
W: Possible missing firmware /lib/firmware/e100/d102e_ucode.bin for module e100
W: Possible missing firmware /lib/firmware/e100/d101s_ucode.bin for module e100
W: Possible missing firmware /lib/firmware/e100/d101m_ucode.bin for module e100

L'installatore Debian rileva anche quando si dispone di hardware che potrebbe richiedere un firmware mancante. E' possibile fornire i file mancanti su una penna USB (o direttamente tramite il pacchetto corrispondente).

Come faccio a trovare e installare il firmware mancante?

Ora che avete il nome del file del firmware che vi occorre, è relativamente facile identificare il pacchetto che fornisce il file richiesto. È possibile utilizzare "apt-cache search [nomefile]", perché i pacchetti firmware incorporano l'elenco dei file del firmware nella loro descrizione. È inoltre anche possibile utilizzare "apt-file " o l'interfaccia web su packages.debian.org.

$ apt-cache search d101m_ucode.bin
firmware-linux-nonfree - Binary firmware for various drivers in the Linux kerne

$ apt-file search d101m_ucode.bin
firmware-linux-nonfree: /lib/firmware/e100/d101m_ucode.bin

Se i comandi riportati sopra non trovano nulla, probabilmente avete bisogno di attivare il repository "non-free " /etc/apt/sources.list (si può abilitaer anche tramite synaptic). Fatto questo potete dare "sudo update apt-file" per aggiornare e ripetere i passaggi descritti sopra.

Come faccio ad installare tutti i firmware ed essere sicuro di non lasciarne nessuno?

Non c'è nessun meta-pacchetto per tutti i pacchetti firmware e quindi non c'è una risposta semplice a questa domanda. Inoltre, non tutti i pacchetti firmware rispettare la convenzione di denominazione "firmware-*" (come ad esempio zd1211-firmware).
Quindi la cosa migliore è cercare tra tutti i pacchetti con una ricerca generica come questa:

$ apt-file --package-only search /lib/firmware/
atmel-firmware
[...]

E poi installarli tutti.

Ci sono delle immagini DVD o CD con il firmware non-free?

Sì. Debian fornisce una immagine netinst non ufficiale per i386/amd64/powerpc con il firmware non-free, si può trovare qui:

http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/.

Fonte: Raphael Hertzog - Missing firmware in Debian? Learn how to deal with the problem