難題
我們的目標是要建立一台具有進階圖像效能的桌面系統(單一桌面橫跨兩個 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