2013年2月17日 星期日

在 Fedora 18 安裝 NVIDIA FX 5200 驅動程式

最近將平常使用的電腦從 Fedora 14 升級到 Fedora 18,Fedora 18 附的 nouveau 驅動程式在 Celeron-D 2.66GHz 的舊電腦實在是不夠,依前文 “在 Fedora 安裝 NVIDIA 驅動程式與自動升降頻設定” 安裝 FX 5200 的驅動程式,想不到問題一大堆:什麼找不到 version.h、編譯過程也出錯,不能建立「核心模組」。
    又得發揮研究精神,拜 Google 的廣大神通之賜,很快找到一堆資料。再經過閱讀、過濾、分析。可以確定問題是出在新的 Linux 核心,在 Kernel 3.7 以後的版本,為了某些理由,標頭檔的位置有做些調整,就是這些調整讓編譯失敗。
    網路上也有許多 Linux 高手提供許多解決辦法,不過就是沒有針對 FX 5200 的解答。只好自己參考相關資料,加上一大堆嘗試。終於,讓 FX 5200 在 Fedora 18 可以發揮它的全部功能了。

一、下載「驅動程式」、解壓縮

當然要從 NVIDIA 官方網站下載驅動程式才安全,在『Manual Driver Search』那一欄,以筆者的 FX5200 為例,選項為 GeForce→GeForce FX 5 Series→Linux 64-bit→Chinese (Traditional)。
    因為要修改編譯「核心模組」的腳本,及修改一個 C 程式檔,所以原有驅動程式的安裝不可以讓它自動作業,要分段執行。
    第一步先解壓縮,
[SiB@Celeron-D ~]$ sh NVIDIA-Linux-x86_64-173.14.36-pkg2.run -x
解開後,產生一個名為 NVIDIA-Linux-x86_64-173.14.36-pkg2 的目錄,之後的文章中將這個目錄稱為『原始碼目錄』。

二、下載「修補檔」參考、修改編譯腳本及程式

參考這個網站的「修補檔」,此「修補檔」並非用於修改 FX 5200 的驅動程式,所以不可直接用『修補』命令的方式偷懶。修改的檔案整理如下:
目錄檔案名修改處的列號
原始碼目錄/usr/src/nvconftest.sh22+1, 121, 145, 148
原始碼目錄/usr/src/nvcv.c18+3
上表中修改處的數字為列數,有 +? 表示加入的列數。因為檔案前面的修改都會加入文字,影響之後的列數,故建議由後面開始修改。

 檔案『原始碼目錄/usr/src/nv/conftest.sh』的修改(由後而前)

第 148 列,原文
CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include -I$OUTPUT/arch/x86/include/generated"
修改為
CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include -I$SOURCES/arch/x86/include/uapi -I$OUTPUT/arch/x86/include/generated -I$OUTPUT/arch/x86/include/generated/uapi"
第 145 列,原文
CFLAGS="$BASE_CFLAGS $MACH_CFLAGS $OUTPUT_CFLAGS -I$HEADERS $AUTOCONF_CFLAGS"
修改為
CFLAGS="$BASE_CFLAGS $MACH_CFLAGS $OUTPUT_CFLAGS -I$HEADERS -I$HEADERSA $AUTOCONF_CFLAGS"
第 121 列,原文
CFLAGS="$CFLAGS $OUTPUT_CFLAGS -I$HEADERS $AUTOCONF_CFLAGS"
修改為
CFLAGS="$CFLAGS $OUTPUT_CFLAGS -I$HEADERS -I$HEADERSA $AUTOCONF_CFLAGS"
第 22+1 列,原文
HEADERS=$SOURCES/include
再加入一列文字,修改為
HEADERS=$SOURCES/include
HEADERSA=$SOURCES/include/uapi
完成以上修改後,存檔備用。

 檔案『原始碼目錄/usr/src/nv/cv.c』的修改

第 18 列,原文為空白列,在這裏要加入這三列文字
#ifndef VM_RESERVED
#define VM_RESERVED (VM_DONTEXPAND | VM_DONTDUMP)
#endif
完成以上修改後,存檔備用。

三、執行編譯、安裝

先不要急著下編譯命令,在編譯之前還有些修改要做。還記得文章前頭說過,Linux 的核心在 3.7 版以後,標頭檔有些變動,才造成編譯失敗。因此,要先解決這個問題才可以編譯。以下操作都需先切換成 root 身份,修改的命令為
[root@Celeron-D ~]# ln -s 
/usr/src/kernels/3.7.8-202.fc18.x86_64/build/include/generated/uapi/linux/version.h /usr/src/kernels/3.7.8-202.fc18.x86_64/include/linux/version.h
這個命令將 version.h 從新目錄,建立鏈結到『驅動程式原始碼』認為 version.h 應該存在的目錄中。
    接下來準備下編譯命令了,要先將工作目錄切換到『原始碼目錄』,再下命令
[root@Celeron-D NVIDIA-Linux-x86_64-173.14.36-pkg2]# ./nvidia-installer
所執行的這個 ./nvidia-installer 程式,就是 NVIDIA 原來的安裝步驟(解壓縮、編譯、安裝)的後兩個步驟,過程就不贅述。
    幾個相關的發文列在下面,有需要的讀者請自行參考:

四、重開機測試前的補安裝及設定

安裝完成後,在重開機前還有兩個步驟要做,待會重開機才會正確。

 補安裝套件

需要補安的套件為 pangox-compat,這個套件在開啟『NVIDIA X Server Settings』(註:NVIDIA 顯示卡的設定程式,即畫面快照的)時會用到,如果沒有補安裝,就開不起來。安裝命令為
[root@Celeron-D ~]# yum install pangox-compat
:『NVIDIA X Server Settings』是 NVIDIA 顯示卡的設定程式,即畫面快照的第二張。

 抑制 Fedora 原裝驅動程式

這裏有筆者發現有好幾個做法,把它們都列出來,讓讀者自己選用:
  • 在檔案『/etc/modprobe.d/blacklist.conf』末,加上『blacklist nouveau』這行敘述。
  • 在檔案『/boot/grub2/grub.conf』中,linux 開始那列命令最後,加上 『nomodeset』。
  • 或是在檔案『/boot/grub2/grub.conf』中,linux 開始那列命令最後,加上『modprobe.blacklist=nouveau』。
注意:『  』只是為標示文字範圍,不要加進去。

兩個畫面快照分享給讀者


:雖然是成功安裝了原廠的驅動程式,可惜還是不能滿足 GNOME 3 對於的硬體的需求,只能在「後備模式(fallback mode)」使用。

後記:

  • 2013-2-19:今天 Fedora 18 的核心更新到 3.7.8-202 版,vermagic.h 消失的問題已經修正,所以將發文也做些修改。另外,也簡化『ln(縺結)』命令。
  • 2013-4-8:春假的最後一天發現,NVIDIA 釋出新版的驅動程式,經測試後更方便了。請參考 “GeForce FX 5200 驅動程式 --- 來自 NVIDIA 的支援”。

已測試版本:

  • Fedora 18: kernel 3.7.6-201, 3.7.7-201, 3.7.8-202
  • NVIDIA FX 5200: 173.1436 版驅動程式

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)