2016年5月1日 星期日

設定『驅動程式核心模組』的參數

在解決驅動程式安裝問題時,常看到在『開機選單』階段,按【e】鍵在以『linux16 . . .』或『linuxefi . . .』為首那列命令後,暫時性地加入參數,或是在 /boot/grub2/grub.conf 或 /boot/efi/EFI/fedora/grub.cfg 檔案中,永久性地加入這些設定。
  在安裝 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--.1rootroot166月182015blacklist-visor.conf
-rw-r--r--.1rootroot2253月2022:52lockd.conf
-rw-r--r--.1rootroot764月610:00nouveau-disable.conf
-rw-r--r--.1rootroot1282月1414:20nvidia.conf
-rw-r--r--.1rootroot306月172015openfwwf.conf
否則,系統在載入過程時,不會去讀取這些設定。

二、設定檔的用途

這些位在 /etc/modprobe.d/ 目錄下的設定檔,當『驅動程式模組』被載入時,系統會檢查這些設定檔。當有對應的設定檔存在時,系統會根據設定內容處理,如:抑制『驅動程式模組』,即關閉、不使用這個『驅動程式模組』。以 NVIDIA 安裝程式設定的 nvidia-installer-disable-nouveau.conf 為例,其內容為
# generated by nvidia-installer
blacklist nouveau
options nouveau modeset=0
其中的『blacklist nouveau』就是不載入 nouveau 這個『驅動程式模組』。
  有時,是傳一些參數傳給『驅動程式模組』,其設定列的格式為
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.)