nvidia 173.14.36 graphic driver with Nvidia NV34 / FX5200 graphics device on 3.7.x and newer kernels
by
, 10-Mar-2013 at 09:48 (6819 Views)
.
Proprietary Nvidia 173.14.36 graphic driver with Nvidia NV34 / FX5200 graphics device on openSUSE-12.3 and 3.7.x (and newer) kernels.
This blog entry provides an explanation of one way to get the proprietary Nvidia 173.14.36 graphic driver working with a Nvidia NV34 / FX5200 graphics device on openSUSE-12.3 and/or 3.7.x (and newer) kernels. This has been tested on openSUSE-12.3 GM version and also on Tumbleweed with the 3.7.x kernel.
The FX5200 is part of the NV34 series graphic devices. The GNU/Linux drivers for this hardware are:
- nvidia proprietary graphic driver - this reuiqres a symbolic link and a patch to getting it working with the 3.7.x kernel
- nouveau graphic driver - this driver is in essence broken since the 3.7.x kernel (which introduced many updates to the nouveau driver)
- nv graphic driver - support for this driver for the NV34 (FX5200) has been stopped for some time. Due to a bug that will never be fixed (since suppot has stopped), the top resolution with the nv graphic driver is 1024x768
- vesa graphic driver - this is the driver that is typically run if the 'nomodeset' boot code is applied
Since the nouveau graphic driver for the NV34 is broken or all GNU/Linux distros with the 3.7.x or newer kernels (as documented in this thread ) it means any booting of a PC with the nvidia NV34 hardware (such FX500) needs to be done with either the VESA driver, or the 'nv' graphic driver, or the proprietary nvidia driver.
Unfortunately, there are problems in using the proprietary 173.14.36 nvidia driver with openSUSE-12.3 and also with some newer kernels (such as the 3.7.x kernels).
Prior to installing and using the 173.14.36 nvidia driver (as described below) I did try both the 'vesa' and the 'nv' driver. The 'vesa' was very slow and limited to 1024x768. The 'nv' while marginally faster, was still slow from a performance perspective, plus it was limited to 1024x768 and the FONT implementation with this driver was very bad.
Installing proprietary 173.14.36 graphic driver
I obtained the 173.14.36 driver as a .run file from the nvidia web site here:
Where in my case for my old PC's NV34 graphic hardware, I went for the 32-bit driver above. The same links above also note which hardware that proprietary nvidia driver supports.
The method I employed to install the nvidia driver (from the .run file) used to be called the hardway, or sometimes called the manual way. The driver initially would not build on my first couple of attempts, at which time I realized I needed to do some surfing and possibly tuning if I hoped to get this to work.
I already had kernel-source and kernel-syms installed on my 12.3 RC1 setup with the base-development pattern already installed.
To get the proprietary 173.14.36 driver to work I had to:
- Boot to runlevel-3 with nomodeset - for the following steps I booted the PC to run level 3 with the 'nomodeset' boot code.
.- Create Symbolic Link - I then apply a symbolic link (which is noted in many places elsewhere on this forum) using root permissions:
ie ...
as noted in other threads and in an openSUSE bug report, then with root permissions send the command:Code:cd /lib/modules/3.7.1-16-desktop/build/include/
... I do not know if the above is essential, but I do know that was not enough.Code:ln -s generated/uapi/linux
.
.- Patch the proprietary graphic driver .run file - Next, I patched the nvidia graphic driver NVIDIA-Linux-x86-173.14.36-pkg1.run file creating a new NVIDIA-Linux-x86-173.14.36-pkg1-custom.run file.
.
To do this I found the patch file 3.7_kernel_173.14.36.patch for the 173.14.36 driver here on a tech patterns site where this patch is originally based on a Fedora rpm here where I do NOT recommend running the Fedora rpm on openSUSE:
.
For the curious/masochistic, the patch looks like this:
and the commands I sent (as a regular user - NOT as root) to patch it were:Code:--- usr/src/nv/conftest.sh.orig +++ usr/src/nv/conftest.sh @@ -127,6 +127,7 @@ build_cflags() { if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]; then MACH_CFLAGS="$MACH_CFLAGS -I$HEADERS/asm-x86/mach-default" MACH_CFLAGS="$MACH_CFLAGS -I$SOURCES/arch/x86/include/asm/mach-default" + MACH_CFLAGS="$MACH_CFLAGS -I$HEADERS/arch/x86/include/uapi" fi if [ "$XEN_PRESENT" != "0" ]; then MACH_CFLAGS="-I$HEADERS/asm-$ARCH/mach-xen $MACH_CFLAGS" @@ -136,6 +137,7 @@ build_cflags() { if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]; then MACH_CFLAGS="$MACH_CFLAGS -I$HEADERS/asm-x86/mach-default" MACH_CFLAGS="$MACH_CFLAGS -I$SOURCES/arch/x86/include/asm/mach-default" + MACH_CFLAGS="$MACH_CFLAGS -I$HEADERS/arch/x86/include/uapi" fi if [ "$XEN_PRESENT" != "0" ]; then MACH_CFLAGS="-I$HEADERS/asm/mach-xen $MACH_CFLAGS" @@ -143,9 +145,12 @@ build_cflags() { fi CFLAGS="$BASE_CFLAGS $MACH_CFLAGS $OUTPUT_CFLAGS -I$HEADERS $AUTOCONF_CFLAGS" + CFLAGS="$CFLAGS -I$HEADERS -I$HEADERS/uapi" 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" + CFLAGS="$CFLAGS -I$OUTPUT/arch/x86/include/generated" + CFLAGS="$CFLAGS -I$OUTPUT/arch/x86/include/generated/uapi" fi if [ -n "$BUILD_PARAMS" ]; then CFLAGS="$CFLAGS -D$BUILD_PARAMS" --- usr/src/nv/nv.c.orig +++ usr/src/nv/nv.c @@ -2609,7 +2609,11 @@ int nv_kern_mmap( /* prevent the swapper from swapping it out */ /* mark the memory i/o so the buffers aren't dumped on core dumps */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0) + vma->vm_flags |= (VM_IO | VM_LOCKED | (VM_DONTEXPAND | VM_DONTDUMP)); +#else vma->vm_flags |= (VM_IO | VM_LOCKED | VM_RESERVED); +#endif } NV_VMA_FILE(vma) = file;
and that created the new file NVIDIA-Linux-x86-173.14.36-pkg1-custom.runCode:sh NVIDIA-Linux-x86-173.14.36-pkg1.run --apply-patch 3.7_kernel_173.14.36.patch
.- Perform a nominal nvidia graphic driver build - Then with root permissions I installed it with:
Code:sh NVIDIA-Linux-x86-173.14.36-pkg1-custom.run -q
which built the proprietary driver on my system. I rebooted with root permissions with the command "shutdown -r now" and upon rebooting the propriety graphic driver worked with my ancient nVidia GeForce FX5200 graphic hardware , breathing some more life into this very old graphic device.
Hopefully I made no syntax errors in retyping the commands above and I hope others find this helpful.
.