Back

NVIDIA nForce Linux: znane problemy

 
 

 

·         Skype zawiesza się, jeśli używamy sterownika nvsound z pakietu 1.0-0301

Skype może się zawiesić, jeśli używamy sterownika nvsound z pakietu 1.0-0301. Problem ten zostanie rozwiązany w następnej edycji sterowników. Do tego czasu użyć możemy łaty, która naprawia sterowniki 1.0-0301, osiągalnej pod adresem:

http://www.nvnews.net/vbulletin/showthread.php?p=597243#post597243

·         Kernele 2.4.x zawieszają się lub niektóre urządzenia są niedostępne

Błędy w obsłudze ACPI w kernelach 2.4.x mogą powodować problemy z instalacją systemów oraz/lub ich uruchamianiem. W przypadku wystąpienia takich problemów można próbować wyłączyć obsługę ACPI. Zrobimy to dodając parametr „acpi=off” w pliku konfiguracyjnym bootladera lub podczas startu systemu, albo też zmieniając ustawienia BIOS-u.

Jeśli wyłączenie obsługi ACPI rozwiązuje problem, ale chcielibyśmy nadal używać tej funkcji, sprawdźmy inne związane z ACPI problemy i ich rozwiązania na niniejszej liście.

·          Kernele 2.4.x na systemach AMD64 zawieszają się, jeśli ACPI jest włączone

Jeśli bezpośrednio przed zawieszeniem znajdziemy w logu informacje o przekierowaniu przerwań urządzeń do IRQ0, wtedy przyczyną może być błąd w kernelach x86_64 dotyczący przekazywania przerwań. Patch naprawiający ten błąd został już opracowany, jednak nie jest jeszcze używany we wszystkich dystrybucjach. W takim przypadku możemy albo wyłączyć obsługę ACPI (w BIOS-ie lub ustawiając parametr „acpi=off”), albo ręcznie poprawić jądro.

Poprawka modyfikuje funkcję mp_parse_prt() w pliku arch/x86_64/kernel/mpparse.c. Możemy ręcznie poprawić ten plik wykomentowując linię:

irq = entry->link.index;

poprzedzającą komentarz:

/* Dont set up the ACPI SCI because it's already up */

 

·         Karta sieciowa i inne urządzenia losowo przestają działać jeśli włączona jest obsługa ACPI

Ten problem spowodowany może być nieprawidłowym wpisem do tablicy ACPI, który powoduje nieprawidłową konfigurację przerwań zegara.

Jeśli konsola logowania (osiągalna przy użyciu dmesg) zawiera takie wpisy jak:

..MP-BIOS bug: 8254 timer not connected to IOAPIC
...trying to set up timer (IRQ0) through the 8259A . failed.
...trying to set up timer as Virtual Wire IRQ... failed.
...trying to set up timer as ExtINT IRQ... works.

mamy wtedy do czynienia z błędnym wpisem do tablicy ACPI. W przypadku kerneli 2.6, problem ten możemy rozwiązać dodając parametr bootowania „acpi_skip_timer_override”. Innym rozwiązaniem jest wyłączenie obsługi ACPI w BIOS-ie lub użycie parametru „acpi=off”.

·         Kernele 2.6.x nie startują na niektórych systemach

Istnieje błąd w obsłudze tablic MP w kernelach 2.6.x, który uniemożliwia instalację i start systemu w niektórych komputerach. W tej chwili jedynie systemy z chipsetem nForce4 MP powodują występowanie tego problemu.

Błąd ten powoduje błąd pamięci w trakcie rozpoznawania urządzeń PCI wpiętych do złącz o numerach wyższych niż 32, co prowadzi do zawieszenia systemu na wczesnym etapie instalacji lub startu systemu. W niektórych przypadkach pomocne może się okazać wyłączenie ACPI.

W tej chwili nie są znane żadne rozwiązania tego problemu, ale odpowiednia łata została już opracowana i powinna się pojawić w przyszłych dystrybucjach.

·         Starsze dystrybucje nie mają ID kontrolera pamięci masowych w chipsetach nForce3/4

Niektóre starsze dystrybucje nie mają ID kontrolera IDE/SATA w chipsetach nForce3/4. Ma to następujące konsekwencje:

    1. Kontrolery SATA nie są obsługiwane podczas instalacji systemu. Problem ten można rozwiązać używając podczas instalacji odpowiedniego sterownika do dysku. NVIDIA udostępnia obrazy tych sterowników, do pobrania z anonimowego FTP, dla następujących dystrybucji:


Red Hat Enterprise Linux, poprawki 2 i 3

32-bit:

ftp://download.nvidia.com/linux/nforce/installdriverdisk/rhel3/ia32/nvdriverdisk.tar.gz

64-bit:

ftp://download.nvidia.com/linux/nforce/installdriverdisk/rhel3/x86_64/nvdriverdisk.tar.gz


SuSE Linux Enterprise Server 8, z Service Pack 3

32-bit:

ftp://download.nvidia.com/linux/nforce/installdriverdisk/sles8/ia32/nvdriverdisk.suse.tgz

    1. Sterownik IDE nie będzie w stanie użyć trybu DMA, przez co będzie miał niższą wydajność. Ten problem można rozwiązać, uzupełniając sterownik o odpowiednie ID urządzeń.

By poprawić sterownik, konieczna będzie modyfikacja dwóch tablic w pliku drivers/ide/pci/amd74xx.c. Pierwsza z nich jest tablicą struktur amd_ide_chip zwanych amd_ide_chips. Każdy wpis ma następującą formę:

{ PCI_DEVICE_ID_XXXXXXXXXXX, 0xXX, AMD_UDMA_100 },

Jeśli w tablicy brakuje którejkolwiek z następujących ID:

    PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE
    PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE
    PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA
    PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2
 
    PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE
    PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA
    PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2
 
    PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE
    PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA
    PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2
 

oznacza to, że sterownik amd74xx.c nie obsługuje kontrolerów IDE i SATA chipsetów nForce3/4. By dodać taką obsługę, należy wprowadzić następujące zmiany:

Krok 1: Zdefiniuj makra ID urządzeń PCI.

Zaraz przed tablicą amd_ide_chips dodaj następujące linie:

    #define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE        0x00d5
    #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE       0x00e5
    #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA      0x00e3
    #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2     0x00ee
 
    #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE   0x0053
    #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA  0x0054
    #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2 0x0055
 
    #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE   0x0035
    #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA  0x0036
    #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2 0x003e
 

Krok 2: Dodaj wpisy na końcu tablicy amd_ide_chips (ale przed końcowym wpisem "{ 0 },").

    { PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE, 0x50, AMD_UDMA_133 },
    { PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE, 0x50, AMD_UDMA_133},
    { PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA, 0x50, AMD_UDMA_133},
    { PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2, 0x50, AMD_UDMA_133 },
    { PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE, 0x50, AMD_UDMA_133},
    { PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA, 0x50, AMD_UDMA_133},
    { PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2, 0x50, AMD_UDMA_133 },
    { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, 0x50, AMD_UDMA_133},
    { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA, 0x50, AMD_UDMA_133},
    { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2, 0x50, AMD_UDMA_133 },

Krok 3: Dodaj wpisy do pliku amd74xx_pci_tbl (ale przed końcowym wpisem "{ 0 },")

Znajdziesz tutaj tablicę struktur pci_device_id zwaną amd74xx_pci_tbl. By zapewnić obsługę nForce3/4 należy tu dopisać:

    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 13 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 14 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 15 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 16 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 17 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18 },

Numer na końcu każdego wpisu (od 9 do 18) odnosi się do odpowiadających im wpisów (numerowanych od 0) w tabeli amd_ide_chips. Na przykład, 9 z kolei wpis w tabeli amd_ide_chips, (zaczynając od 0) powinien odpowiadać wpisowi PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE. Jeśli nie odpowiada, numery we wpisach w tabeli amd74xx_pci_tbl należy odpowiednio dostosować.

Step 4: Zrekompiluj jądro.



 
 
 
 
FacebookTwitterGoogle+Nasza KlasaLinkedIn