比較一下 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/nv | nvacpi.c | 259+3 |
原始碼目錄/usr/src/nv | nv-linux.h | 208+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 的某特定版本之套件
- 安裝 Fedora 「編譯『核心模組』」所需套件
- NVIDIA 在 Fedora 的安裝與自動升降頻設定
- 解決「FX 5200 讓 Fedora 17 的登入變得超級慢」的問題
- 在 Fedora 18 安裝 NVIDIA FX 5200 驅動程式
- 在 Fedora 19 (3.13.5) 安裝 NVIDIA FX 5200 驅動程式
四、重開機測試前的補安裝及設定
安裝完成後,在重開機前還有兩個步驟要做,待會重開機才會正確。 抑制 Fedora 原裝驅動程式
這裏有筆者發現有好幾個做法,把它們都列出來,讓讀者自己選用:- 在檔案『/etc/modprobe.d/blacklist.conf』末,加上『blacklist nouveau』這行敘述。
- 在檔案『/boot/grub2/grub.conf』中,linux 開始那列命令最後,加上
- nomodeset
- modprobe.blacklist=nouveau
- rdblacklist=nouveau
五、重新開機
兩個畫面快照分享給讀者註:雖然是成功安裝了原廠的驅動程式,可惜還是不能滿足 GNOME 3 對於的硬體的需求,只能使用『MATE 桌面環境』。
已測試版本:
Fedora 19: | kernel | 3.14.4-100, 3.14-13-100 |
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.)