Linux Kernel in a Nutshell: differenze tra le versioni

Nessun cambiamento nella dimensione ,  14 giu 2007
nessun oggetto della modifica
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
== Introduzione ==
''Torna all'indice: [[Linux Kernel in a Nutshell]]''


Questo how-to spiegher� come installare i driver proprietari forniti da ATI per generare il modulo <tt>fglrx</tt> necessario al funzionamento del motore 3d delle schede grafiche.
Quando si compila un kernel personalizzato ci si vorrebbe servire dell'ultima versione stabile. Molte distribuzioni forniscono i loro pacchetti dei sorgenti del kernel, ma raramente questi sono i pi� recenti e aggiornati. I pacchetti ufficiali delle distribuzioni hanno il vantaggio di essere compatibili con il compilatore e gli altri strumenti forniti dalla distribuzione stessa (Il capitolo 2 mette in evidenza l'importanza di questa compatibilit�), ma non � detto che permettano di avere le funzionalit� o le prestazioni di cui si ha bisogno. Preparando l'ambiente con il kernel pi� recente e le ultime versioni del compilatore e degli altri programmi sar� possibile ottenere esattamente ci� che si vuole. Questo capitolo spiega quali sorgenti del kernel scaricare e dove trovarli.


Come � noto i driver ATI soffrono di una difficile installazione e configurazione. Sfortunatamente (o forse no) esistono molteplici configurazioni hardware che ostacolano l'installazione dei driver. Spesso, anche seguendo un guida perfetta, non si riesce ad attivare l'accelerazione 3D al primo colpo (molto raramente si hanno anche problemi di visualizzazione nel desktop). Solamente con i successivi tentativi (variando anche il metodo, o la guida) solitamente si raggiunge lo scopo prefisso. Il modesto consiglio � di non disperarsi, magari tirare cazzotti pesanti al case, ma provare finch� non si riesce.
=='''Quale ramo usare'''==
[[Immagine:kernel_releases.png|300px|thumb|Figura 3-1: Ciclo di sviluppo e rilascio del kernel]]


== Software richiesto ==
In passato il kernel Linux era diviso in 2 rami: quello di "sviluppo" e quello "stabile". Per distinguerli, il ramo di sviluppo era contrassegnato da un valore dispari nel secondo numero di release, quello stabile da un valore pari. Ad esempio, la 2.5.25 era una versione di sviluppo, mentre la 2.4.25 era la stabile.


Sebbene i pacchetti per la generazione del modulo <tt>fglrx</tt> siano disponibili nel repository di Debian, il consiglio � quello di utilizzare l'installer fornito da ATI in quanto pi� aggiornato.
Quando fu creata la serie 2.6, gli sviluppatori decisero di abbandonare questo metodo basato su due rami separati e annunciarono che tutti i rilasci della serie 2.6 del kernel sarebbero stati considerati "stabili", indipendentemente da quanto veloce fosse stato il processo di sviluppo. I pochi mesi a disposizione tra le versioni maggiori della serie 2.6 avrebbero lasciato agli sviluppatori il tempo necessario per aggiungere nuove funzioni e renderle stabili per il rilascio successivo. Assieme a questo fu creato un ramo "-stabile" del kernel per permettere eventuali correzioni dei bug e aggiornamenti di sicurezza per l'ultima versione, prima che quella nuova venga rilasciata.
Oltre a questo, nel caso in cui si voglia compilare il modulo senza sfruttare l'installer, sar� necessario disporre dei sorgenti del kernel (o gli header), quindi del pacchetto linux-source e di tutti i pacchetti correlati a questo e necessari per la compilazione (<tt>build-essential</tt>).
Alcuni esempi, illustrati in [[:Immagine:kernel_releases.png|figura 3-1]], aiuteranno a chiarire tutto questo: il team del kernel rilascia la versione stabile 2.6.17; poi gli sviluppatori iniziano a lavorare su nuove caratteristiche e rilasciano la versione -rc del kernel in via di sviluppo, in modo che chi vuole possa aiutare nella fase di test e di debug dei cambiamenti. Quando tutti concordano sul fatto che la versione in via di sviluppo sia abbastanza stabile, questa viene rilasciata come 2.6.18. L'intero ciclo impiega solitamente due o tre mesi, dipendendo da svariati fattori.


{{ Warningbox | Prima di far partire l'installazione di nuovi driver:
Durante lo sviluppo di nuove funzioni vengono rilasciate la 2.6.17.2, la 2.6.17.3 e altre release stabili del kernel, contenenti correzioni di bug e aggiornamenti di sicurezza.
&Egrave; consigliabile che chi intenda usare l'ultima versione del kernel per lavoro si serva di quella stabile. Chi invece intende aiutare gli sviluppatori, pu� testare le caratteristiche della generazione successiva del kernel e darne una valutazione. Per quanto concerne gli scopi di questo capitolo, si suppone che venga utilizzata la versione stabile.


* Salvate una copia di <tt>/etc/X11/xorg.conf</tt> , che in caso di problemi andra' sostituita a quella nuova (creata dal configurer).
=='''Dove trovare i sorgenti del kernel'''==
* Verificate che non sia presente la cartella <tt>/usr/share/fglrx/</tt>. Se � presente, significa che sono installati dei vecchi driver fglrx. Per rimuoverli:
Tutti i sorgenti del kernel Linux si possono trovare in ognuno dei siti kernel.org, una rete di mirror che permette a chiunque di trovare il server locale pi� vicino. Questo fa s� che i server principali possano rispondere pi� prontamente ai mirror e che gli utenti riescano a scaricare i file il pi� velocemente possibile.
<pre># cd /usr/share/fglrx/
# sh ./fglrx-uninstall.sh</pre>
e seguite le istruzioni.
* Fate un '''<tt>aptitude purge</tt>''' di vecchi pacchetti di vecchi driver, se sono installati. Per esempio (i nomi dei pacchetti potrebbero essere diversi):
<pre># aptitude purge fglrx-driver fglrx-kernel-src fglrx-control fglrx-kernel-2.6.17-2-686</pre>
}}


== Metodologie di installazione ==
La pagina principale di http://www.kernel.org riporta tutte le versioni correnti del kernel per ogni differente ramo, come mostrato in [[:Immagine:kernel.org.png|figura 3-2]].


Per quanto riguarda l'intallazione di quelli nuovi, esistono essenzialmente <u>3 metodi alternativi</u>:
[[Immagine:kernel.org.png|center|500px|thumb|Figura 3-2: Il sito ufficiale Kernel.org.]]
# usare l'eseguibile Ati
# creare i pacchetti ''.deb'' partendo dall'eseguibile Ati
# installare i driver dai repository


=== Intallazione attraverso l'installer ATI ===
Per scaricare l'ultima versione stabile del kernel � sufficiente fare clic sulla lettera F nella riga corrispondente: cos� facendo si scaricher� l'intero albero dei sorgenti. Altrimenti � possibile accedere alla sottocartella relativa ad ogni versione della serie 2.6 tramite la pagina http://www.kernel.org/pub/linux/kernel/v2.6/, mostrata in [[:Immagine:Kernel.org.v2.6.png|figura 3-3]].


Da un terminale spostatevi nella cartella dove avete scaricato il file e date i permessi di esecuzione:
[[Immagine:Kernel.org.v2.6.png|center|500px|thumb|Figura 3-3: Directory dei sorgenti per il kernel 2.6]]
<pre>$ chmod +x ati-driver-installer-8.26.18-x86.run</pre> quindi, da root:
<pre># sh ./ati-driver-installer-8.26.18.x86.run</pre>
e seguite le istruzioni.
Poi, sempre con i permessi di root, aggiornate il file di configurazione <tt>xorg.conf</tt>:
<pre># cd /etc/X11/
# aticonfig --initial
# aticonfig --overlay-type=Xv</pre>
e se volete settare meglio la configurazione:
<pre># aticonfig</pre>
il quale ci dar� un lungo output con la descrizione di tutte le opzioni che possiamo usare con <tt>aticonfig</tt>.


A questo punto non ci resta che compilare il modulo del kernel fglrx. I metodi possono essere 2:
&Egrave; anche possibile scaricare i sorgenti del kernel tramite riga di comando, usando il programma <tt>wget</tt> o <tt>curl</tt>, normalmente presenti in ogni distribuzione Linux.


1) Usare module-assistant un pacchetto fornito per compilare moduli contenenti nel kernel-headers
Per scaricare la versione 2.6.17.8 del kernel con <tt>wget</tt> il comando �:
2) Compilare a mano il modulo.


Preferendo la seconda via perch� non richiede il pacchetto kernel-header e perch� applicabile a qualsiasi tipo di kernel sia quello distribuito dai debian repository che i kernel vanilla di www.kernel.org il metodo � il seguente:
<pre>$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.8.tar.gz


Spostarci nella directory /lib/module/fglrx/build_mod da utenti root:


In questa directory adesso basta lanciare
-> 'linux-2.6.17.8.tar.gz


<pre>./make.sh</pre>
Resolving www.kernel.org... 204.152.191.5, 204.152.191.37


Accertarsi che tutto sia andato a buon fine con una scritta "done" e poi spostarci nella directory precedente a build_mod ovvero /lib/modules/fglrx
Connecting to www.kernel.org|204.152.191.5|:80... connected.
A questo punto lanciare il comando


<pre>./make_install.sh </pre>
HTTP request sent, awaiting response... 200 OK


Se tutto � andato a buon fine avete compilato il vostro bel modulo fglrx e per evitare di riavviare il sistema basta semplicemente entrare in linea di comando con CTRL + ALT + F1, effettuare il login come utente root e poi digitare
Lenght: 51,707,742 (49M) [application/x-gzip]


<pre> /etc/init.d/gdm o kdm stop </pre>
100%[-------------------------------------->] 51,707,742 35.25k/s


montare il modulo fglrx con
ETA 00:00


<pre> modprobe fglrx </pre>
18:02:48 (47.12 kB/s) - 'linux-2.6.17.8.tar.gz' saved [51707742/51707742]</pre>


e riavviare il sistema
Per scaricarla con <tt>curl</tt>:


<pre> /etc/init.d/gdm o kdm restart </pre>
<pre>$ curl http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.8.tar.gz \ -o linux-2.6.17.8.tar.gz</pre>


Per controllare che la vostra accelerazione 3D funzioni basta digitare da shell come utente normale
Il modo pi� semplice e veloce per scoprire quale sia l'ultima versione del kernel � usare le informazioni disponibili alla pagina http://www.kernel.org/kdist/finger_banner, come mostrato in [[:Immagine:Kernel.org.v2.6.png|figura 3-4]].


<pre> fglrxinfo </pre>
[[Immagine:Kernel.org_finger_banner.png|center|500px|thumb|Figura 3-4: Ultima versione del kernel.]]
Nel mio caso l'output � il seguente:


<pre>display: :0.0  screen: 0
=='''Cosa fare con i sorgenti'''==
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: ATI Radeon Xpress Series
OpenGL version string: 2.0.6473 (8.37.6)</pre>


<pre>glxinfo | grep rendering </pre>
Una volta scaricati i sorgenti del kernel appropriati, dove � previsto che vengano messi? &Egrave; consigliabile creare una directory locale nella propria home chiamata linux per conservare tutti i file dei sorgenti del kernel:


e aspettare che vi dia come output
<pre>$ mkdir ~/linux</pre>


<pre>direct rendering: Yes</pre>
Spostate il codice sorgente nella directory linux:


N.B.: Se non avete glxinfo installare il pacchetto mesa-utils
<pre>$ mv ~/linux-2.6.18.8.tar.gz ~/linux/</pre>


Questo metodo risulta pi� semplice ed efficace della pacchettizzazione. Se usate kernel vanilla la procedura � la medesima. Attenzione ad usare i kernel 2.6.20 poich� hanno un bug e quindi viene corretto da una patch al modulo fglrx.Tale patch � possibile trovarla in rete.
ed entrate nella directory linux:


===Installazione manuale con generazione pacchetti specifici per Debian===
<pre>$ cd ~/linux
$ ls
linux-2.6.18.8.tar.gz</pre>


Con i privilegi di root, rimuoviamo i vecchi pacchetti del modulo <tt>fglrx</tt>, se presenti:
Adesso che il codice sorgente si trova nella directory giusta, decomprimetelo:
<pre># rm /usr/src/fglrx-kernel*.deb</pre>
E' necessario installare i seguenti pacchetti:
<pre># apt-get install module-assistant build-essential fakeroot dh-make debconf libstdc++5 gcc-3.4-base</pre>
Spostiamoci nella cartella dove abbiamo scaricato l'eseguibile Ati e diamogli i permessi di esecuzione:
<pre>$ chmod +x ati-driver-installer-8.26.18-x86.run</pre>
Poi, per creare i 5 pacchetti .deb:
<pre>$ sh ./ati-driver-installer-8.26.18-x86.run --buildpkg Debian/[release]</pre>
Ad esempio:
<pre>$ sh ./ati-driver-installer-8.26.18-x86.run --buildpkg Debian/testing</pre>
Per installarli (installiamo solo quelli fondamentali):
<pre>$ su
Password:
# dpkg -i fglrx-driver_8.26.18-1_i386.deb
# dpkg -i fglrx-kernel-src_8.26.18-1_i386.deb
# dpkg -i fglrx-control_8.26.18-1_i386.deb</pre>


====Compilazione del modulo <tt>fglrx</tt>====
<pre>$ tar -xzvf linux-2.6.18.8.tar.gz</pre>


Adesso va compilato il modulo <tt>fglrx</tt>, con <tt>module-assistant</tt> (m-a):
Lo schermo si riempir� della lista dei file che verranno decompressi, e alla fine nella directory linux/ rimarr�:
<pre># m-a prepare
# m-a update
# m-a build fglrx
# m-a install fglrx
# depmod -a</pre>
Quindi muoviamoci in <tt>/etc/X11/</tt>:
<pre># cd /etc/X11/</pre>
e aggiorniamo il file di configurazione di X:
<pre># aticonfig --initial
# aticonfig --overlay-type=Xv</pre>
Naturalmemte � possibile modificare <tt>etc/X11/xorg.conf</tt> anche a manina (per fare questo consultate...uhm, forse c'� qualche cosa in <tt>man xorg.conf</tt>) oppure consultando e usando <tt>aticonfig</tt>.


Riavviamo '''X'''.
<pre>$ ls
linux-2.6.18.8.tar.gz
linux-2.6.18.8/</pre>


{{ Warningbox | Ad ogni aggiornamento del kernel bisogna ricompilare il modulo <tt>fglrx</tt>. }}
===Installazione dei driver dai repository===
Innanzi tutto installiamo i pacchetti necessari:
<pre># apt-get install fglrx-control fglrx-driver fglrx-driver-dev fglrx-kernel-src</pre>
Siccome il modulo di cui abbiamo bisogno (<tt>fglrx</tt>) sotto forma di sorgenti (<tt>fglrx-kernel-src</tt>), lo compiliamo e lo installiamo utilizzando <tt>module-assistant</tt>, come descritto [[#Compilazione del modulo fglrx|qui]].
In teoria abbiamo finito, bisogna solamente configurare [[#Struttura del file xorg.conf|<tt>/etc/X11/xorg.conf</tt>]] e riavviare '''X'''.
'''Nota:''' Consultate anche il manuale di <tt>fglrx</tt> . ( <tt>man fglrx</tt> ).
== Struttura del file xorg.conf ==
Un esempio di <tt>/etc/X11/xorg.conf</tt>
<pre>
### /etc/X11/xorg.conf ###
Section "ServerLayout"
Identifier    "Default Layout"
Screen      0  "aticonfig-Screen[0]" 0 0
InputDevice    "Keyboard"
InputDevice    "Mouse"
InputDevice    "Touchpad"
EndSection
Section "Files"
# path to defoma fonts
FontPath    "/usr/share/fonts/X11/misc"
FontPath    "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath    "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath    "/usr/share/fonts/X11/Type1"
FontPath    "/usr/share/fonts/X11/100dpi"
FontPath    "/usr/share/fonts/X11/75dpi"
FontPath    "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection
Section "Module"
Load  "synaptics"
Load  "bitmap"
Load  "ddc"
Load  "dri"
Load  "extmod"
Load  "freetype"
Load  "glx"
Load  "int10"
Load  "type1"
Load  "vbe"
#      Load  "GLcore"
EndSection
Section "InputDevice"
Identifier  "Keyboard"
Driver      "kbd"
Option     "CoreKeyboard"
Option     "XkbRules" "xorg"
Option     "XkbModel" "pc105"
Option     "XkbLayout" "it"
EndSection
Section "InputDevice"
Identifier  "Mouse"
Driver      "mouse"
Option     "CorePointer"
Option     "Device" "/dev/input/mice"
Option     "Protocol" "ExplorerPS/2"
Option     "Emulate3Buttons" "true"
EndSection
Section "InputDevice"
Identifier  "Touchpad"
Driver      "synaptics"
Option     "Device" "/dev/psaux"
Option     "Protocol" "auto-dev"
Option     "LeftEdge" "1700"
Option     "RightEdge" "5300"
Option     "TopEdge" "1700"
Option     "BottomEdge" "4200"
Option     "FingerLow" "25"
Option     "FingerHigh" "30"
Option     "MaxTapTime" "180"
Option     "MaxTapMove" "220"
Option     "VertScrollDelta" "100"
Option     "MinSpeed" "0.10"
Option     "MaxSpeed" "0.30"
Option     "AccelFactor" "0.0150"
Option     "SHMConfig" "on"
        Option      "AlwaysCore" "true"
EndSection
Section "Monitor"
Identifier  "aticonfig-Monitor[0]"
HorizSync    30.0 - 70.0
VertRefresh  50.0 - 100.0
Option     "VendorName" "ATI Proprietary Driver"
Option     "ModelName" "Generic Autodetecting Monitor"
Option     "DPMS" "true"
EndSection
Section "Monitor"
Identifier  "aticonfig-Monitor[1]"
Option     "DPMS" "true"
EndSection
Section "Device"
Identifier  "aticonfig-Device[0]"
Driver      "fglrx"
Option     "VideoOverlay" "on"
Option     "OpenGLOverlay" "off"
Option     "DesktopSetup" "horizontal,reverse"
BusID      "PCI:1:0:0"
EndSection
Section "Screen"
Identifier "aticonfig-Screen[0]"
Device    "aticonfig-Device[0]"
Monitor    "aticonfig-Monitor[0]"
DefaultDepth    24
SubSection "Display"
Viewport  0 0
Depth    24
Modes    "1280x800" "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
EndSection
Section "DRI"
Mode        0666
EndSection
### End Of File ###
</pre>
== Alcuni Test ==
Per verificare se abbiamo installato tutto correttamente:
<pre>$ fglrxinfo</pre>
dovrebbe dare un output simile a questo:
<pre>display: :0.0  screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: MOBILITY RADEON 9700 Generic
OpenGL version string: 2.0.5879 (8.26.18)</pre>
Se al posto di ATI compare Mesa, c' qualcosa che non va. L'installazione non andata a buon fine.
Per testare l'accelerazione:
<pre>$ fgl_glxgears</pre>
Dovrebbe comparire un cubo rotante con sulle sei faccie degli ingranaggi rotanti e, sul terminale la conta dei frame:
<pre>Using GLX_SGIX_pbuffer
1610 frames in 5.0 seconds = 322.000 FPS
1640 frames in 5.0 seconds = 328.000 FPS
2093 frames in 5.0 seconds = 418.600 FPS</pre>
Se invece compaiono 4-5 righe di errori, c' qualcosa che non va. L'installazione non andata a buon fine. Ritenta, forse sarai pi fortunat*.
Per testare l'accelerazione possibile utilizzare anche i tools di Mesa:
<pre># apt-get install mesa-utils
$ glxgears -printfps</pre>
Appaiono tre ingranaggi rotanti e la conta dei fotogrammi:
<pre>14045 frames in 5.0 seconds = 2808.862 FPS
14115 frames in 5.0 seconds = 2822.858 FPS
14196 frames in 5.0 seconds = 2839.177 FPS</pre>
==File di log==
l file di log principale '''<tt>/var/log/Xorg.0.log</tt>''' e seguenti. Da spulciare, analizare, bruciare, supplicare. Insomma qui c' di tutto di pi. Ma a volte si pu anche non trovare nulla di anomalo e magari <tt>fgl_glxgears</tt> non funziona lo stesso. 8(
Se abbiamo installato i driver con l'installer Ati, esiste anche questo piccolo log:  <tt>/usr/share/fglrx/fglrx-install.log</tt>
== Tips and Tricks ==
* Una cosa importante, ma che resta comunque strana, scrivere, in <tt>/etc/X11/xorg.conf</tt>, i moduli <tt>dri</tt>, <tt>glx</tt> e <tt>GLcore</tt>, in questo ordine. Se ad esempio si mette <tt>GLcore</tt> per primo, l'accelerazione non andr e il log <tt>/var/log/Xorg.0.log</tt> riporter una serie di errori, tra cui warning sulla libreria <tt>/usr/lib/xorg/modules/extensions/libGLcore.so</tt> e  un errore verso la fine, tristemente incorniciato. Questo errore non so se sia circoscritto alla mia configurazione o se sia un cosa generale. L'unica cosa fare un po' di test.
* A volte si ottengono risultati migliori installando i driver con '''X non avviato'''.
* Se i driver sono molto recenti il modulo <tt>GLcore</tt> non bisognerebbe inserirlo in <tt>/etc/X11/xorg.conf</tt> : viene caricato automaticamente.
* Aggiornando le librerie Mesa (<tt>libgl1-mesa-dri</tt> oppure <tt>libgl1-mesa-glx</tt> ad esempio), ahim, pu capitare che l'accelerazione sparisca all'improvviso. L'unica cosa da fare probabilmente disinstallare i driver e installarli di nuovo.
* Per quanto riguarda le trasparenze di KDE, credo non siano supportate a livello hardware. Io non sono riuscito ad attivarle, infatti se aggiungo a <tt>/etc/X11/xorg.conf</tt> la sezione:
<pre>Section "Extensions"
Option "Composite" "Enable"
EndSection</pre>
l'accelerazione 3D non viene caricata.


----
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].
----
----


Autore: [[User:rasca|rasca]] 09:04, 17 July 2006 (CEST)
Ampliato da: [[Utente:Superflieriam|Superflieriam]]
[[Categoria:Hardware]]
[[Categoria:Desktop]]
[[Categoria:Kernel]]
[[Categoria:Kernel]]
29

contributi