Nisi trebao instalirati drugu verziju kernela, treba sve da radi i sa ovom. Mozda si mogao preskociti instalaciju ovih kernel headera, ali 'ajde, sta da se radi.
Kada se skine sa interneta i raspakuje novi kernel (ili instalira sa instalacionog CD-a), taj novi kernel vec sadrzi headere. Dakle, ako sam raspakovao kernel 2.4.18 u /usr/src/linux-2.4.18 direktorijum, headeri kernela se nalaze u /usr/src/linux-2.4.18/include.
Ono sto mene malo iritira (i sto je mozda ovde problem bio) jeste to sto po instalaciji linuxa (nisam siguran da li je to u svim distroima) u /usr/src diru, instalacija napravi jedan soft-link pod nazivom "linux" koji (satro) pokazuje na moj instalirani kernel. Zasto me to iritira ? Pa zato sto po skidanju i raspakivanju novog kernela (recimo da sam neku verziju vec imao instaliranu), tar.gz arhiva raspakuje pokusavajuci da u /usr/src kreira poddirektorijum "linux" i tu nalece na postojeci soft-linu "linux" i krene sve lepo da se overwrituje preko postojeceg sourcea kernela, i onda nastaje ovakav svinjac. Najbolje je obrisati soft-link "linux" (prepoznaje se po tildi ispred u mc-u ili po "strelici" kada se izdiruje sa "ll"), a svaki source kernela preimenovati tako da sadrzi u imenu i verziju. Dakle, ako sam raspakovao 2.4.18, on ce kreirati subdir "linux" i to treba preimenovati u "linux-2.4.18" pre nego sto se nesto dalje sa njime radi.
Prvo, drajver se instalira ovde sa "make install", ne sa cistim "make".
Drugo, kada izdvojimo ove poruke, lepo i vrlo jasno pise sta je kompajler/make prijavio:
"Modules should never use
kernel-headers system headers,
but rather headers from an
appropriate kernel-source package.
Change -I/usr/src/linux/include (or similar) to
-I/lib/modules/$(uname -r)/build/include
to build against the currently-running kernel."
Kada imas instaliran neki kernel, sve drajvere koji su instalirali u obliku modula (tj nisu uvezani u kernel direktno) se instaliraju u poseban direktorijum. Dakle, ako imam instaliran pomenuti kernel 2.4.18, moduli su locirani u /lib/modules/2.4.18 diru.
Gore jasno pise sta mu smeta i sta treba uraditi. Skripta trazi hedere iz ovakvog direktorijuma. Sa "uname -r" se saznaje koja verzija kernela se ima, pa se tako saznaje ime subdira u /lib/modules. Kada si otkucao "make", lepo si dobio:
cc -c -Wall -Wimplicit -Wreturn-type -Wswitch -Wformat -Wchar-subscripts
-Wparentheses -Wpointer-arith -Wcast-qual -Wno-multichar -O -MD
-D__KERNEL__ -DMODULE
-D_LOOSE_KERNEL_NAMES -D_X86=1 -Di386=1 -DUNIX -DLINUX -DNV4_HW -DNTRM
-DRM20 -D_GNU_SOURCE -DRM_HEAPMGR -D_LOOSE_KERNEL_NAMES -D__KERNEL__
-DMODULE -DNV_MAJOR_VERSION=1 -DNV_MINOR_VERSION=0 -DNV_PATCHLEVEL=2960
-I. -I/usr/src/linux/include -Wno-cast-qual nv.c
Dakle, ovaj narandzasti include path (iza -I) "/usr/src/linux/include" treba zameniti sa "/lib/modules/$(uname -r)/build/include".
EDIT:
Kada kazem 'treba zameniti', mislio sam na "editovati make skriptu i zameniti ove includ pathove". Slazem se, mogla je nvidia to i malo elegantnije da uradi, ali sta da sa radi. I sami su na pocetku skripte napisali da ona i nije neko umetnicko delo.