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.
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.
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. |
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 (Należy się upewnić czy prawidłowa wersja kernela jest oznaczona przez gwiazdkę) |
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 |
(Należy podać numer odpowiedniej wersji kernela) # eselect kernel set 1 |
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
|
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.
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.
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.
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.
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
|
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/modules.d/nvidia. Po wprowadzeniu zmian należy uruchomić polecenie update-modules i przeładować moduł.
Listing 5.2: Dostosowywanie ustawień |
(Otwieramy /etc/modules.d/nvidia ulubionym edytorem) # nano -w /etc/modules.d/nvidia (Aktualizujemy informacje o sterownikach) # update-modules (Usuwamy moduł z pamięci...) # modprobe -r nvidia (...i ładujemy go na nowo) # 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.