ACPI BIOS Error (bug) Could not resolve symbol

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Auf manchen Systemen erscheinen beim Booten des Linux Kernels ACPI BIOS Error (bug) Could not resolve symbol Fehlermeldungen, die auch über dmesg abrufbar sind. In diesem Artikel zeigen wir Hintergrundinformationen und Ansätze, wie Probleme der ACPI Tabellen behoben werden können.

Beispiel Fehlermeldungen in dmesg

Die folgende Ausgabe stammt von einem Testsystem mit N5105 CPU (System läuft unter Debian 11 mit Test-Kernel 5.18:

root@debian-11:~# dmesg | grep -C 1 "ACPI BIOS"
[    0.212498] ACPI: Enabled 6 GPEs in block 00 to 7F
[    0.226451] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.UBTC.RUCC], AE_NOT_FOUND (20211217/psargs-330)
[    0.226461] ACPI Error: Aborting method \_SB.PC00.XHCI.RHUB.HS03._PLD due to previous error (AE_NOT_FOUND) (20211217/psparse-529)
[    0.226520] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.UBTC.RUCC], AE_NOT_FOUND (20211217/psargs-330)
[    0.226526] ACPI Error: Aborting method \_SB.PC00.XHCI.RHUB.HS04._PLD due to previous error (AE_NOT_FOUND) (20211217/psparse-529)
[    0.227178] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.UBTC.RUCC], AE_NOT_FOUND (20211217/psargs-330)
[    0.227184] ACPI Error: Aborting method \_SB.PC00.XHCI.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20211217/psparse-529)
[    0.227309] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.UBTC.RUCC], AE_NOT_FOUND (20211217/psargs-330)
[    0.227315] ACPI Error: Aborting method \_SB.PC00.XHCI.RHUB.SS02._PLD due to previous error (AE_NOT_FOUND) (20211217/psparse-529)
--
[    1.407003] hub 1-0:1.0: 8 ports detected
[    1.407515] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.UBTC.RUCC], AE_NOT_FOUND (20211217/psargs-330)
[    1.407545] ACPI Error: Aborting method \_SB.PC00.XHCI.RHUB.HS03._PLD due to previous error (AE_NOT_FOUND) (20211217/psparse-529)
[    1.407610] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.UBTC.RUCC], AE_NOT_FOUND (20211217/psargs-330)
[    1.407631] ACPI Error: Aborting method \_SB.PC00.XHCI.RHUB.HS04._PLD due to previous error (AE_NOT_FOUND) (20211217/psparse-529)
--
[    1.409096] hub 2-0:1.0: 6 ports detected
[    1.409162] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.UBTC.RUCC], AE_NOT_FOUND (20211217/psargs-330)
[    1.409185] ACPI Error: Aborting method \_SB.PC00.XHCI.RHUB.SS01._PLD due to previous error (AE_NOT_FOUND) (20211217/psparse-529)
[    1.409251] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.UBTC.RUCC], AE_NOT_FOUND (20211217/psargs-330)
[    1.409552] ACPI Error: Aborting method \_SB.PC00.XHCI.RHUB.SS02._PLD due to previous error (AE_NOT_FOUND) (20211217/psparse-529)

DSDT und SSDT

DSDT und SSDT sind Teil der ACPI Spezifikation.[1]

DSDT (Differentiated System Description Table) ist ein Teil der ACPI-Spezifikation, konkret Teil der festen Systembeschreibung ("system fixed description"). Die DSDT besteht aus einem "system description table header", gefolgt von Daten im "Definition Block format". DSDT liefert Informationen über unterstützte Stromversorgungsereignisse in einem bestimmten System. ACPI-Tabellen werden von den Herstellern in der Firmware bereitgestellt.

Die SSDT (Secondary System Description Table) sind eine Fortsetzung der DSDT. Es können mehrere SSDTs vorhanden sein. Nachdem OSPM die DSDT geladen hat, um den ACPI-Namespace zu erstellen, wird jede SSDT, die in der RSDT/XSDT mit einer eindeutigen OEM-Tabellen-ID aufgeführt ist, in der in der RSDT/XSDT angegebenen Reihenfolge geladen. Zusätzliche Tabellen können nur Daten hinzufügen, sie können keine Daten aus früheren Tabellen überschreiben. So kann der OEM die Basisunterstützung in einer Tabelle bereitstellen und kleinere Systemoptionen in anderen Tabellen hinzufügen.

DSDT anpassen

Zum Anpassen der DSDT führen Sie die folgenden Schritte durch.[2]

Extrahieren Sie die binären ACPI-Tabellen:

# cat /sys/firmware/acpi/tables/DSDT > dsdt.dat

Zerlegen Sie die ACPI-Tabellen in eine .dsl-Datei:

$ iasl -d dsdt.dat

Versuchen Sie, eine Hex-AML-Tabelle (in C) aus der .dsl-Datei zu erstellen:

$ iasl -tc dsdt.dsl

Führen Sie dann erforderliche Anpassungen durch. (Hinweis: Anpassungen für das oben gezeigte Beispiel sind hier noch nicht angeführt. Dieser Abschnitt ist noch in Arbeit.)

Erhöhen Sie die OEM-Version. Andernfalls wird der Kernel die geänderte ACPI-Tabelle nicht anwenden. Zum Beispiel, bevor Sie die OEM-Version erhöhen:

DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000000)
oder:
DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x01072009)

Nach der Erhöhung der OEM-Version:

DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000001)
oder im zweiten Beispiel:
DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x01072010)

Erstellen Sie die Hex-AML-Tabelle erneut, nachdem Sie alle Fehler behoben und die OEM-Version erhöht haben:

$ iasl -tc dsdt.dsl

Verwendung des geänderten Codes mittels CPIO Archivs

Hinweise:

  • Nach jedem BIOS-Update müssen Sie DSDT erneut reparieren/anpassen und diese Schritte wiederholen!
  • Für diese Methode muss die Kernelkonfiguration ACPI_TABLE_UPGRADE=y aktiviert sein (siehe /boot/config...).

Erstellen Sie zunächst die folgende Ordnerstruktur:

$ mkdir -p kernel/firmware/acpi

Kopieren Sie die festen ACPI-Tabellen z.B. in den soeben erstellten Ordner kernel/firmware/acpi:

$ cp dsdt.aml ssdt1.aml kernel/firmware/acpi

Führen Sie in demselben Ordner, in dem sich der neu erstellte Ordner kernel/ befindet, den folenden Befehl aus:

$ find kernel | cpio -H newc --create > acpi_override

Dadurch wird das CPIO-Archiv erstellt, das die festen ACPI-Tabellen enthält. Kopieren Sie das Archiv in das Boot-Verzeichnis.

# cp acpi_override /boot

Ergänzen Sie unter Debian/Ubuntu in der Datei /etc/default/grub folgenden Eintrag:

GRUB_EARLY_INITRD_LINUX_CUSTOM=acpi_override

Aktualisieren Sie die Grub Konfiguration:

# update-grub

Überprüfen, ob die neue DSDT verwendet wird

Führen Sie einen Neustart durch und überprüfen Sie, ob die angepasste DSDT Version angzeigt wird, z.B.

root@debian-11:~# dmesg | grep DSDT
[    0.018759] ACPI: DSDT ACPI table found in initrd [kernel/firmware/acpi/dsdt.aml][0x46898]
[    0.018868] ACPI: Table Upgrade: override [DSDT-ALASKA-  A M I ]
[    0.018870] ACPI: DSDT 0x00000000746D8000 Physical table override, new table: 0x0000000071A3C000
[    0.018873] ACPI: DSDT 0x0000000071A3C000 046898 (v02 ALASKA A M I    01072010 INTL 20200925)
[    0.018949] ACPI: Reserving DSDT table memory at [mem 0x71a3c000-0x71a82897]

Die erhöhte Versionsnummer 01072010 bestätigt, dass die angepasste DSDT verwendet wird.

Weitere Informationen

Einzelnachweise

  1. ACPI and UEFI Specifications (uefi.org)
  2. DSDT (wiki.archlinux.org)


Foto Werner Fischer.jpg

Autor: Werner Fischer

Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.


Das könnte Sie auch interessieren

Dm-crypt Performance optimieren
ISCSI Multipathing unter Linux
Ps und pstree