ACPI BIOS Error (bug) Could not resolve symbol
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 (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
- Upgrading ACPI tables via initrd (docs.kernel.org/admin-guide/acpi)
- How to identify the Windows version in ACPI by using _OSI (docs.microsoft.com)
- Finding the ACPI path (dortania.github.io/Getting-Started-With-ACPI)
- Weitere Beiträge zu ACPI Meldungen:
- ACPI errors during boot (forums.linuxmint.com)
- ACPI Error _CPC not found (bugs.launchpad.net)
- Bug 216390 - Could not resolve symbol [\_SB.PCI0.LPC0.EC0.AC._PSR.AFN4, AE_NOT_FOUND (20220331/psargs-330)] (bugzilla.kernel.org)
Einzelnachweise
- ↑ ACPI and UEFI Specifications (uefi.org)
- ↑ DSDT (wiki.archlinux.org)
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.
|