在安裝 NVIDIA 驅動程式時,安裝程式會在 /etc/modprobe.d/ 這個目錄中,加入一個名為 nvidia-installer-disable-nouveau.conf 的檔案。其設定檔中,有列設定為『. . . modeset=0』,和在載入系統時的命令列中加入『nomodeset』,似乎有些關聯。為什麼是在 /etc/modprobe.d/ 這個目錄中?又檔案的內容有何意義?格式為何?
筆者覺得,這些關聯性有深入探討的必要,以下就是這些整理。
一、設定檔的格式說明與儲存目錄
這些設定檔一定要儲存在 /etc/modprobe.d/ 這個目錄,而且,設定檔的名稱有特別的規格,檔案名稱的『副檔名』一定要是『.conf』。否則,系統在載入過程時,不會去讀取這些設定。
[root@Core-i7 ~]# ll /etc/modprobe.d/ 總計 20 -rw-r--r--. 1 root root 16 6月 18 2015 blacklist-visor.conf -rw-r--r--. 1 root root 225 3月 20 22:52 lockd.conf -rw-r--r--. 1 root root 76 4月 6 10:00 nouveau-disable.conf -rw-r--r--. 1 root root 128 2月 14 14:20 nvidia.conf -rw-r--r--. 1 root root 30 6月 17 2015 openfwwf.conf
二、設定檔的用途
這些位在 /etc/modprobe.d/ 目錄下的設定檔,當『驅動程式模組』被載入時,系統會檢查這些設定檔。當有對應的設定檔存在時,系統會根據設定內容處理,如:抑制『驅動程式模組』,即關閉、不使用這個『驅動程式模組』。以 NVIDIA 安裝程式設定的 nvidia-installer-disable-nouveau.conf 為例,其內容為# generated by nvidia-installer其中的『blacklist nouveau』就是不載入 nouveau 這個『驅動程式模組』。
blacklist nouveau
options nouveau modeset=0
有時,是傳一些參數傳給『驅動程式模組』,其設定列的格式為
options 模組名稱 參數名=參數值 [[參數名=參數值] . . . ]要同時設定多個參數時,參數間要加一個空白,如
options nouveau noaccel=1 duallink=0可以取代〝解決「NVIDIA GeForce2 MX 400 顯卡用 nouveau 驅動會當機」〞中的設定。而〝在 Fedora 安裝 NVIDIA 驅動程式與自動升降頻設定〞的設定則可改為
options nvidia NVreg_RegistryDwords="PowerMizerEnable=0x1; PerfLevelSrc=0x3333; PowerMizerDefault=0x3; PowerMizerDefaultAC=0x3"是將『NVreg_RegistryDwords . . .』這些參數傳給 nvidia 這個『驅動程式模組』。參數的作用,請參考之前的發文〝在 Fedora 安裝 NVIDIA 驅動程式與自動升降頻設定〞。
註:這些設定在之前都是放在 /etc/X11/xorg.conf 這個 X-Window 的設定檔中,新版的 Xorg 不一定需要這個檔,在啟動 X-Windows 時,Xorg 會自動設定相關參數。因此,若仍放在 etc/X11/xorg.conf 這個檔,或在 /etc/X11/xorg.conf.d/ 目錄下 Xorg 的個別設定檔,則這些設定只能在 Xorg 啟動時,才會生效。
三、設定檔參數查詢
接下來,又怎麼知道有哪些參數呢?只要用『modinfo』這個命令就可以查詢這個『驅動程式模組』有哪些參數可用。或簡單一點,只顯示參數
[SiB@Core-i7 ~]$ modinfo nouveau filename: /lib/modules/4.4.7-300.fc23.x86_64/kernel/drivers/gpu/drm/nouveau/nouveau.ko.xz license: GPL and additional rights description: nVidia Riva/TNT/GeForce/Quadro/Tesla author: Nouveau Project alias: pci:v000012D2d*sv*sd*bc03sc*i* alias: pci:v000010DEd*sv*sd*bc03sc*i* depends: drm,drm_kms_helper,ttm,mxm-wmi,wmi,video,i2c-algo-bit intree: Y vermagic: 4.4.7-300.fc23.x86_64 SMP mod_unload parm: tv_norm:Default TV norm. Supported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J, hd480i, hd480p, hd576i, hd576p, hd720p, hd1080i. Default: PAL *NOTE* Ignored for cards with external TV encoders. (charp) parm: vram_pushbuf:Create DMA push buffers in VRAM (int) parm: nofbaccel:Disable fbcon acceleration (int) parm: tv_disable:Disable TV-out detection (int) parm: ignorelid:Ignore ACPI lid status (int) parm: duallink:Allow dual-link TMDS (default: enabled) (int) parm: pstate:enable sysfs pstate file, which will be moved in the future (int) parm: config:option string to pass to driver core (charp) parm: debug:debug string to pass to driver core (charp) parm: noaccel:disable kernel/abi16 acceleration (int) parm: modeset:enable driver (default: auto, 0 = disabled, 1 = enabled, 2 = headless) (int) parm: runpm:disable (0), force enable (1), optimus only default (-1) (int)
[SiB@Core-i7 ~]$ modinfo -p nouveau tv_norm:Default TV norm. Supported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J, hd480i, hd480p, hd576i, hd576p, hd720p, hd1080i. Default: PAL *NOTE* Ignored for cards with external TV encoders. (charp) vram_pushbuf:Create DMA push buffers in VRAM (int) nofbaccel:Disable fbcon acceleration (int) tv_disable:Disable TV-out detection (int) ignorelid:Ignore ACPI lid status (int) duallink:Allow dual-link TMDS (default: enabled) (int) pstate:enable sysfs pstate file, which will be moved in the future (int) config:option string to pass to driver core (charp) debug:debug string to pass to driver core (charp) noaccel:disable kernel/abi16 acceleration (int) modeset:enable driver (default: auto, 0 = disabled, 1 = enabled, 2 = headless) (int) runpm:disable (0), force enable (1), optimus only default (-1) (int)
已測試版本:
- Fedora: 22, 23
沒有留言:
張貼留言
感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)