Nvidia e Bootsplash (Debian Way)

Dom, 30/01/2005 - 23:16

Nvidia e Bootsplash (Debian Way)

Inviato da komplikazione 19 commenti


Introduzione

Non so forse dovrei presentarmi?
OK. Sono"komplikazione" utente linux da ottobre 2004, la mia prima distro fu una "fedora core 2", ma non mi soddisfò del tutto, provai una "mandrake 10.1 community" ma durò qualche ora, decisi così che documentarmi sarebbe stato meglio che provare tutte le distro disponibili

....!!baam!!....

wave

"DEBIAN"
mi sebrava facesse proprio al caso mio e quella cosa del "NET INSTALL"...... esilerante.
Presi il mio "TOSHIBA SATELLITE" e mi recai da un amico, lui aveva fastweb ed io il "fastrate usb" (forse ne avete sentito parlare), dopo un paio di ore circa avevo la mia SARGE, fu un colpo di fulmine. Esattamente 3 mesi dopo (oggi) sono qui ad esporre le mie esperienze.
Orami sono presentato, e probabilmente non vi importava nulla su chi sono o cosa faccio (o che sono passato da un modem usb a un modem eth ) però; vi farà piacere sapere che qui troverete probabilmente il modo di
-installare i driver nvidia senza dover ricompilare il kernel grazie al "module-assistant"

-avere un bootsplash con progress bar

-installare i driver nvidia 611 (e 6629) su un kernel 2.6.10.

Cercherò di essere il più chiaro possibile ma l'argomento è complesso e i "percorsi percorribili" spesso si intrecciano, quindi se qualcosa non dovesse funzionare purgate tutto e ripartite.


Il Kernel
Spendo ancora un paio di parole sui "kernel", scusate ma mi sembra doveroso. Le fonti da cui potete prelavare il vostro kernel sono fondamentalmente due: (x = versione del kernel)
1)apt

2)www.kernel.org

Apt vi può offrire

a)un kernel-image-x.deb

Cool un kernel-source-x.deb

mentre kernel.org vi offre un così detto"kernel-vanilla" (linux-x.tar.bz2).
-Un kernel-image deve semplicemente essere installato (no compilazione) ed ha tutte le patches contenute in "kernel-patch-debian-x",

-Un kernel-source deve essere compilato e installato ed ha anche lui le patches debian.

-I vanilla sono le releases di Torvald e si potrebbe dire che siano l'originale GNU/Linux, quindi puliti di ogni patches.

Inoltrandosi nella lettura della guida si scoprirà come sia possibile generare un kernel-source da un kernel vanilla grazie alle patches debian
Da ora in poi si farà uso di kernel vanilla, in questo modo sarà possibile installare i driver nvidia insieme con un bootsplash funzionante.

Il bootsplash è quella schermata di avvio che vi mostra un' immagine e una progress bar, nulla di indispensabile ma gradevole.

Il caso più semplice è sicuramente quello in cui non siate interessati a un bootsplash perchè non volete compilare il kernel ma volete poter usare l'acceleratore grafico della vostra scheda nvidia.

Questi saranno i nostri mirrors in /etc/apt/sources.list:

Se Testing (Sarge):

deb ftp://ftp2.it.debian.org/debian/ testing main
deb ftp://ftp.it.debian.org/debian/ testing contrib
deb ftp://ftp.it.debian.org/debian/ testing non-free
# bootsplash themes
# deb-src http://www.bootsplash.de/files/debian/ unstable main
deb http://www.bootsplash.de/files/debian/ unstable main
# deb-src http://mentors.debian.net/debian/ unstable main contrib non-free
Se Unstable (Sid):
deb ftp://ftp2.it.debian.org/debian/ unstable main
deb ftp://ftp2.it.debian.org/debian/ unstable contrib
deb ftp://ftp2.it.debian.org/debian/ unstable non-free
# bootsplash themes
# deb-src http://www.bootsplash.de/files/debian/ unstable main
deb http://www.bootsplash.de/files/debian/ unstable main
# deb-src http://mentors.debian.net/debian/ unstable main contrib non-free
(*aggiornare con #apt-get update)


Kernel-Image + Nvidia
Il"kernel-image" è già compilato e pronto per essere installato, ha molti moduli caricabili e non è specifico per nessuna configurazione hw in particolare escludendo il processore, quindi per un pentium IV l'ideale è un kernel-image-x-686.

Al kernel-image-x è sempre bene associare gli headers (kernel-headers-x), nel caso si volessero compilare moduli aggiuntivi (tipo nvidia, fuse ecc...).

Di seguito si farà so della versione 2.6.8 che ritengo più appropriato per il target a cui si rivolge questa sezione, la stessa procedura è applicabile ad un 2.6.10 che però (amio giudizio) è ancora molto instabile (personalmente ho riscontrato dei problemi nel caricare i moduli fuse).

Si inizi ora con:

#apt-get install kernel-image-2.6.8-2-686
questo vi installa il kernel automaticamente e aggiorna grub. Per il modulo nvidia dovrete dare:
#apt-get install module-assistant nvidia-kernel-common
#apt-get install nvidia-glx nvidia-kernel-source
se vi siete chiesti cosa siano i kernel-headers ora lo scoprirete:
#apt-get install kernel-headers-2.6.8-2-686
grazie agli headers il "module-assistant" potrà compilare i moduli necessari ed in questo caso "nvidia", è quindi importante che i numeri finali del'image e degli headers siano identici. Supponendo che il vostro /etc/X11/XF86Config-4 sia già configurato potete riavviare, ricordandovi il seguente comando:
#module-assistant auto-install nvidia
Infatti al riavvio il server X non sarà capasce di "mettere la prima" e vi darà un messaggio di errore, quando vi ripropone il prompt digitate il comando precedente e godetevi la nuova schermata.
i moduli dei kernels vengono installati in /lib/modules/x


Il Bootsplash
Per il bootspalsh è necessaria una patch e un kernel vanilla, quindi dovrete ricompilare. Se "tu che leggi" sei alle prime armi e non ti senti in confidenza con la ricompilazione del kernel ti consiglio di provare comunque, se sei amante dei kernel patchati debian continua a leggere e dimmi se quella che ti sto per esporre è una soluzione a te gradita. In questa sezione si esporrà una via per

-trasformare un kernel vanilla in un kernel-source debian e successivamente in kernel-image debian

-applicare la patch per il bootsplash -installare i driver nvidia con il module-assistant

In base alle tue esigenze potrai eseguire tutto quello che verrà esposto o scegliere le sezioni che più ti interesano.

Ci serviranno i seguenti pacchetti

1)linux-kernel-x (da www.kernel.org)

2)kernel-patch-debian-x (apt)

3)patch per il bootsplash (da www.boosplash.de)

4)driver nvidia (apt)

in più
se fai generalmente uso di un kernel-image e non sai come configurare un kernel-vanilla

5) kernel-image-x

Kernel Vanilla (Source) + Nvidia + (Bootsplash)
Questa prima parte è dedicata a chi usa i kernels precompilati (gli altri è meglio non leggano ).

Per prima cosa prendiamo un kernel:

#apt-get install kernel-image-2.6.10
poi:
#cd /usr/src
se non lo avete già:
/usr/src# apt-get install wget
ed
/usr/src#wget www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.10.tar.bz2
/usr/src# tar jxvf linux-2.6.10.tar.bz2
/usr/src# ln -s linux-2.6.10 linux
salta se non vuoi applicare le patches debian

ora applichiamo le patches debian in modo che il kernel vanilla si trasformi in uno speculare al kernl-image precedentemente installato, quindi

/usr/src/# apt-get install kernel-patch-debian-2.6.10
se controllate in :
usr/src# cd kernel-patches/all/2.6.10
troverete 3 dir :
/usr/src/kernel-patches/all/2.6.10# ls
apply debian unpatch
in "debian" sono presenti le patches, affinchè la patch per il bootsplash non vada in conflitto con quelle scaricate ora
/usr/src/kernel-patches/all/2.6.10# vim debian/series/2.6.10-1
e cancellare la riga: +modular-vesafb.dpatch ora applichiamole:
usr/src/kernel-patches/all/2.6.10#cd /usr/src/linux
/usr/src/linux# /usr/src/kernel-patches/all/2.6.10/apply/debian
per rimuoverle è sufficiente :
usr/src/linux# /usr/src/kernel-patches/all/2.6.10/unpatch/debian
Applicando le patches in questo modo non sarà sufficente il comando "make-kpkg clean", ma si dovrà richiamare il file /unpatch/debian. E' stato scelto questo metodo per avere la certezza che le patches ora applicate non vadano in conflitto con quelle che applicheremo successivamente. Per dovere di cronaca vi informo che la "debian-way" per applicare le patches è la seguente: se si vogliono applicare tutte

#make-kpkg --added_patches debian --initrd modules_image kernel_image

se si vogliono applicare solo alcune

#make-kpkg --added_patches "lista patches" --initrd modules_image kernel_image

e per ripulirle basterà

#make-kpkg clean

ora ti ritrovi con un kernel che è praticamente identico al "kernel-image" precedentemente installato.
E' possibile prelevare il file di configurazione del kernel-image installato nel seguente modo:
/usr/src/linux# cp /boot/config-2.6.10 .config
attenzione al nome ".config"!!! Il punto davanti al nome non è una macchia dello schermo.
(Questo procedimento mi farà collezionare un bel pò di critiche ..... ma per chi è alla prima compilazione mi sembra la soluzione migliore.)
salta se non sei interessato al bootsplash

Ora applichiamo la patch per il bootsplash :

se usate un'altra versione del kernel prendete quella giusta da www.bootsplash.de/files
/usr/src/linux# patch -p1 < bootsplash-3.1.4-2.6.10.diff
patching file drivers/char/keyboard.c
patching file drivers/char/vt.c
patching file drivers/video/bootsplash/bootsplash.c
patching file drivers/video/bootsplash/bootsplash.h
patching file drivers/video/bootsplash/decode-jpg.c
patching file drivers/video/bootsplash/decode-jpg.h
patching file drivers/video/bootsplash/Kconfig
patching file drivers/video/bootsplash/Makefile
patching file drivers/video/bootsplash/render.c
patching file drivers/video/console/bitblit.c
patching file drivers/video/console/fbcon.c
patching file drivers/video/console/fbcon.h
patching file drivers/video/Kconfig
patching file drivers/video/Makefile
patching file drivers/video/vesafb.c (attenzione ad eventuali errori)
patching file include/linux/console_struct.h
patching file include/linux/fb.h
patching file kernel/panic.c
non resta altro che rendere effettiva la patch relativa al bootsplash:
/usr/src/linux# make menuconfig (o xconfig o ...)

e spuntare le voci seguenti:

voce --> File Systems:
<*> Reiserfs o Ext3 (insomma il vostro fs).

voce --> File Systems --> Miscellaneous filesystems --->
<*> Compressed ROM file system support (cramfs)

voce --> Device Drivers --> Block Devices
<*> RAM disk support
(16) Default number of RAM disks
(8192) Default RAM disk size (kbytes)
[*] Initial RAM disk (initrd)

voce --> Device Drivers--> Graphics Support
[*] Support for frame buffer devices
<*> VGA 16-color graphics support
[*] VESA VGA graphics support

voce --> Graphics Support--> Console Display Driver Support
<*> Framebuffer Console support
[*] Select compiled-in fonts
[*] VGA 8x8 font
[*] VGA 8x16 font

voce --> Graphics Support --> BootsplashConfiguration
<*> Bootsplash Screen

usciamo e rispondiamo che vogliamo salvare la configurazione attuale.

ok.... per compilare:
/usr/src/linux# make-kpkg --initrd --append-to-version -6111 kernel_image
(6111 è una stringa aggiunta per identificare il nostro kernel , in questo caso è la versione dei pacchetti nvidia ma potete anche chiamarlo "giannino")
Chi ha già ricompilato un kernel in passato avrà notato l'aggiunta di "--initrd" e la mancanza della stringa "modules_image".
Per capire in dettaglio cosa fa -initrd,
/usr/src/linux# man make-kpkg
per capire a cosa serve in questo contesto.... sappi che è il comando per creare l'initrd a cui verrà appeso il bootsplash. Se non stai abilitando il bootsplash puoi omettere "--initrd"
Il "modules_image" è stato omesso perchè si farà uso del module_assistant, la "debian way" per installare i moduli nvidia (o qualsiasi altro modulo contenuto in /usr/src/modules, sostituendo a "nvidia" il nome appropriato). Il risultato finale sarà comunque lo stesso.
Quando il pennuto ha terminato di compilare vi troverete il pacchetto deb del vostro nuovo kernel:
/usr/src/linux# cd ..
/usr/src# ls *.deb
kernel-image-2.6.10-6111_10.00.Custom_i386.deb
installiamolo
/usr/src# dpkg -i kernel-image-2.6.10-6111_10.00.Custom_i386.deb
Possiamo ora rilassarci e affidarci totalmente al carissimo apt.
salta se non sei interessato al bootsplash

Iniziamo con :

/usr/src# apt-get install bootsplash bootsplash-theme-swirlpool
e linko il bootsplash all'initrd del kernel patchato (per cambiare il tema del bootsplash in futuro basta dpkg-reconfigure bootsplash, io ho scelto swirlpool)

se poi voglio la progress bar:

/usr/src#apt-get install sysv-rc-bootsplash
è necessario anche aggiornare il file /boot/grub/menu.lst (per lilo seguite le info da dpkg-reconfigure bootsplash )
title Debian GNU/Linux, kernel 2.6.10-6111
root (hd0,2)
kernel /boot/vmlinuz-2.6.10-6111 root=/dev/hda3 vga=791 splash=silent
initrd /boot/initrd.img-2.6.10-611
savedefault
boot
ed ora la parte relativa alla scheda video:
/usr/src/linux# cd ..
/usr/src#apt-get install module-assistant nvidia-kernel-common nvidia-glx nvidia-kernel-source
a questo punto riavvio.... vi accorgerete che il server x non funziona , questo perchè non avete ancora il modulo "nvidia", quindi loggatevi come root e:
#module-assistant auto-install nvidia
provate anche a dare:
#modprobe nvidia
#glxinfo | grep "direct rendering"
ora riavviando gdm o kdm o xdm...(e se era già avviato pkill gdm (o kdm o xdm))
#gdm
dovreste vedere il logo.


Tests

Se volete vedere la scheda in azione provate a dare:

#apt-get install 3ddesktop nvidia-settings nvclock
e
#3ddesk --view default
#/usr/bin/nvidia-settings
#nvclock -i
#glxgears

per avere informazioni relative all'AGP:

1)la scheda:

#cat /proc/driver/nvidia/agp/card
Fast Writes: Supported
SBA: Not Supported
AGP Rates: 4x 2x 1x
Registers: 0x1f000017:0x1f000114

2)l'host

#cat /proc/driver/nvidia/agp/host-bridge
Host Bridge: Intel Corp. 82845 845 (Brookdale) Chipset Host Bridge
Fast Writes: Supported
SBA: Supported
AGP Rates: 4x 2x 1x
Registers: 0x1f000217:0x00000114

3)lo stato

#cat /proc/driver/nvidia/agp/status
Status: Enabled
Driver: ìNVIDIA
AGP Rate: 4x
Fast Writes: Enabled
SBA: Disabled

per quanto riguarda il tipo di scheda:

# cat /proc/driver/nvidia/cards/0
Model:GeForce4 420 Go
IRQ:10
Video BIOS:04.17.00.41.c7
Card Type: AGP

Di default il Fast Writes e l'SBA sono disabilitati. Se volete potete editare il file in

# vim /usr/src/modules/nvidia-kernel/nv/os-registry.c

è molto ben commentato e basterà assegare il valore 1 ai parametri che vi interessano. Fatte le correzioni dovrete rilanciare il module-assistant.


Quando usare il module-assistant
Il metodo dell'auto-install per i driver nvidia funziona perfettamente con i kernel vanilla 2.4.x e 2.6.0 fino alla 2.6.8.1 applicando la procedura esposta fino ad ora, se invece usate un kernel precompilato potrete usare semplicemente le istruzioni della "parte relativa a nvidia" tenete però presente che sono indispensabili gli headers. ES) se avete installato il seguente kernel
#apt-get install kernel-image-2.6.8-1-686
dovrete dare anche:
#apt-get install kernel-headers-2.6.8-1-686


Quando non usare il module_assistant
Si potrebbe dire semplicemente "non usare il module-assistant se non funziona", complicandosi la vita (come piace tanto a noi fans del pennuto) ci si può chiedere "perchè il module-assistant non funziona?"

A) stai usando un kernel precompilato e non hai scaricato gli "headers"

Cool se non A) hai compilato tu il tuo kernel e l'auto-install stà cercando di compilare i drivers nvidia con un compilatore che ha una versione differente rispetto a quella usata per compilare il kernel ... quindi hai fatto un upgrade

C) ricevi l'errore che è spiegato nella prossima sezione


Troubleshooting
Se con "modprobe nvidia" visualizzate il seguente errore:
nvidia: module license 'NVIDIA' taints kernel.
kernel: nvidia: Unknown symbol __VMALLOC_RESERVE
kernel: nvidia: Unknown symbol pci_find_class

o semplicemente

nvidia: module license 'NVIDIA' taints kernel.
kernel: nvidia: Unknown symbol __VMALLOC_RESERVE

dovrete applicare delle patches.

per risolvere l'errore del "pci_find_class"

/usr/src#cd /usr/src/modules/nvidia-kernel
/usr/src/modules/nvidia-kernel# wget www.komplikazione.it/klinux/pci_find_class.diff
applichiamola senza preoccuparci troppo dell'errore non è fatale, funzionerà fidatevi.
/usr/src/modules/nvidia-kernel# patch -p1 < pci_find_class.diff
patching file nv/nv.c
patch unexpectedly ends in middle of line Hunk #3 succeeded at 3483
with fuzz 1 (offset 12 lines).

(questo errore sarà presente se usate driver 6111 e probabilmente non comparirà nel caso sia una versione inferiore)

la patch che andremo ad applicare ora risolve il problema della funzione VMALLOC_RESERVE.
/usr/src/modules/nvidia-kernel# cd /usr/src/linux
/usr/src/linux# wget www.komplikazione.it/klinux/vmalloc_reserve.patch
/usr/src/linux# patch -p1 < vmalloc_reserve.patch
patching file arch/i386/mm/init.c


Concludendo

Spero vi sia stato di aiuto, ma soprattutto spero di non aver dimenticato nulla..... comunque per qualsiasi chiarimento, segnalazione o critica i"commenti" dovrebbero essere attivi e vi ricordo che esiste anche il forum.

5ottobre 1991 Linus Torvalds comp.os.minix.

"Do you pine for the nice days of Minix-1.1, when men were men and wrote their own device drivers? Are you without a nice project and just dying to cut your teeth on a OS you can try to modify for your needs? Are you finding it frustrating when everything works on Minix? No more all-nighters to get a nifty program working? Then this post might be just for you."


Perchè l'ho citato? ... bho ci stava .... no? HASTA LUEGO TIOS.........

www.komplikazione.it





Commenti

Ritratto di Stefano
#1

Inviato da Stefano il Sab, 05/02/2005 - 19:08.

Wow....

10 e lode per questo gran bel pezzo di guida!

Complimentoni!

Stefano Mainardi - Founder of ILDN & CEO of Twinbit



Ritratto di paolo
#2

Inviato da paolo il Sab, 05/02/2005 - 20:32.

Re: Wow....

I miei complimenti, una guida davvero ottima e scritta benissimo, grazie del tuo contributo.

Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network



Ritratto di SuperPisu
#3

Inviato da SuperPisu il Dom, 06/02/2005 - 11:54.

Re: Wow....

bellissima Wink

adesso quando ho un po di tempo provo subito a mettere il bootsplash

8-) Superpisu 8-)

(10:47:50) chars: mi sposo
(10:48:07) chars: ho trovato l'amore
 
(17:47:09) chars: ai tempi d'oro
(17:47:19) chars: quando ero uno street boy



Ritratto di kio341
#4

Inviato da kio341 il Dom, 06/02/2005 - 20:54.

grande guida

ottima !
ho visto che la nostra "querelle" è stata utile ai fini della redazione finale!
bravo!
8-)



Ritratto di OldSparky
#5

Inviato da OldSparky il Dom, 06/02/2005 - 23:02.

Re: grande guida

Ci vorrebbe qualche bella foto del bootsplash per completarla per bene Smile Ottima guida!



Ritratto di ntropia
#6

Inviato da ntropia il Lun, 07/02/2005 - 23:42.

I miei complimenti

I complimenti per la precisione e per l'accuratezza nei dettagli vanno moltiplicati per un fattore di 15-20 data la breve esperienza dell'autore come ammaestratore di pinguini. Laughing
Una guida da consigliare, davvero!

eNtropia

Chi ha intendimento conti il numero della Bestia, perché è un numero d'uomo; e il suo numero è... rw-rw-rw-



Ritratto di kripsio
#7

Inviato da kripsio il Lun, 07/02/2005 - 23:51.

Re: I miei complimenti

Spettaculs spettacular! Smile
Appena ho un paio d'ore studio la tua guida e l'approfondisco... grazie grazie Smile



Ritratto di komplikazione
#8

Inviato da komplikazione il Mer, 09/02/2005 - 13:07.

Re: I miei complimenti

bhè cheddire .... grazie.

Wink



Ritratto di discepolo
#9

Inviato da discepolo il Gio, 10/02/2005 - 15:06.

Re: I miei complimenti

eccezionale veramente!!

Ubuntu for ever !! 8-)8-)8-)



Ritratto di komplikazione
#10

Inviato da komplikazione il Sab, 12/02/2005 - 15:36.

Re: I miei complimenti

ho pensato di aggiungere il link al forum:

FAQ

se poi avete provato la guida gradirei se mi faceste sapere come è andata e se qualche passaggio vi è sembrato poco chiaro.