2014年5月25日 星期日

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

最近 Fedora 19 系統的核心升級到 3.14.4-100,接著編譯 NVIDIA GeForce FX 5200 的驅動程式(173.14.39),又出問題了。查看錯誤訊息,與上次的問題相似(請參考『在 Fedora 19 (3.13.5) 安裝 NVIDIA FX 5200 驅動程式』),也是與 ACPI 有關,有了上一次的經驗,事情就好辦了。
  比較一下 Linux 新舊版的核心程式,發現 3.13.11-100 核心程式的『acpi/acpi_drivers.h』的『標頭檔』中,原有引入『linux/acpi.h』和『acpi/acpi_bus.h』的那兩列指令在 3.14.4-100 中已經不見了。再去查看 NVIDIA GeForce FX 5200 驅動程式中,有引進『acpi/acpi_drivers.h』這個『標頭檔』的檔案,發現『/usr/src/nv/nv-linux.h』這個檔可能是問題所在。
  有了這些線索,再在網路上找一下相關訊息。最後修改的完整步驟(節錄部份前文,方便操作)整理、說明如下:

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

當然要從 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 的目錄,之後的文章中將這個目錄稱為『原始碼目錄』。

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

修改的地方,也參考 RPM Fusion 確認,整理如下:
目錄檔案名修改處的列號
原始碼目錄/usr/src/nvnvacpi.c259+3
原始碼目錄/usr/src/nvnv-linux.h208+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);

⑵ 檔案『原始碼目錄/usr/src/nv/nv-linux.h』的修改

第 208 列,原文
 #if defined(CONFIG_ACPI)
 #include <acpi/acpi.h>
 #include <acpi/acpi_drivers.h>
 #if defined(NV_ACPI_DEVICE_OPS_HAS_MATCH) || defined(ACPI_VIDEO_HID)
 #define NV_LINUX_ACPI_EVENTS_SUPPORTED 1
 #endif
修改為
 #if defined(CONFIG_ACPI)
 #include <acpi/acpi.h>
 #include <acpi/acpi_drivers.h>
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)
 #include <acpi/acpi_bus.h>
 #endif
 #if defined(NV_ACPI_DEVICE_OPS_HAS_MATCH) || defined(ACPI_VIDEO_HID)
 #define NV_LINUX_ACPI_EVENTS_SUPPORTED 1
 #endif
完成以上修改後,存檔備用。

三、執行編譯、安裝

接下來準備下編譯命令了,要先將工作目錄切換到『原始碼目錄』,再下命令
[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 19:kernel3.14.4-100, 3.14-13-100

kernel3.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.)