Certains bugs dans le support de
l’ACPI du noyau 2.4.x peuvent affecter l’installation et/ou le démarrage de
l'OS. Si vous rencontrez ces problèmes,
l’une des premières méthodes à suivre pour les éliminer consiste à désactiver
l’ACPI. Vous pouvez le faire depuis la ligne de démarrage en utilisant
l'option « acpi=off » ou en modifiant les paramètres du BIOS.
Si désactiver ACPI corrige le démarrage mais que vous souhaitez travailler avec
ACPI activé, consultez les autres points de cette liste
relatifs aux problèmes et solutions des problèmes liés à ACPI.
Si avant le blocage le suivi de
démarrage de la console du noyau indique que les interruptions de périphériques
sont dirigées sur IRQ0, le blocage peut être
dû à un bug dans la gestion du noyau x86_64 de l'orientation des interruptions
de l'ACPI. Un patch du noyau a été accepté pour corriger
ce bug, mais n'a pas encore été intégré à toutes les distributions. Dans ce
cas, vous pouvez contourner le problème en
désactivant l’ACPI (dans le BIOS ou en utilisant l'option de ligne de démarrage
'acpi=off') ou en patchant manuellement le noyau.
Le patch modifie la fonction mp_parse_prt() dans arch/x86_64/kernel/mpparse.c.
Vous pouvez patcher manuellement ce fichier en mettant
en commentaire la ligne :
irq = entry->link.index;
qui précède immédiatement le commentaire :
/* Dont set up the ACPI SCI because it's already up */
Ce problème peut être dû à une
table ACPI qui entraîne une configuration erronée des interruptions par le
timer.
Si le suivi de démarrage de la console du noyau (visualisable en utilisant
dmesg) contient des messages tels que les suivants :
..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.
Alors l'entrée de table ACPI incorrecte est présente. Sur les noyaux 2.6, ce
problème peut être contourné en spécifiant l'option de ligne de démarrage
« acpi_skip_timer_override ». Une autre solution consiste à
désactiver l'ACPI dans le BIOS ou en utilisant l'option de ligne de démarrage « acpi=off ».
Un bug de la table MP du noyau
2.6.x empêche l'installation et le démarrage de l'OS sur certains systèmes¹.
Ce bug entraîne la corruption de la mémoire en cas de détection d'un bus PCI
numéroté supérieur à 32 et rend, par conséquent, le système
inutilisable à un stade très précoce du processus d'installation ou de
démarrage. Sur certains systèmes laisser ACPI activé pendant le démarrage
résout ce problème.
Il n'existe actuellement pas de solutions à ce problème, mais un patch du noyau
a été accepté et devrait être inclus dans les prochaines distributions.
¹Au moment où nous rédigeons ces lignes, les seuls systèmes nForce connus
pour déclencher ce bug du noyau sont les systèmes CK804 MP.
Certaines anciennes distributions
n’auront pas d’ID de périphériques IDE/SATA nForce 3. Dans ce cas :
1) Le pilote IDE ne pourra pas utiliser les DMA. Ceci aura des conséquences
négatives sur les performances du pilote IDE. Il est possible de corriger ce
problème en appliquant un patch au pilote avec les ID de périphériques
appropriés.
2) Les contrôleurs SATA ne seront pas disponibles pour l’installation de l'OS.
Ce problème peut être contourné en utilisant un disque de pilotes pendant
l'installation.
Attention, ce disque de pilotes ne prend actuellement en charge que les mises à
jour 2 et 3 de RedHat Enterprise Linux 3, 64 bits uniquement.
L'image du disque du pilote et les instructions pour son utilisation sont
disponibles en téléchargement via FTP (utilisateur anonyme) sur :
ftp://download.nvidia.com/linux/nforce/installdriverdisk/nvdriverdisk.tar.gz
Pour patcher les deux tables du pilote dans drivers/ide/pci/amd74xx.c, des modifications
s’imposent :
La première table est un tableau de structure amd_ide_chip appelé
amd_ide_chips. Les entrées adoptent
la forme suivante :
{ PCI_DEVICE_ID_XXXXXXXXXXX, 0xXX, AMD_UDMA_100 },
Si l'un des ID de périphérique suivants manque de cette table :
PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE
PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE
PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA
PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2
Alors le pilote amd74xx.c ne prend pas en charge les contrôleurs IDE et SATA
nForce 3. Pour ajouter ce support :
Étape 1 : Définissez des macros d’ID de périphériques PCI.
Immédiatement avant la table, ajoutez les lignes suivantes :
#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
Étape 2 : Ajoutez des entrées à la fin de la table amd_ide_chips(mais avant
l’entrée terminale « { 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 },
Étape 3 : Ajoutez des entrées à amd74xx_pci_tbl (mais avant l’entrée terminale
« { 0, }, »).
Il y a une table de structure pci_device_id appelée amd74xx_pci_tbl. Les entrées
doivent être ajoutées ici pour le support CK804/MCP04.
{ 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 },
Le numéro à la fin de chaque entrée (de 9 à 12) renvoie aux entrées
correspondantes (numérotées à partir de 0) dans la table
amd_ide_chips. Par exemple, en faisant le compte à rebours dans la table
amd_ide_chips, la 9ème entrée (en commençant le compte
à 0) doit correspondre à l’entrée PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE. Si tel
n’est pas le cas,
les numéros des entrées de la table amd74xx_pci_tbl devront être corrigés en
conséquence.
Étape 4 : Recompilez le noyau.