2014年3月5日 星期三

在 Fedora 19 (3.13.5) 安裝 NVIDIA FX 5200 驅動程式

Fedora 19 系統安裝好後,曾經試過安裝 NVIDIA GeForce FX 5200 的驅動程式,當時測的版本是 173.14.37,好像 173.14.38 時也測過一次,不過沒有成功。因為有其它事情正在忙,就先改用 Fedora 隨附的 NVIDIA 驅動程式 nouveau 先撐著用。去年底 NVIDIA 釋出 173.14.39 版的驅動程式,又因忙著安裝一台 FreeBSD 伺服器,也擱置未測。
  最近成功地將 173.14.39 版驅動程式安裝在 Fedora 19 (kernel 3.12.11-201),想說應該可以用原廠的驅動程式了。想不到 Fedora 又更新核心到 3.13.5-101 版,剛裝沒多久的驅動程式又再重新編譯一次了。不過,這次沒有那麼成功,一直卡在一個 ACPI 的函式。到網路上搜尋許久,都沒有 173.14.39 版的修正資料。猜想這又是一個 Linux 核心改寫的問題,就往這方向去找。結果,就間接地找到修正的方法,不然怎麼會有這次的發文。修改的地方很簡單,只有一個位置,完整步驟(節錄部份前文步驟,方便讀者操作)的說明如下:

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

當然要從 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.39-pkg2.run -x
解開後,產生一個名為 NVIDIA-Linux-x86_64-173.14.39-pkg2 的目錄,之後的文章中將這個目錄稱為『原始碼目錄』。

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

修改的檔案整理如下:
目錄檔案名修改處的列號
原始碼目錄/usr/src/nvnvacpi.c259+3
上表中修改處的數字為列數,有 +? 表示加入的列數。因為檔案前面的修改都會加入文字,影響之後的列數,故建議由後面開始修改。

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

第 359 列,原文
     if (pNvAcpiObject->notify_handler_installed)
     {
         NV_ACPI_OS_WAIT_EVENTS_COMPLETE();

         // remove event notifier
         status = acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY, nv_acpi_event);
修改為
     if (pNvAcpiObject->notify_handler_installed)
     {
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
/* beginning with 3.13, acpi_remove_notify_handler() waits for events to finish */
         NV_ACPI_OS_WAIT_EVENTS_COMPLETE();
#endif

         // remove event notifier
         status = acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY, nv_acpi_event);
完成以上修改後,存檔備用。

三、執行編譯、安裝

接下來準備下編譯命令了,要先將工作目錄切換到『原始碼目錄』,再下命令
[root@Celeron-D NVIDIA-Linux-x86_64-173.14.36-pkg2]# ./nvidia-installer
所執行的這個 ./nvidia-installer 程式,就是 NVIDIA 原來的安裝步驟(解壓縮、編譯、安裝)的後兩個步驟,過程就不贅述。
    幾個相關的發文列在下面,有需要的讀者請自行參考:

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

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

 抑制 Fedora 原裝驅動程式

這裏有筆者發現有好幾個做法,把它們都列出來,讓讀者自己選用:
  • 在檔案『/etc/modprobe.d/blacklist.conf』末,加上『blacklist nouveau』這行敘述。
  • 在檔案『/boot/grub2/grub.conf』中,linux 開始那列命令最後,加上
    • nomodeset
    • modprobe.blacklist=nouveau
    • rdblacklist=nouveau
:第一個方法似乎一定要用,第二個方法只要挑一個有作用的即可。

五、重新開機

兩個畫面快照分享給讀者


:雖然是成功安裝了原廠的驅動程式,可惜還是不能滿足 GNOME 3 對於的硬體的需求,只能使用『MATE 桌面環境』。

後記:

  • 有空將系統升級成 Fedora 20 再試試看,所使用的 Linux 核心相同,應該是可以適用。

已測試版本:

  • Fedora 19: kernel 3.13.5-101, 3.13.5-103, 3.13.6-100, 3.13.7-100
  • NVIDIA FX 5200: 173.14.39 版驅動程式

參考資料:

沒有留言:

張貼留言

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