lunes, 7 de enero de 2013

Kernel 3.7.1 y Nvidia Driver (version.h does not exist)

Hace poco al querer instalar el driver 304.64 de Nvidia en el kernel 3.7.1 este me daba un error parecido al siguiente:

ERROR: The kernel header file '/usr/src/linux-headers-3.7.1/include/linux/version.h' does not exist. The most likely reason for this is that the kernel source files in '/usr/linux-headers-3.7-1' have not been configured.

Solucionar el problema fue sencillo, los pasos fueron los siguientes;

1.- Usé el siguiente parche para el driver de Nvidia.

Index: kernel/conftest.sh =================================================================== --- kernel/conftest.sh.orig +++ kernel/conftest.sh @@ -20,6 +20,7 @@ ARCH=$3 ISYSTEM=`$CC -print-file-name=include 2> /dev/null` SOURCES=$4 HEADERS=$SOURCES/include +HEADERSA=$SOURCES/include/uapi OUTPUT=$5 XEN_PRESENT=1 @@ -118,7 +119,7 @@ build_cflags() { fi fi - CFLAGS="$CFLAGS $OUTPUT_CFLAGS -I$HEADERS $AUTOCONF_CFLAGS" + CFLAGS="$CFLAGS $OUTPUT_CFLAGS -I$HEADERS -I$HEADERSA $AUTOCONF_CFLAGS" test_xen @@ -146,10 +147,10 @@ build_cflags() { fi fi - CFLAGS="$BASE_CFLAGS $MACH_CFLAGS $OUTPUT_CFLAGS -I$HEADERS $AUTOCONF_CFLAGS" + CFLAGS="$BASE_CFLAGS $MACH_CFLAGS $OUTPUT_CFLAGS -I$HEADERS -I$HEADERSA $AUTOCONF_CFLAGS" if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]; then - CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include -I$OUTPUT/arch/x86/include/generated" + CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include -I$SOURCES/arch/x86/include/uapi -I$OUTPUT/arch/x86/include/generated -I$OUTPUT/arch/x86/include/generated/uapi" elif [ "$ARCH" = "arm" ]; then CFLAGS="$CFLAGS -I$SOURCES/arch/arm/include -I$OUTPUT/arch/arm/include/generated" fi Index: kernel/nv-mmap.c =================================================================== --- kernel/nv-mmap.c.orig +++ kernel/nv-mmap.c @@ -14,6 +14,11 @@ #include "os-interface.h" #include "nv-linux.h" +/* Fix needed for change in VM_xxx flags */ +#ifndef VM_RESERVED +# define VM_RESERVED (VM_DONTEXPAND | VM_DONTDUMP) +#endif + /* * The 'struct vm_operations' open() callback is called by the Linux * kernel when the parent VMA is split or copied, close() when the

Descarga: Parche

2.- Aplicar el parche al driver

./NVIDIA-Linux-x86-304.64.run --apply-patch patch_nvidia_304_60.run_for_3.7.1

Esto creará una modificación del driver que se llamará "NVIDIA-Linux-x86-304.64-custom.run", este último es el que se instalará.

3.- Luego de compilar el kernel 3.7.1 se crea un enlace simbólico.

ln -s /usr/src/linux-3.7.1/include/generated/uapi/linux/version.h /usr/src/linux-3.7.1/include/linux/version.h

Para esto se deben conservar las fuentes del kernel.

En teoría ya pueden instalar el driver modificado en el kernel 3.7.1, en mi caso funcionó sin ningún problema.

Fuente: Foro de opensuse.

No hay comentarios: