http://www.nvnews.net/vbulletin/showthread.php?p=597243#post597243
Wenn Sie das System mit deaktiviertem ACPI zum Booten bewegen können, jedoch ACPI prinzipiell verwenden möchten, so lesen Sie bitte auch den Rest dieser Datei. Dort sind verschiedene Probleme im Zusammenhang mit ACPI sowie entsprechende Lösungsmöglichkeiten beschrieben.
Dazu müssen Sie eine Änderung an der Funktion mp_parse_prt() in der Datei arch/x86_64/kernel/mpparse.c vornehmen. Kommentieren Sie die folgende Codezeile aus:
irq = entry->link.index;
Diese finden Sie direkt vor folgendem Kommentar:
/* Dont set up the ACPI SCI because it's already up */
Suchen Sie im Bootprotokoll (Anzeige über dmesg) nach Meldungen wie diesen:
..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.
Wenn diese Meldungen angezeigt werden, ist Ihr System vom oben beschriebenen Fehler betroffen. Auf 2.6er Kernels können Sie den Fehler umgehen, indem Sie die Bootzeilenoption "acpi_skip_timer_override" übergeben. Alternativ dazu können Sie ACPI auch komplett deaktivieren (im BIOS oder mittels der Bootzeilenoption "acpi=off").
Dieser Fehler führt zu ungültigen Daten im Speicher, sobald ein PCI-Bus > 32 erkannt wird. Dadurch reagiert das System kurz nach Beginn des Installations- bzw. Bootvorgangs nicht mehr. Auf manchen Systemen lässt sich dieses Problem beheben, indem ACPI während dem Bootvorgang aktiviert bleibt.
Momentan sind keine Möglichkeiten bekannt, dieses Problem zu umgehen. Es liegt jedoch ein stabiler Kernel-Patch vor, der schon bald in neuen Releases der verschiedenen Distributionen zu finden sein sollte.
Red Hat Enterprise Linux, Updates 2 und 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 Version 8 mit Service Pack 3
32 Bit:
ftp://download.nvidia.com/linux/nforce/installdriverdisk/sles8/ia32/nvdriverdisk.suse.tgz
Dabei sind zwei Tabellen in der Datei drivers/ide/pci/amd74xx.c betroffen. Die erste Tabelle trägt den Namen amd_ide_chips und ist ein Array des struct-Typs amd_ide_chip. Ihre Einträge haben das folgende Format:
{ PCI_DEVICE_ID_XXXXXXXXXXX, 0xXX, AMD_UDMA_100 },
Suchen Sie in der Tabelle nach den folgenden Einträgen:
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
Wenn einer dieser Einträge fehlt, unterstützt der Treiber amd74xx.c die IDE- und SATA-Controller des nForce3/4 nicht. Um die Unterstützung hinzuzufügen, gehen Sie wie folgt vor:
Schritt 1: Definieren Sie die Makros für die PCI-Gerätekennungen.
Fügen Sie direkt vor der Tabelle amd_ide_chips die folgenden Zeilen ein:
#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
Schritt 2: Fügen Sie am Ende der Tabelle amd_ide_chips (allerdings noch vor dem Schlusseintrag "{ 0 },") die folgenden Einträge ein.
{ 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 },
Schritt 3: Weiters enthält der Treiber ein Array des struct-Typs pci_device_id, das den Namen amd74xx_pci_tbl trägt.
Dieses muss um einige Einträge erweitert werden, um die Unterstützung für den nForce3/4 zu aktivieren. Fügen Sie vor dem Schlusseintrag "{ 0, }," die folgenden Einträge ein:
{ 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 },
Die laufende Nummer (9 bis 18) am Ende eines jeden Eintrags bezieht sich auf die entsprechenden Einträge in der Tabelle amd_ide_chips (die Zählung beginnt bei 0). So sollte beispielsweise der neunte Eintrag in amd_ide_chips dem Eintrag PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE entsprechen. Wenn dies nicht der Fall sein sollte, müssen Sie die Eintragsnummern in amd74xx_pci_tbl entsprechend anpassen.
Schritt 4: Erstellen Sie eine neue Kernel-Build.