难题
我们的目标是要创建一台具有高级图像性能的台式系统(单一桌面横跨两个 1600x1200 的 DVI/LCD 显示器),并提供以 Xen 虚拟机器测试新软件/系统的可能性。我们的挑战是要在主系统(Dom0)上运行 NVIDIA 驱动程序。在互联网上寻找解决方案时,三个主要问题浮现了出来:
- 文档都非常陈旧(数年以上)。
- 文档跳过某些步骤,令人难以跟随。
- 文档提供错综复杂的解决方案(例如:重新创建一个自定的内核)。
多数人想要一个方便、好用的系统,而不想涉及多重开机等方案 —— 又或者一个不稳定的系统。在笔者的经验中,NVIDIA 的(专利)驱动程序能恰当地支持这个图像设置。不采用 NVIDIA 的驱动程序会带来较低的效率,因此这个选择并不可取。截至本文,NVIDIA 的驱动程序组件并不支持 Xen 内核。当你尝试安装该组件时,它会作出这个声明并结束。
硬件
- Dell XPS 420 配备 Core 2 四核处理器
GeForce 8600 GTS —— PCIe 插卡
设置前的状况
- 以 CentOS 5.4 x86_64 发行版本创建基本系统。
在安装时选择 Virtualization 群组,好让系统缺省以 Xen 内核开机。
- 这篇文章不会涵盖基本系统安装或 Xen 虚拟机器的应用。
- 请确定你在 /boot 及 / 上预留了足够空间给多套(最少四套)内核/内核开发工具。
- 我们推荐你在另一台机器上的终端機/SSH 工作阶段里执行以下步骤 —— 这样可简化剪贴指令。
- 以下步骤都须要由 root 用户执行。
炮制方法
采用所有更新:
yum -y update yum clean all reboot
删除过时的内核:
rpm -qa | grep kernel
只保留早新的 kernel-xen、kernel-xen-devel(这是从系统里删除旧版内核的样例):
rpm -e kernel-xen-2.6.18-164.el5 kernel-xen-devel-2.6.18-164.el5
如此,你便只会留下:
[root@localhost ~]# rpm -qa | grep kernel kernel-xen-devel-2.6.18-164.9.1.el5 kernel-xen-2.6.18-164.9.1.el5 kernel-headers-2.6.18-164.9.1.el5
请安装非 Xen 的 kernel 及 kernel-devel:
yum -y install kernel kernel-devel
因此,我们现在备有 Xen 及对应的非 Xen 内核:
[root@localhost ~]# rpm -qa | grep kernel kernel-xen-devel-2.6.18-164.9.1.el5 kernel-devel-2.6.18-164.9.1.el5 kernel-2.6.18-164.9.1.el5 kernel-xen-2.6.18-164.9.1.el5 kernel-headers-2.6.18-164.9.1.el5
这个方法已经成功地应用在两代 NVIDIA 驱动程序上:
NVIDIA-Linux-x86_64-185.18.36-pkg2.run
NVIDIA-Linux-x86_64-190.53-pkg2
由于我们现正运用 Xen 内核,让我们先创建 NVIDIA 内核模块:
[root@localhost ~]# uname -r 2.6.18-164.9.1.el5xen
请以最便捷的方法下载 NVIDIA-Linux-x86_64-190.53-pkg2.run 这个组件(来自 http://www.nvidia.com )。
将文件转到 /tmp。
cd /tmp chmod +x NVIDIA-Linux-x86_64-190.53-pkg2.run ./NVIDIA-Linux-x86_64-190.53-pkg2.run --extract-only cd NVIDIA-Linux-x86_64-190.53-pkg2/usr/src/nv IGNORE_XEN_PRESENCE=y make SYSSRC=/lib/modules/`uname -r`/build module
你会接到很多警告,但最终:
NVIDIA: left KBUILD.
现在让我们将新的模块安装到 Xen 内核的函式库内:
mkdir -p /lib/modules/`uname -r`/kernel/drivers/video/nvidia/ cp -i nvidia.ko /lib/modules/`uname -r`/kernel/drivers/video/nvidia/ depmod -a modprobe nvidia
此刻,我们已经证实了 nvidia 这个模块可以被装入运作中的 Xen 内核里。NVIDIA 的其它软件仍未被装入,因此程序(仍然)不能正常运作。
以下这个步骤是选择性的,但它可防止系统投诉关于一个不能使用的 X 概述文件。这样做会令系统开机时进入一个非图像化、多用户模式(当然,你亦可以采用你喜爱的文字编辑器来完成这一步):
sed -i 's/^id:5:/id:3:/' /etc/inittab
现在请重新引导系统,但当你看见 Grub 的划面时,请停止开机(按 <space>)并选择非 Xen 的内核。
reboot
开机完成后,我们应该在运用非 Xen 的内核:
[root@localhost ~]# uname -r 2.6.18-164.9.1.el5
好,让我们循「正常途径」设置 NVIDIA 软件:
cd /tmp ./NVIDIA-Linux-x86_64-190.53-pkg2.run <Accept the license> <Yes- Install NVIDIA's 32-bit compatibility OpenGL libraries> <Yes- automatically update your X configuration file> <OK- Successfully updated.>
此刻,我们在非 Xen 的环境下已经完整地安装/设置了 NVIDIA 的软件,而且我们已经创建了 NVIDIA 的 Xen 内核模块并将它放置在 Xen 内核的函数库路径内。
让我们孤注一掷(设置图像界面自动引导):
sed -i 's/^id:3:/id:5:/' /etc/inittab
令次开机时,请启用 Xen 内核(应该依然是缺省的)。
reboot
你应该在系统引导时看见 NVIDIA 的引导划面。现在快捷地检查驱动程序是否已被装入:
[root@localhost ~]# dmesg | grep -i nvidia nvidia: module license 'NVIDIA' taints kernel. NVRM: loading NVIDIA UNIX x86_64 Kernel Module 190.53 Wed Dec 9 15:29:46 PST 2009
……并且我们正在运用 Xen 内核:
[root@localhost ~]# uname -r 2.6.18-164.9.1.el5xen
快捷地检查图像的效率:
glxgears
(在这个硬件组合下,可期望每秒 15,000 格)
为了让这个设置能运作,我们采用了一台 1280 x 1024 的 DVI 平面显示器及一个简单的配置文件。现在既然一切都安装妥当,我们可以这样来修改 X 的设置:
/usr/bin/nvidia-settings
每当一个新版的内核被安装在系统内,以上的步骤必须被重复。当你做过一、二次之后,整套步骤需时约 10 至 15 分钟。
更新(2012 年 8 月 9 日): 转转到不同硬件(采用 GeForce 9300 GE 图像卡的 Dell Optiplex 780)。它须要较新的 NVIDIA 驱动程序组件:
NVIDIA-Linux-x86_64-275.09.07.run
程序改变了,但只是微调。原有的:
cd NVIDIA-Linux-x86_64-190.53-pkg2/usr/src/nv
……目录被改为:
cd NVIDIA-Linux-x86_64-275.09.07/kernel
此程序还未在 CentOS 6 上测试,但它适用于 CentOS 5.8(所有更新截至上述日期)。
评论/推荐给本页:CrisRhea
Translation of revision 7