Kernel e firmware-linux-nonfree

6 risposte [Ultimo contenuto]
Ritratto di Zievatron
Zievatron
(Monster)
Offline
Monster
Iscritto: 16/03/2014
Messaggi: 338

Facendo prove per ottimizzare il kernel mi sono scontrato con uno strano problema.
Il pacchetto firmware-linux-nonfree io l'ho installato fin dall'inizio e se provo a chiedere di installarlo di nuovo, giustamente, ottengo in risposta che è già installato all'ultima versione.
Però se configurando il kernel alla voce:

   Device Drivers  --->
	    Graphics support  --->
		<*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  --->
			<M>   ATI Radeon 

Provo a passare da M a Y, in modo da non avere neiente come moduli esterni, mi viene poi fuori un messaggio di errore con richiesta del firmware-linux-nonfree.
Cosa posso fare?

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Puoi descrivere meglio cosa vuoi dire con "mi viene poi fuori"?

Cmq puoi sempre lasciarlo come modulo, non è fondamentale per l'avvio.

Ritratto di Zievatron
Zievatron
(Monster)
Offline
Monster
Iscritto: 16/03/2014
Messaggi: 338

Intendo che all'avvio mi compare un messaggio che dice che occorre quel pacchetto. Ma quel pacchetto c'è.
Non voglio lasciare niente come modulo.

Ritratto di Zievatron
Zievatron
(Monster)
Offline
Monster
Iscritto: 16/03/2014
Messaggi: 338

Per l'esattezza, il messaggio di errore dice:
"radeon kernel modesetting for R600 or later requires firmware-linux-nonfree".
Non c'è modo di risolverlo senza doverlo lasciare la voce come modulo esterno?

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Lo script update-initramfs, non essendoci il modulo radeon, non ritiene utile copiare il suo firmware nell'initrd. Quando il kernel parte dall'initrd, non lo trova ed emette l'errore.

Puoi aggiungerlo a mano, seguendo queste istruzioni: lì si parla di scheda di rete, ma il principio è lo stesso. Ovviamente non dovrai scaricarti il firmware perché ce l'hai già in /lib/firmware/radeon.

Attenzione che la modifica ha effetto solo fino alla prossima esecuzione di update-initramfs, che nel tuo caso significa fino all'installazione del prossimo kernel, quindi ti conviene crearti uno script.

Il mio consiglio, però è un altro: lascia il driver come modulo, per ora. Concentrati sui componenti che servono all'avvio e arriva fino al punto in cui puoi eliminare l'initrd. Fatto quello, il kernel partirà direttamente dal disco di root, non più da initrd, e troverà il firmware là dove dev'essere.

Ritratto di Zievatron
Zievatron
(Monster)
Offline
Monster
Iscritto: 16/03/2014
Messaggi: 338

mcortese ha scritto:

...Il mio consiglio, però è un altro: lascia il driver come modulo, per ora. Concentrati sui componenti che servono all'avvio e arriva fino al punto in cui puoi eliminare l'initrd. Fatto quello, il kernel partirà direttamente dal disco di root, non più da initrd, e troverà il firmware là dove dev'essere.


Ottimo.
Solo:
Quando elimino l'initrd, il driver dev'essere selezionato o deselezionato?
Lo stesso discorso vale per qualsiasi modulo che non posso passare da M a Y, o che posso passarlo, ma se lo faccio mi viene qualche messaggio di errore?

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Quando avrai eliminato l'initrd, i driver che necessitano di firmware potranno essere indifferentemente compilati sia nel kernel (Y) sia come moduli (M) e il loro effetto non cambierà.

Quello che devi chiederti è: a che file ha accesso il kernel al momento dell'inizializzazione del tale driver? Ci sono tre casi:

Se c'è un initrd e il driver è compilato dentro il kernel (Y), al momento dell'inizializzazione il kernel ha accesso solo all'initrd. Visto che nell'initrd non c'è il firmware, il caricamento fallisce.

Se c'è un intrd ma il driver è compilato come modulo (M), al momento dell'inizializzazione il kernel ha accesso solo all'initrd, in cui l'efficiente script update-initramfs avrà copiato il firmware e tutto funziona bene.

Infine se non c'è un initrd, sia che il diver sia Y sia che sia M, al momento dell'inizializzazione il kernel ha accesso al disco di root, in cui c'è il firmware e tutto funziona bene.