Pagina 1 di 3

kernel 2.6.19 e ATI Proprietary Driver [Problema e Soluzione

Inviato: ven 1 dic 2006, 0:39
da targzeta
Ciao,
scrivo questo thread in risposta a pino.giaquinto nel thread:

Codice: Seleziona tutto

2.6.19...un panic ogni 2 minuti!!!!
Spiego i problemi che ho avuto nell'installazione dei driver ATI per il kernel 2.6.19 e come li ho risolti.

Io parlo dell'rpm che scarichi dal sito della ATI.
Non so se con l'installer si riesce a capire bene ma per chi ha provato a estrarre tutti i file del pacchetto rpm avrà senza dubbio capito che ci sono due driver, il primo viene compilato ad hoc per la macchina (il driver per il direct rendering fglrx-versione.ko), e un altro invece, quello per X proprietario già compilato per xorg (nel mio caso xorg 6.8 ).
Il problema si ha con il driver che viene compilato ad hoc.
Di solito estraendo i file si ottiene una directory:

Codice: Seleziona tutto

lib/modules/fglrx/build_mod
in questa directory c'è un file chiamato make.sh che altro non è che uno script per invocare la compilazione del modulo fglrx-versione.ko.
L'esecuzione di questo script con la nuova versione del kernel (2.6.19) non và a buon fine, di solito esce qualcosa tipo:

Codice: Seleziona tutto

.....linux/config.h: File not found
Perché questo?
Bene, questo accade perchè (dal ChangeLog del kernel) nella nuova versione hanno completamente eliminato l'uso del file config.h nell'albero dei sorgenti, indi per cui quando si cerca di compilare un modulo che include questo file, non viene trovato.

Come si risolve?
Facile, il fie config.h non fa altro che includere il file autoconf.h, quindi per ovviare al problema basta andare nella directory sopra citata:

Codice: Seleziona tutto

lib/modules/fglrx/build_mod
ed eseguire il piccolo comando:

Codice: Seleziona tutto

sed -i '/linux\/config.h/s;linux\/config.h;linux\/autoconf.h;' *.{h,c};
che non fa altro che sostituire, in tutti i file in cui è presente l'inclusione del file config.h, tale inclusione con quella del file autoconf.h.
Fatto questo il comando make.sh finirà con successo la creazione del modulo fglrx-versione.ko.

Spero che questo piccolo post possa essere utile a tutti quelli che usano il driver proprietario ATI.

Saluti e buon lavoro
Spina

P.S. In realtà il file config.h esegue anche la definizione di una variabile, più precisamente esegue:

Codice: Seleziona tutto

#ifndef _LINUX_CONFIG_H
#define _LINUX_CONFIG_H
/* This file is no longer in use and kept only for backward compatibility.
 * autoconf.h is now included via -imacros on the commandline
 */
#include <linux/autoconf.h>

#endif
Ma non sono sicuro che tutto questo vada più fatto ora. Ho scritto a quelli della ATI per segnalare il problema, se la vedranno loro ;)

Inviato: ven 1 dic 2006, 1:18
da wolf64
Mi hai anticipato! :D

Confermo quanto scrivi, io non uso l'ultimo driver ATI in quanto ho una Radeon 9200 SE, e da una certa versione in poi il driver non supporta più alcune schede tra cui la mia, dovrebbe essere l'8.28.8, comunque lo compilo direttamente dalla directory /lib/modules/fglrx e lo installo manualmente, però per il kernel 2.6.19 ho dovuto fare le modifiche conseguenti alla eliminazione del config.h a cui fai riferimento, adesso va bene! :)

Ciao :)

Inviato: ven 1 dic 2006, 1:25
da targzeta
ok, sono contento di questo "feedback".
Speriamo di essere utili a tutti gli altri. ;)

Spina

Inviato: ven 1 dic 2006, 2:19
da wolf64
Concordo! :)

Inviato: sab 2 dic 2006, 9:39
da danix
wolf64 ha scritto: Confermo quanto scrivi, io non uso l'ultimo driver ATI in quanto ho una Radeon 9200 SE, e da una certa versione in poi il driver non supporta più alcune schede tra cui la mia, dovrebbe essere l'8.28.8, comunque lo compilo direttamente dalla directory /lib/modules/fglrx e lo installo manualmente, però per il kernel 2.6.19 ho dovuto fare le modifiche conseguenti alla eliminazione del config.h a cui fai riferimento, adesso va bene! :)
Io ho la tua stessa scheda video e vorrei provare il nuovo kernel (per adesso sto usando la slack 11 con il 2.4 "bareacpi" che c'è nel cd 1) ho provato ad usare il 2.6 della slack e non sono riuscito ad installare i driver ATI, premetto che ho sempre usato l'installer, non saprei come fare con l'rpm...

potresti aiutarmi in qualche modo??

grazie mille anticipatamente...

Inviato: sab 2 dic 2006, 13:52
da targzeta
danix85 ha scritto: ...non saprei come fare con l'rpm...
potresti aiutarmi in qualche modo??
grazie mille anticipatamente...
Io ho fatto uno slackBuild. Lo trovi qui:

http://www.cli.di.unipi.it/~tomasi/fglr ... SlackBuild

Basta scaricare l'rpm dal sito della ATI e lanciare, come root lo script:

Codice: Seleziona tutto

fglrx.SlackBuild fglrx_scaricato.rpm
Quello che fa è:
1) Compilare il driver fglrx-versione.ko
2) Comprime il file come fglrx-versione.ko.gz
3) Creare il pacchetto Slackware fglrx-xorg_vers-versione.tgz per il kernel corrente

A questo punto non ti resta che installare il pacchetto creato come con qualsiasi altro pacchetto Slackware.

Nota però che l'rpm del sito, a meno di aggiornamenti, funziona solo con la version 6.8 di xorg!!!

Fammi sapere
Spina

P.S. Se non ti fidi, puoi anche leggerti lo script senza eseguirlo. Fondamentalmente ci sono tutti i passi necessari a compilare il driver....oltre a tutto quello che serve per creare il pacchetto.

Buon lavoro

Re: kernel 2.6.19 e ATI Proprietary Driver [Problema e Soluz

Inviato: sab 2 dic 2006, 21:46
da mr_hyde
spina ha scritto:
P.S. In realtà il file config.h esegue anche la definizione di una variabile, più precisamente esegue:

Codice: Seleziona tutto

#ifndef _LINUX_CONFIG_H
#define _LINUX_CONFIG_H
/* This file is no longer in use and kept only for backward compatibility.
 * autoconf.h is now included via -imacros on the commandline
 */
#include <linux/autoconf.h>

#endif
Ma non sono sicuro che tutto questo vada più fatto ora. Ho scritto a quelli della ATI per segnalare il problema, se la vedranno loro ;)
Della definizione della macro _LINUX_CONFIG_H non ti preoccupare: e' semplicemente una tecnica usata per evitare le inclusioni ripetute/ricorsive dello stesso file include, in modo da dover evitare errori di ri-definizioni delle stesse variabili. Insomma, non mi dilungo di piu' perche' non e' la sede piu' adataa, ma in pratica per i nostri scopi (far compilare fglrx) non serve.
Grazie della dritta. Ho provveduto anche a segnalarla sul forum http://www.slamd64.com

Ciao,
Mr Hyde

Re: kernel 2.6.19 e ATI Proprietary Driver [Problema e Soluz

Inviato: dom 3 dic 2006, 0:51
da targzeta
mr_hyde ha scritto:Della definizione della macro _LINUX_CONFIG_H non ti preoccupare: e' semplicemente una tecnica usata per evitare le inclusioni ripetute/ricorsive dello stesso file include, in modo da dover evitare errori di ri-definizioni delle stesse variabili....
si si, sono un programmatore ;) . Il punto è che non avendo spulciato tutto il codice della ATI non me la sono sentita di assicurare nessuno.
Come ben sai a volte nel codice ci possono essere clausole del tipo:

Codice: Seleziona tutto

#ifdef _LINUX_CONFIG_H 
.....
#else 
......
#endif
Buon lavoro,
Spina

Inviato: dom 3 dic 2006, 22:24
da Luke88
scusate se chiedo...
io sto provando a installare i driver vecchi (8.28.8, ho una 9200se) sul kernel 2.6.19...
ho seguito i consigli che erano stati dati per la compilazione sul 2.6.18 da paoletta (http://www.slacky.it/forum/viewtopic.ph ... 688#113688), e non mi hanno funzionato, quindi ho provato anche il

Codice: Seleziona tutto

sed -i '/linux\/config.h/s;linux\/config.h;linux\/autoconf.h;' *.{h,c};
ma continua a non compilare...

Codice: Seleziona tutto

/lib/modules/fglrx/build_mod# ./make.sh
ATI module generator V 2.0
==========================
initializing...
./make.sh: line 518: [: =: unary operator expected
cleaning...
patching 'highmem.h'...
assuming new VMA API since we do have kernel 2.6.x...
 Assuming default VMAP API
doing Makefile based build for kernel 2.6.x and higher
make -C /lib/modules/2.6.19-Lke/build SUBDIRS=/lib/modules/fglrx/build_mod/2.6.x modules
make[1]: Entering directory `/usr/src/linux-2.6.19'
  CC [M]  /lib/modules/fglrx/build_mod/2.6.x/firegl_public.o
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:233: error: `UTS_RELEASE' undeclared here (not in a function)
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:447: warning: initialization from incompatible pointer type
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function `firegl_stub_open':
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:570: warning: assignment discards qualifiers from pointer target type
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function `__che_request_irq':
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:2492: warning: passing arg 2 of `request_irq' from incompatible pointer type
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function `__che_smp_call_function':
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:3880: warning: passing arg 1 of `smp_call_function' from incompatible pointer type
make[2]: *** [/lib/modules/fglrx/build_mod/2.6.x/firegl_public.o] Error 1
make[1]: *** [_module_/lib/modules/fglrx/build_mod/2.6.x] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.19'
make: *** [kmod_build] Error 2
build failed with return value 2
sapete cosa potrei provare?

Inviato: dom 3 dic 2006, 23:32
da mr_hyde
UTS_RELEASE dovrebbe essere semplicemente la release del kernel.
A tal proposito nella nuova versione dei driver ATI. sono interessanti i commenti in make.sh dove si spiega che prima questa define era presente in uno dei file linux/version-*.h, ma che ora nei kernel >= 2.6.18 questa define e' in linux/utsrelease.h.

Prova quindi a editare il file /lib/modules/fglrx/build_mod/2.6.x/firegl_public.c e a inserire dopo gli include esistenti le segg. righe:

Codice: Seleziona tutto

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
#include <linux/utsrelease.h>
#endif
Ciao,
Mr Hyde

P.S.: ovviamente questo _FORSE_ (non l'ho provato non avendo la tua vers. di fglrx) risolve l'errore, MA NON I WARNING!

Inviato: lun 4 dic 2006, 1:25
da targzeta
Sisisi,
segui tutti i consigli e vedrai che compila. Se non hai ancora modificato nulla, o se vuoi ricominciare daccapo, basta che lanci, nella directory
  • lib/modules/fglrx/build_mod
i seguenti tre comandi in un ordine qualsiasi:

Codice: Seleziona tutto

sed -i '/src_file=$linuxincludes\/linux\/version.h/s,version,utsrelease,' make.sh;
...la patch suggerita da Paoletta...

Codice: Seleziona tutto

sed -i '/linux\/config.h/s;linux\/config.h;linux\/autoconf.h;' *.{h,c};
...la patch per il kernel 2.6.19...

Codice: Seleziona tutto

sed -i '/#include <linux\/version.h>/a\#define VM_SHM 0\n#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)\n#include <linux/utsrelease.h>\n#endif' firegl_public.c;
...le patch suggerite da Paoletta (#define VM_SHM) e da mr_hyde (#if ...)...
poi per compilare il driver esegui:

Codice: Seleziona tutto

sh make.sh
oh, ci sono di patch da fare eh :o . Quelli della ATI si dovrebbero impegnare un pò di più nel seguire l'evoluzione del kernel non vi pare?

In alternativa puoi usare il mio SlackBuild che trovi all'indirizzo:
http://www.cli.di.unipi.it/~tomasi/fglr ... SlackBuild
come ho già spiegato a danix85.

Comunque Luke88, facci sapere com'è andata,
Spina

P.S. Ma vogliamo parlare dell'errore:

Codice: Seleziona tutto

./make.sh: line 518: [: =: unary operator expected
la riga 518 è la seguente:

Codice: Seleziona tutto

if [ $MODVERSIONS = 0 ] 
Ovviemante se MODVERSIONS non è settata si ha l'errore riportato.
Chi a scritto questo script non è un grande esperto, speriamo non sia lo stesso che ha scritto il driver se no siamo nella bip... :D

Inviato: lun 4 dic 2006, 8:03
da mr_hyde
Be', all'inizio (prima della 8.25 e rotti) facevo patch mooooolto piu' pesanti...
Quello che mi da fastidio non sono tanto gli errori in se' ma che:
1) spesso gli errori sono proprio banali
2) che a volte ho la sensazione che distribuiscano pacchetti senza neanche averli provati!

Sono anch'io un programmatore e commetto errori anche io, ma se ad ogni rilascio avessi errori del genere credo che mi avrebbero licenziato da un pezzo!

Ciao,
Mr Hyde

Inviato: lun 4 dic 2006, 14:57
da Luke88
funziona, grazie mille :)

Inviato: mar 5 dic 2006, 17:19
da aLvArO
io ho provato con i driver 8.6.18 che sono gli ultimi che vanno senza bisogno di sostitutire la libGL procedendo con sh ati-version-xxx.run --extract miadir
cd miadir/common/lib/modules/fglrx/buil*
ho esguito i tre comandi patch, poi sono tornato in miadir e o esguiro ./atiinstaller.sh version --install

all@vasco:~$ glxgears
12336 frames in 5.0 seconds = 2467.102 FPS
12377 frames in 5.0 seconds = 2475.225 FPS
all@vasco:~$

questo il mio risultato se vi incontrassi di persona vi offrirei la cena grazie mille ciao

Inviato: mar 5 dic 2006, 17:56
da targzeta
sono contento che il thread sia servito :o

Saluti
Spina