2013-07-13
openSUSE Tumbleweed (Linux Kernel 3.10)安装Nvidia 显卡驱动

之前在《万恶的Windows 7 卡LOGO 及安全模式停顿在CLASSPNP.SYS 的侦错过程》中解决了Windows 7 的\Windows\system32\drivers\classpnp.sys 问题,最后是把openSUSE 的启动项给弄掉了,结果需要重新修复。经过一番折腾,终于是较为完美地解决了,谁知openSUSUE 无法进入桌面,表现的错误为:

X server died during startup. X server for display :0f cannot be started, session disable.

可能是某此使用的过程中,Tumbleweed 再次更新了kernel,结果没及时重新执行Nvidia 驱动的重新安装。本以为一切都像以前那样简单,事实上在重新安装Nvidia 的驱动时出现了错误:

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.

查看日志:

cat /var/log/nvidia-installer.log

提示我尝试通过下面的步骤来解决:

cd /usr/src/linux
make oldconfig
make prepare

结果在make prepare 的时候出现错误,于是把kernel-source 给安装上去:

sudo zypper in kernel-source

然后make prepare 顺利通过了。重复执行Nvidia 显卡驱动的安装:

cd /usr/local/src
sh NVIDIA-Linux-x86_64-319.32.run

结果问题一样。无法,Google 之,发现这是Nvidia 驱动无法支持最新的linux 3.10 内核,所以安装过程出错!需要通过patch给驱动程序打补丁!

参考:

因为我的显卡为GT 520M,所以使用的最新Nvidia 驱动程序为NVIDIA-Linux-x86_64-319.32.run。补丁文件取自《Building nvidia driver on kernel 3.9.0》及《Mailinglist Archive: opensuse-factory (667 mails)》,文件名为:pastie-7942599.diff。然后给此驱动程序patch 上补丁:

  • 解压NVIDIA 驱动程序
  • patch -p1 <$PATCHFILE
  • 安装驱动程序

sh NVIDIA-Linux-x86_64-325.08.run –extract-only
patch -p1 <$PATCHFILE
./nvidia-installer

至此在linux 3.10 内核上安装NVIDIA 显卡驱动程序顺利完成,不过在中途依然提示一错误:

File ‘/usr/lib64/xorg/modules/extensions/libglx.so’ is not a symbolic link.

但我无视之。重启,机器正常使用中。附上操作系统信息:

ying@linux-uwkx:~> uname -r 3.10.0-16.g3dcd746-desktop

ying@linux-uwkx:~> cat /etc/issue Welcome to openSUSE 12.3 “Dartmouth” - Kernel \r (\l).

ying@linux-uwkx:~> cat /etc/lsb-release LSB_VERSION=”core-2.0-noarch:core-3.2-noarch:core-4.0-noarch:core-2.0-x86_64:core-3.2-x86_64:core-4.0-x86_64”


顺便记录下启动修复的过程:

重要工具:grub4dos-0.4.3 阅读GRUB4DOS and Windows Vista bcdedit 的使用说明,加入名称为“GRUB for DOS”的启动项,menu.lst 相关内容为:

title Install OpenSUSE root (hd0,5) kernel /OS/linux/opensuse/linux vga=791 initrd /OS/linux/opensuse/initrd boot

解压openSUSE-12.3-DVD-x86_64.iso 至一fat32 分区,即上面的(hd0,5) 中,文件夹名称为opensuse。 准备工作完成,重启计算机,启动进入“GRUB for DOS”,选择“Install OpenSUSE”,其实就是一个openSUSE 的硬盘安装操作! 进入后,出现三个选项,大概意思为:

  • 安装或者升级openSUSE
  • 启动已经安装的系统
  • 修复模式

当时选择启动已经安装的系统,发现在启动的过程中无法扫描 / root 分区的信息,错误为:

fsck failed with error code 4

估计是在《解决万恶的Windows 7 卡LOGO 及安全模式停顿在CLASSPNP.SYS 》修复硬盘坏道时变更了磁盘信息,而选择“启动已安装的系统”,根分区已经挂载,所以fsck 不能执行,所以自动修复失效(那个修复模式,需要登陆?却提示密码错误?不会使用) 修复思路就是卸载/,然后使用fsck修复 选择“安装或者升级openSUSE”,安装介质当然就是Hard Device(又忘了名字?),输入上面准备在(hd0,5) 中的opensuse 文件夹,进入openSUSE 的安装引导,结果花屏,继续无视,ctl+atl+fx 进入Terminal,用fdisk 及mount 找到root 分区,执行fsck 修复! 完成! 启动openSUSE,安装grub 至mbr?并更新启动信息写入/boot/grub2/grub.cfg

grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg

输出:

ying@linux-uwkx:~> sudo /usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg root’s password: Generating grub.cfg … Found theme: /boot/grub2/themes/openSUSE/theme.txt Found linux image: /boot/vmlinuz-3.10.0-16.g3dcd746-desktop Found initrd image: /boot/initrd-3.10.0-16.g3dcd746-desktop No volume groups found Found Windows 7 (loader) on /dev/sda1 done

终于,电脑的整体修复工作彻底Over!!这次真是幸好有Google 及 openSUSE Forum & NVIDIA Developer Forms 的各位朋友!另外,一些资源也必须通过代理才能取得,感谢GAE 《Linux下用goagent使用Google GAE代理》。

Read More