Konfiguracja kart nVidia w Gentoo
1.
Wprowadzenie
Dostępne w drzewie Portage sterowniki nVidia, wydane przez nVidia są budowane
niezależnie od sterowników dostarczanych z jądrem Linux. Zawierają zamknięty
kod, który poprawnie działa z kartami. Są dwa rodzaje sterowników: moduły jądra
lub te z xorg-x11. Obie części są dostępne w jednym pakiecie. Ponieważ nVidia
pakowała swoje sterowniki, konieczne będzie dokonanie pewnego wyboru przed
instalacją.
Pakiet nvidia-driver zawiera najnowsze sterowniki do wszystkich
kart firmy nVidia. W zależności od tego jak bardzo stara jest nasza karta,
możemy wybierać spośród kilku dostępnych wersji. Do wykrycia karty i
zainstalowania odpowiednich sterowników pakiet ten używa pliku eclass.
2.
Zgodność sterowników
Która wersja?
Pakiet nvidia-drivers wspiera cały wachlarz dostępnych kart spod znaku
nVidia. Zależnie od posiadanej karty, dostępne są różne wersje.
Nowsze karty, takie jak GeForce w serii 9, 8, 7 i 6, korzystają z najnowszych
sterowników.
Karty GeForce FX5 powinny działać na sterownikach serii 173.x takich jak na
przykład nvidia-drivers-173.14.15. Dlatego dla tych kart należy
zamaskować >=x11-drivers/nvidia-drivers-174.00 w pliku
/etc/portage/package.mask. Zapobiegnie to instalacji nowszych i
niekompatybilnych z kartą wersji sterowników.
Starsze karty jak serie GeForce 3 lub GeForce 4 wymagają sterowników 96.x. Dla
tych kart należy zamaskować >=x11-drivers/nvidia-drivers-97.00 w
pliku /etc/portage/package.mask.
Stare karty bazowane na NV2x (takie jak TNT, TNT2, GeForce oraz GeForce 2)
wymagają starszego sterownika 71.x (takiego jak nvidia-drivers-71.86.01).
Dla tych kart należy zamaskować >=nvidia-drivers-87.00 w pliku
/etc/portage/package.mask.
Kompatybilność sterownika z używaną kartą można sprawdzić w pliku README dla
konkretnego wydania i
architektury sterowników.
3.
Konfiguracja karty
Konfiguracja jądra
Tak jak wspominaliśmy wcześniej sterowniki nVidii zawierają moduły jądra, które
musimy włączyć do jądra. By tego dokonać jądro musi obsługiwać ładowanie
modułów. Jeśli użyto genkernel all, aby skonfigurować jądro wszystko
powinno być odpowiednio ustawione. Jeśli nie, należy sprawdzić dwa razy
konfigurację jądra i upewnić się, że mamy to włączone:
Listing 3.1: Włączanie obsługi ładowania modułów jądra |
Loadable module support --->
[*] Enable loadable module support
|
Musimy także włączyć obsługę Memory Type Range Register:
Listing 3.2: Włączanie MTRR |
Processor and Features --->
[*] MTRR (Memory Type Range Register) support
|
Opcjonalnie, jeśli posiadana karta jest AGP, można włączyć agpgart w
jądrze (wkompilowane na stałe lub jako moduł). Możliwe jest też użycie
implementacji agpgart, nazwanej NvAGP. Na niektórych systemach
działa on lepiej niż ten wbudowany w kernel, na innych gorzej. Należy samemu się
przekonać i dokonać wyboru. W razie wszelkich niepewności najbezpieczniej jest
użyć wersji wbudowanej w kernel.
Listing 3.3: Włączanie agpgart |
Device Drivers --->
Graphics Support --->
-*- /dev/agpgart (AGP Support) --->
|
Uwaga:
Na systemach z architekturą amd64, IOMMU kontroluje ustawienia agpgart.
|
Uwagi do architektur
Ważne:
Dla procesorów x86 oraz AMD64, sterownik dostarczany przez jądro konfliktuje z
binarnym sterownikiem dostarczanym przez producenta. Podczas kompilacji dla tych
architektur należy całkowicie usunąć wsparcie dla sterowników dostarczanych
przez jądro, tak jak to pokazano poniżej:
|
Listing 3.4: Usunięcie sterownika z jądra |
Device Drivers --->
Graphics Support --->
<*> Support for frame buffer devices --->
< > nVidia Framebuffer Support
< > nVidia Riva support
|
Alternawym buforem ramki jest uvesafb, zaawansowany bufor
ramki. Można wkompilować go na stałe w jądro lub dodać jako moduł. Oto
przykład dla pierwszej z tych opcji:
Listing 3.5: Włączanie obsługi uvesafb |
Device Drivers --->
Graphics Support --->
<*> Support for frame buffer devices --->
<*> Userspace VESA VGA graphics support
|
Możemy również wypróbować VESA:
Listing 3.6: Włączanie VESA |
Device Drivers --->
Graphics Support --->
<*> Support for frame buffer devices --->
[*] VESA VGA graphics support
|
Więcej informacji można znaleźć w odpowiednim dla wybranego bufora ramki pliku w
katalogu /usr/src/linux/Documentation/fb/.
Kontynuowanie konfiguracji jądra
Ebuild nvidia-drivers automatycznie rozpoznają wersję używanego kernela
w oparciu o dowiązanie symboliczne /usr/src/linux/. Z tego powodu
należy się upewnić, że dowiązanie to wskazuje na prawidłowe źródła jądra.
Szczegóły dotyczące konfiguracji jądra znajdują się w dokumencie Podręcznik Gentoo.
Jeśli eselect nie jest zainstalowany, należy tego dokonać poprzez
polecenie emerge. W przypadku gdy w użyciu jest gentoo-sources-2.6.18-r4,
lista konfiguracji może wyglądać tak:
Listing 3.7: Sprawdzanie dowiązania do źródeł jądra |
# eselect kernel list
Available kernel symlinks targets:
[1] linux-2.6.18-gentoo-r4 *
[2] linux-2.6.20-gentoo-r7
[3] linux-2.6.20-gentoo-r8
|
W powyższym przykładzie widać, że gwiazdką (*) jest oznaczona wersja
linux-2.6.18-gentoo-r4, co wskazuje na cel dowiązania symbolicznego
/usr/src/linux.
Jeśli dowiązanie nie jest prawidłowe to należy je poprawić poprzez podanie
numeru pożądanej wersji źródeł kernela.
Listing 3.8: Tworzenie lub uaktualnianie dowiązania symbolicznego /usr/src/linux |
# eselect kernel set 1
|
Instalacja sterowników
Teraz jest odpowiednia chwila na instalację sterowników.
Listing 3.9: Instalacja sterowników nVidii |
# emerge nvidia-drivers
|
Uwaga:
Nowsze sterowniki mogą być zainstalowane z flagą USE gtk. Zainstaluje to
media-video/nvidia-settings - poręczne narzędzie do monitorowania i
konfigurowania kilkunastu funkcji związanych z używaną kartą.
|
Ważne:
Za każdym razem gdy kompilujemy
jądro musimy ponownie uruchomić polecenie emerge nvidia-drivers w celu
ponownego zainstalowania modułów. Lepszą opcją aby trzymać moduły instalowane
przez zewnętrzne pakiety (takie jak nvidia-drivers), jest zainstalowanie
sys-kernel/module-rebuild. Jeśli pakiet ten jest już zainstalowany,
wystarczy uruchomić polecenie module-rebuild populate aby stworzyć listę
pakietów, które wymagają przebudowy. Kiedy to nastąpi, można wykonać polecenie
module-rebuild rebuild aby przebudować moduły dla nowego jądra.
|
Gdy instalacja się zakończy wpisujemy modprobe nvidia, aby załadować
moduł jądra do pamięci. Jeśli jest to aktualizacja do nowszej wersji, należy
najpierw wyładować moduł.
Listing 3.10: Ładowanie modułu jądra |
# lsmod | grep nvidia && rmmod nvidia
# modprobe nvidia
|
Dobrym pomysłem i wygodnym rozwiązaniem jest aby działo się to automatycznie
przy każdym uruchomieniu systemu. Aby to osiągnąć wystarczy dodać linijkę
nvidia do pliku /etc/modules.autoload.d/kernel-2.6 (lub
kernel-2.4). Później należy wykonać polecenie
update-modules.
Ważne:
Jeśli agpgart zostało skompilowane jako moduł, będzie trzeba dodać je do
/etc/modules.autoload.d/kernel-2.6.
|
Listing 3.11: Uruchamianie update-modules |
# update-modules
|
Konfiguracja Serwera X
Po instalacji odpowiednich sterowników należy skonfigurować serwer X, aby
używał sterownika nvidia zamiast domyślnego nv.
Otwieramy /etc/X11/xorg.conf ulubionym edytorem (np. nano
lub vim) i przechodzimy do sekcji Device. Należy tam odpowiednio
zmienić linię Driver:
Listing 3.12: Zamiana nv na nvidia w konfiguracji serwera X |
Section "Device"
Identifier "nVidia Inc. GeForce2"
Driver "nvidia"
VideoRam 65536
EndSection
|
W sekcji Module należy upewnić się, że moduł glx będzie ładowany i
że moduł dri nie będzie wczytywany:
Listing 3.13: Uaktualnianie sekcji Module |
Section "Module"
# Load "dri"
Load "glx"
EndSection
|
Następnie w sekcji Screen należy upewnić się, że dyrektywa
DefaultDepth jest ustawiona na 16 lub 24 lub w podsekcjach
Display mamy Depth ustawione tylko i wyłącznie na 16 lub 24.
Bez tego rozszerzenia nVidia GLX nie zostaną uruchomione.
Listing 3.14: Uaktualnianie sekcji Screen |
Section "Screen"
DefaultDepth 16
Subsection "Display"
EndSection
|
Na koniec uruchamiamy polecenie eselect, co sprawi, że serwer X będzie
używał bibliotek GLX nVidii:
Listing 3.15: Uruchamianie opengl-update |
# eselect opengl set nvidia
|
Dodawanie użytkownika do grupy video
Należy dodać odpowiednich użytkowników do grupy, która ma dostęp do plików
urządzenia nVidia:
Listing 3.16: Dodawanie użytkownika do grupy video |
# gpasswd -a username video
|
Może to nie być potrzebne, jeśli używa się udeva, ale nie zaszkodzi to
również, a pewność pozostanie.
Sprawdzanie karty
Aby sprawdzić kartę nVidia, należy uruchomić serwer X i wpisać polecenie
glxinfo. Powinna pokazać się informacja, że bezpośrednie
renderowanie (ang. direct rendering) jest włączone:
Listing 3.17: Sprawdzanie statusu bezpośredniego renderowania |
$ glxinfo | grep direct
direct rendering: Yes
|
Do sprawdzania ilości FPS korzystamy z programu glxgears.
Włączanie obsługi nvidia
Niektóre programy, takie jak np. mplayer czy xine-lib
wykorzystują flagę USE o nazwie xvmc, która włącza XvMCNVIDIA,
przydatną podczas oglądania filmów w bardzo dużej rozdzielczości. Aby
ją uaktywnić należy dodać wpis xvmc do zmiennej USE w pliku
/etc/make.conf lub dodać jako flagę wyłącznie dla
media-video/mplayer lub media-libs/xine-lib w pliku
/etc/portage/package.use.
Jest również kilka pakietów, które używają flagi nvidia, więc dobrym
pomysłem jest dodanie jej do /etc/make.conf.
Na koniec należy wpisać polecenie emerge -uD --newuse world,
które przebuduje wszystkie programy, tak by mogły korzystać z nowych
ustawień flag USE.
Korzystanie z narzędzi do konfiguracji NVidia
nVidia dostarcza również narzędzie do konfiguracji. Aplikacja ta monitoruje i
zmienia ustawienia graficzne bez konieczności restartowania serwera X. Jest
dostępna w drzewie Portage jako media-video/nvidia-settings. Jak już
wspomniano, będzie on zainstalowany automatycznie przy instalacji sterowników z
flagą gtk dodaną do /etc/make.conf lub
/etc/portage/package.use.
4.
Rozwiązywanie problemów
Co zrobić, aby działała grafika 2D na komputerach z 4GB (lub więcej) pamięci
Jeśli pojawią się problemy z przyspieszeniem grafiki 2D prawdopodobnie nie
można zestawić zakresu kombinacji zapisu (ang. write-combining ranges) z MTRR.
Aby się upewnić, należy sprawdzić zawartość /proc/mtrr:
Listing 4.1: Sprawdzanie czy mamy włączone kombinacje zapisu |
# cat /proc/mtrr
|
W liniach powinno być napisane "write-back" lub "write-combining". Jeśli
tak nie jest to trzeba przestawić ustawienie w BIOS-ie aby to naprawić.
Uruchamiamy ponownie komputer i wchodzimy do BIOS-u, znajdujemy tam ustawienia
MTRR (prawdopodobnie w "Ustawieniach CPU") i zmieniamy ustawienie z "ciągłe"
(ang. continuous) na "dyskretne" (ang. discrete), a następnie zapisujemy i
uruchamiamy Linuksa. Zniknie wpis "uncachable", a przyspieszenie 2D zacznie
działać bez zarzutu.
Kiedy ładuję moduł dostaję ostrzeżenie, że nie ma takiego urządzenia ("no such
device").
Z reguły zdarza się to w sytuacji gdy nie mamy odpowiedniej karty
graficznej. Należy się upewnić, że posiadamy kartę graficzną opartą o GPU
NVidia (możemy tego dokonać przy użyciu polecenia lspci).
Jeśli jesteśmy pewni, że posiadamy kartę graficzną NVidia, należy sprawdzić
ustawienia BIOS-u i upewnić się, że pozycja Assign IRQ to VGA jest
poprawnie ustawiona.
5.
Konfiguracja dla ekspertów
Dokumentacja
Pakiet sterownika nvidia zawiera mnóstwo użytecznej dokumentacji, która jest
instalowana do katalogu /usr/share/doc i może być odczytana przy pomocy
następującego polecenia:
Listing 5.1: Przeglądanie dokumentacji NVIDIA |
$ less /usr/share/doc/nvidia-drivers-*/README.txt.gz
|
Parametry modułów jądra
Moduł nvidia można uruchomić z jedną z kilku opcji, które pozwalają
dostosować jego zachowanie do naszych potrzeb. Aby dodać lub usunąć te opcje
należy wyedytować plik /etc/moprobe.d/nvidia.conf. Po wprowadzeniu zmian
należy uruchomić polecenie update-modules i przeładować moduł.
Listing 5.2: Dostosowywanie ustawień |
# nano -w /etc/modprobe.d/nvidia.conf
# update-modules
# modprobe -r nvidia
# modprobe nvidia
|
Zaawansowana konfiguracja X-ów
Nakładka GLX również posiada wiele opcji, które można dostosować do własnych
potrzeb. Za ich pomocą można np. zmienić zachowanie wyjścia TV, wykrywanie
częstotliwości monitora itp. Po raz kolejny dostępne opcje są opisane w
szczegółowej dokumentacji.
Aby używać którejś z tych opcji należy dopisać ją w odpowiednim miejscu w pliku
konfiguracyjnym serwera X (zwykle jest to /etc/X11/xorg.conf). Na
przykład, aby wyłączyć wyświetlanie logo nvidii przy każdym starcie serwera X
należy wpisać:
Listing 5.3: Dodatkowe opcje konfiguracyjne |
Section "Device"
Identifier "nVidia Inc. GeForce2"
Driver "nvidia"
Option "NoLogo" "true"
VideoRam 65536
EndSection
|
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|