难题

我们的目标是要创建一台具有高级图像性能的台式系统(单一桌面横跨两个 1600x1200 的 DVI/LCD 显示器),并提供以 Xen 虚拟机器测试新软件/系统的可能性。我们的挑战是要在主系统(Dom0)上运行 NVIDIA 驱动程序。在互联网上寻找解决方案时,三个主要问题浮现了出来:

  1. 文档都非常陈旧(数年以上)。
  2. 文档跳过某些步骤,令人难以跟随。
  3. 文档提供错综复杂的解决方案(例如:重新创建一个自定的内核)。

多数人想要一个方便、好用的系统,而不想涉及多重开机等方案 —— 又或者一个不稳定的系统。在笔者的经验中,NVIDIA 的(专利)驱动程序能恰当地支持这个图像设置。不采用 NVIDIA 的驱动程序会带来较低的效率,因此这个选择并不可取。截至本文,NVIDIA 的驱动程序组件并不支持 Xen 内核。当你尝试安装该组件时,它会作出这个声明并结束。

1. 硬件

设置前的状况

  1. 以 CentOS 5.4 x86_64 发行版本创建基本系统。
  2. 在安装时选择 Virtualization 群组,好让系统缺省以 Xen 内核开机。

  3. 这篇文章不会涵盖基本系统安装或 Xen 虚拟机器的应用。
  4. 请确定你在 /boot 及 / 上预留了足够空间给多套(最少四套)内核/内核开发工具。
  5. 我们推荐你在另一台机器上的终端機/SSH 工作阶段里执行以下步骤 —— 这样可简化剪贴指令。
  6. 以下步骤都须要由 root 用户执行。

炮制方法

采用所有更新:

yum -y update
yum clean all
reboot

删除过时的内核:

rpm -qa | grep kernel

只保留早新的 kernel-xenkernel-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 驱动程序上:

由于我们现正运用 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

zh/HowTos/Xen/NvidiaWithXen (last edited 2019-12-09 09:11:17 by anonymous)