Титла: nVidia Riva TNT + kernel 2.6.13
Публикувано от: Drakula в Sep 29, 2005, 22:11
Привет! Реших и аз да си компилирам свое ядро, а не да карам с "фабричното", което си идва стандартно със Slackware. След известни усилия успях да подкарам целия наличен хардуер, но инсталацията на драйвера за nVidia се оказа проблем. Видеокартата ми е Riva TNT 16MB и доколкото знам последната версия на драйвера на nVidia със свястна поддръжка на тази карта е 6111. Друга информация за системата: OS: Slackware 10.2 Ядро: 2.6.13 (компилирано от мен) MB: Gigabyte 7ZXE с VIAKT133A chipset RAM: 256MB Samsung SDRAM + 128MB PQI Опитът да инсталирам драйвера се оказа неуспешен и след кратка справка с Google установих че не може да се инсталира в чист вид с ядра 2.6.х. Ръководен от тази статия и използвайки аналогията свалих следните неща: 1. NVIDIA-Linux-x86-1.0-6111-pkg1.run2. NVIDIA_kernel-1.0-6111-1132076.diffС така свалените файлове изпълних: Примерен код | danail@drakula:~/nv_stuff$ sh NVIDIA-Linux-x86-1.0-6111-pkg1.run --extract-only danail@drakula:~/nv_stuff$ cd NVIDIA-Linux-x86-1.0-6111-pkg1 danail@drakula:~/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1$ patch -p0 < ~/nv_stuff/NVIDIA_kernel-1.0-6111-1132076.diff patching file usr/src/nv/nv.c danail@drakula:~/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1$ sudo /sbin/modprobe -q agpgart danail@drakula:~/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1$sudo nvidia-installer -n
|
Естествено, по закона на Мърфи инсталаторът не успява да си билдне смотания модул и в лога /var/log/nvidia-installer.log пише следното (това е целия лог):
Цитат | nvidia-installer log file '/var/log/nvidia-installer.log' creation time: Thu Sep 29 21:17:49 2005
option status: license pre-accepted : false update : false force update : false expert : false uninstall : false driver info : false no precompiled interface: true no ncurses color : false query latest driver ver : false OpenGL header files : false no questions : false silent : false X install prefix : /usr/X11R6 OpenGL install prefix : /usr Installer install prefix: /usr kernel source path : (not specified) kernel install path : (not specified) proc mount point : /proc ui : (not specified) tmpdir : /tmp ftp site : <a href="" target="_blank">ftp://download.nvidia.com</a>
Using: nvidia-installer ncurses user interface -> License accepted. -> There appears to already be a driver installed on your system (version: 1.0- 6111). As part of installing this driver (version: 1.0-6111), the existing driver will be uninstalled. Are you sure you want to continue? ('no' will a bort installation) (Answer: Yes) -> Not probing for precompiled kernel interfaces. -> Kernel source path: '/lib/modules/2.6.13/build' -> Performing cc_version_check with CC="cc". -> Performing rivafb check. -> Performing rivafb module check. WARNING: Your kernel was configured to include rivafb support as a loadable kernel module. The rivafb driver conflicts with the NVIDIA driver; the NVIDIA kernel module will still be built and installed, but be aware that the NVIDIA driver will not be able to function properly if the rivafb module is loaded! -> Cleaning kernel module build directory. executing: 'cd ./usr/src/nv; make clean'... rm -f -f nv.o os-agp.o os-interface.o os-registry.o nv.o os-agp.o os-interfa ce.o os-registry.o nvidia.mod.o rm -f -f build-in.o nv-linux.o *.d .*.{cmd,flags} rm -f -f nvidia.{o,ko,mod.{o,c}} nv_compiler.h *~ -> Building kernel module: executing: 'cd ./usr/src/nv; make module SYSSRC=/lib/modules/2.6.13/build SY SOUT=/lib/modules/2.6.13/build'... Your kernel was configured to include rivafb support as a loadable kernel module. The rivafb driver conflicts with the NVIDIA driver; the NVIDIA kernel module will still be built and installed, but be aware that the NVIDIA driver will not be able to function properly if the rivafb module is loaded! *** Failed rivafb module sanity check, but continuing! *** NVIDIA: calling KBUILD... make -C /lib/modules/2.6.13/build \ KBUILD_SRC=/usr/src/linux-2.6.13 KBUILD_VERBOSE=1 \ KBUILD_CHECK= KBUILD_EXTMOD="/home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111 -pkg1/usr/src/nv" \ -f /usr/src/linux-2.6.13/Makefile modules mkdir -p /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/.tm p_versions make -f /usr/src/linux-2.6.13/scripts/Makefile.build obj=/home/danail/nv_stu ff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv echo \#define NV_COMPILER \"`cc -v 2>&1 | tail -n 1`\" > /home/danail/nv_stu ff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv_compiler.h cc -Wp,-MD,/home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv /.nv.o.d -nostdinc -isystem /usr/lib/gcc-lib/i486-slackware-linux/3.3.6/inc lude -D -Iinclude -Iinclude2 -I/usr/src/linux-2.6.13/include -I/h ome/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv -Wall -Wstrict -prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -ffreestanding - O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -mar ch=athlon -I/usr/src/linux-2.6.13/include/asm-i386/mach-default -Iinclude/as m-i386/mach-default -I/home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/ usr/src/nv -Wall -Wimplicit -Wreturn-type -Wswitch -Wformat -Wchar-subscript s -Wparentheses -Wpointer-arith -Wno-multichar -Werror -O -fno-common -MD -W no-cast-qual -Wno-error -D_LOOSE_KERNEL_NAMES -D -DMODULE -DNTRM - D_GNU_SOURCE -D_LOOSE_KERNEL_NAMES -D -DMODULE -DNV_MAJOR_VERSION= 1 -DNV_MINOR_VERSION=0 -DNV_PATCHLEVEL=6111 -DNV_UNIX -DNV_LINUX -DNV_INT64_ OK -DNVCPU_X86 -UDEBUG -U_DEBUG -DNDEBUG -DNV_CHANGE_PAGE_ATTR_PRESENT -DMOD ULE -DKBUIL D_BASENAME=nv -DKBUILD_MODNAME=nvidia -c -o /home/danail/nv_stuff/NVIDIA-Lin ux-x86-1.0-6111-pkg1/usr/src/nv/nv.o /home/danail/nv_stuff/NVIDIA-Linux-x86- 1.0-6111-pkg1/usr/src/nv/nv.c In file included from include/linux/list.h:7, from include/linux/wait.h:23, from include/asm/semaphore.h:41, from include/linux/sched.h:20, from include/linux/module.h:10, from /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/u sr/src/nv/nv-linux.h:52, from /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/u sr/src/nv/nv.c:14: include/linux/prefetch.h: In function `prefetch_range': include/linux/prefetch.h:62: warning: pointer of type `void *' used in arith metic In file included from include/linux/dmapool.h:14, from include/linux/pci.h:870, from /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/u sr/src/nv/nv-linux.h:75, from /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/u sr/src/nv/nv.c:14: include/asm/io.h: In function `check_signature': include/asm/io.h:253: warning: wrong type argument to increment /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c: In fun ction `nvos_find_agp_by_class': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:642: wa rning: implicit declaration of function `pci_find_class' /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:642: wa rning: assignment makes pointer from integer without a cast /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:653: wa rning: assignment makes pointer from integer without a cast /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c: In fun ction `nvidia_init_module': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:1161: w arning: `pm_register' is deprecated (declared at include/linux/pm.h:107) /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c: In fun ction `nvidia_exit_module': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:1279: w arning: `pm_unregister' is deprecated (declared at include/linux/pm.h:112) /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c: In fun ction `nv_kern_mmap': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:1765: w arning: implicit declaration of function `remap_page_range' /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c: In fun ction `_get_phys_address': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:2731: w arning: passing arg 1 of `pmd_offset' from incompatible pointer type /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c: In fun ction `nv_agp_init': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:3332: w arning: implicit declaration of function `inter_module_get' /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:3333: w arning: `inter_module_put' is deprecated (declared at include/linux/module.h :573) /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c: In fun ction `nvos_count_devices': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:3486: w arning: assignment makes pointer from integer without a cast /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/nv.c:3491: w arning: assignment makes pointer from integer without a cast cc -Wp,-MD,/home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv /.os-agp.o.d -nostdinc -isystem /usr/lib/gcc-lib/i486-slackware-linux/3.3.6 /include -D -Iinclude -Iinclude2 -I/usr/src/linux-2.6.13/include -I/home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv -Wall -Wst rict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -ffreestandi ng -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -march=athlon -I/usr/src/linux-2.6.13/include/asm-i386/mach-default -Iinclud e/asm-i386/mach-default -I/home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-p kg1/usr/src/nv -Wall -Wimplicit -Wreturn-type -Wswitch -Wformat -Wchar-subscripts -Wparentheses -Wpointer-arith -Wno-multichar -We rror -O -fno-common -MD -Wno-cast-qual -Wno-error -D_LOOSE_KERNEL_NAMES -D -DMODULE -DNTRM -D_GNU_SOURCE -D_LOOSE_KERNEL_NAMES -D -D MODULE -DNV_MAJOR_VERSION=1 -DNV_MINOR_VERSION=0 -DNV_PATCHLEVEL=6111 -DNV_U NIX -DNV_LINUX -DNV_INT64_OK -DNVCPU_X86 -UDEBUG -U_DEBUG -DNDEBUG -DNV_CHAN GE_PAGE_ATTR_PRESENT -DMODULE -DKBUILD_BASENAME=os_agp -DKBUILD_MODNAME=nvid ia -c -o /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os- agp.o /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp .c In file included from include/linux/list.h:7, from include/linux/wait.h:23, from include/asm/semaphore.h:41, from include/linux/sched.h:20, from include/linux/module.h:10, from /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/u sr/src/nv/nv-linux.h:52, from /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/u sr/src/nv/os-agp.c:24: include/linux/prefetch.h: In function `prefetch_range': include/linux/prefetch.h:62: warning: pointer of type `void *' used in arith metic In file included from include/linux/dmapool.h:14, from include/linux/pci.h:870, from /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/u sr/src/nv/nv-linux.h:75, from /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/u sr/src/nv/os-agp.c:24: include/asm/io.h: In function `check_signature': include/asm/io.h:253: warning: wrong type argument to increment /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c: At top level: /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:48: error: syntax error before '*' token /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:48: warning: type defaults to `int' in declaration of `drm_agp_p' /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:48: warning: data definition has no type or storage class /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c: In function `KernInitAGP': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:76: warning: assignment discards qualifiers from pointer target type /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:85: error: request for member `acquire' in something not a structure or union /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:88: warning: `inter_module_put' is deprecated (declared at include/linux/module. h:573) /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:113 : error: request for member `copy_info' in something not a structure or unio n /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:173 : error: request for member `enable' in something not a structure or union /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:185 : error: request for member `release' in something not a structure or union /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:186 : warning: `inter_module_put' is deprecated (declared at include/linux/modul e.h:573) /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c: In function `KernTeardownAGP': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:216 : error: request for member `release' in something not a structure or union /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:218 : warning: `inter_module_put' is deprecated (declared at include/linux/modul e.h:573) /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c: In function `KernAllocAGPPages': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:265 : error: request for member `allocate_memory' in something not a structure o r union /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:273 : error: request for member `bind_memory' in something not a structure or un ion /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:290 : error: request for member `unbind_memory' in something not a structure or union /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:305 : error: request for member `free_memory' in something not a structure or un ion /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c: In function `KernMapAGPPages': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:337 : warning: implicit declaration of function `remap_page_range' /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:345 : error: request for member `unbind_memory' in something not a structure or union /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c: In function `KernFreeAGPPages': /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:444 : error: request for member `unbind_memory' in something not a structure or union /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c:445 : error: request for member `free_memory' in something not a structure or un ion make[4]: *** [/home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/n v/os-agp.o] Error 1 make[3]: *** [_module_/home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/u sr/src/nv] Error 2 make[2]: *** [modules] Error 2 NVIDIA: left KBUILD. nvidia.ko failed to build! make[1]: *** [module] Error 1 make: *** [module] Error 2 -> Error. ERROR: Unable to build the NVIDIA kernel module. ERROR: Installation has failed. Please see the file '/var/log/nvidia-installer.log' for details. You may find suggestions on fixing installation problems in the README available on the Linux driver download page at www.nvidia.com.
|
На въпросния 48-ми ред на /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c има следното
Цитат | .......... agp_kern_info agpinfo; agp_gart gart; const drm_agp_t *drm_agp_p; // те това е ред 48!
#if defined(CONFIG_MTRR) #define MTRR_DEL(gart) if ((gart).mtrr > 0) mtrr_del((gart).mtrr, 0, 0); ..........
|
Търсих го тоя тип drm_agp_t по файловете в /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/, но се среща само в този файл и само на това място. С помощта на Google попаднах на това, което ме наведе на мисълта да се разровя из сорсовете на старото ядро (linux-2.4.31/include/linux/agp_backend.h) и от там да си взема дефиницията на типа и да я сложа точно преди проблемния 48-ми ред:
Примерен код | typedef struct { void (*free_memory)(agp_memory *); agp_memory *(*allocate_memory)(size_t, u32); int (*bind_memory)(agp_memory *, off_t); int (*unbind_memory)(agp_memory *); void (*enable)(u32); int (*acquire)(void); void (*release)(void); int (*copy_info)(agp_kern_info *); } drm_agp_t;
|
След което отново
Примерен код | danail@drakula:~/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1$sudo nvidia-installer
|
Този път стигнах стъпка напред - до следващия проблем. Ето края на лога на инсталатора:
Цитат | ........... -> done. -> Kernel module compilation complete. ERROR: Unable to load the kernel module 'nvidia.ko'. This is most likely because the kernel module was built using the wrong kernel source files. Please make sure you have installed the kernel source files for your kernel; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' rpm installed. If you know the correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' commandline option. -> Kernel module load error: insmod: error inserting './usr/src/nv/nvidia.ko': -1 Unknown symbol in module ERROR: Installation has failed. Please see the file '/var/log/nvidia-installer.log' for details. You may find suggestions on fixing installation problems in the README available on the Linux driver download page at www.nvidia.com.
|
Следващото стартиране на инсталатора чрез
Примерен код | danail@drakula:~/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1$sudo nvidia-installer --kernel-source-path=/usr/src/linux-2.6.13
|
доведе до същия резултат. Опитах в оригиналния непачнат драйвер в /home/danail/nv_stuff/NVIDIA-Linux-x86-1.0-6111-pkg1/usr/src/nv/os-agp.c да добавя дефиницията на липсващия тип и резултатът е аналогичен:
Цитат | ........... -> done. -> Kernel module compilation complete. ERROR: Unable to load the kernel module 'nvidia.ko'. This is most likely because the kernel module was built using the wrong kernel source files. Please make sure you have installed the kernel source files for your kernel; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' rpm installed. If you know the correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' commandline option. -> Kernel module load error: insmod: error inserting './usr/src/nv/nvidia.ko': -1 Unknown symbol in module ERROR: Installation has failed. Please see the file '/var/log/nvidia-installer.log' for details. You may find suggestions on fixing installation problems in the README available on the Linux driver download page at www.nvidia.com.
|
Та всякакви идеи и предложения са добре дошли.
Титла: nVidia Riva TNT + kernel 2.6.13
Публикувано от: the_real_maniac в Sep 30, 2005, 00:26
Пробвай без пач-а , просто ей така. Без да се замислям над инф,. , която си дал, но видях , че си ползвал някакъв пач,които не ми се видя познат 
Титла: nVidia Riva TNT + kernel 2.6.13
Публикувано от: Drakula в Sep 30, 2005, 00:32
Цитат (the_real_maniac @ Сеп. 30 2005,00:26) | Пробвай без пач-а , просто ей така. Без да се замислям над инф,. , която си дал, но видях , че си ползвал някакъв пач,които не ми се видя познат  |
Да, пробвах, но както съм писал в огромния си пост , не става. Причината е, че при компилация на модула не си открива типа drm_agp_t. След ръчното му добавяне с дефиницията му от 2.4.х ядрото модулът се компилира, но insmod пропада:
Цитат | -> Kernel module load error: insmod: error inserting './usr/src/nv/nvidia.ko': -1 Unknown symbol in module
|
|