Ich habe eine Alienware Aurora R7 mit Arch Linux. Beim Herunterfahren gerät der Kernel in Panik, mit etwas Ähnlichem in der Panikmeldung (ohne Zeitstempel):
BUG: Unable to handle kernel NULL pointer dereference at (null)
IP: i2c_dw_isr+0x3ef/0x6d0
PGD 0 P4D 0
Oops: 0000 [#1] PREEMPT SMP PTI
Aus verschiedenen Quellen ( 1 , 2 ) scheint dies mit dem i2c-designware-core
Modul in Zusammenhang zu stehen , und die Problemumgehung führt dazu, dass es auf die schwarze Liste gesetzt wird. Bei neueren Kerneln (scheint 4.10 und höher zu sein) scheint dies jedoch nicht als Modul aufgebaut zu sein:
# uname -srv
Linux 4.15.2-2-ARCH #1 SMP PREEMPT Thu Feb 8 18:54:52 UTC 2018
# zgrep DESIGNWARE /proc/config.gz
CONFIG_I2C_DESIGNWARE_CORE=y
CONFIG_I2C_DESIGNWARE_PLATFORM=y
CONFIG_I2C_DESIGNWARE_SLAVE=y
CONFIG_I2C_DESIGNWARE_PCI=m
CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
CONFIG_SPI_DESIGNWARE=m
CONFIG_SND_DESIGNWARE_I2S=m
CONFIG_SND_DESIGNWARE_PCM=y
Also habe ich versucht, den Kernel in Panik neu zu starten:
# cat /proc/cmdline
root=UUID=e5018f7e-5838-4a47-b146-fc1614673356 rw initrd=/intel-ucode.img initrd=/initramfs-linux.img panic=10 sysrq_always_enabled=1 printk.devkmsg=on
(Die ungeraden Pfade in /proc/cmdline
sind, weil ich direkt von UEFI boote, wobei Einträge mit erstellt werden efibootmgr
. Die Pfade sind an der Stelle verwurzelt /boot
, an der mein ESP bereitgestellt ist.)
Dies scheint etwas für Touchpads zu sein, aber ich habe kein Touchpad und werde keines bekommen. Was kann ich tun, um dieses Ding zu deaktivieren? Muss ich einen benutzerdefinierten Kernel erstellen ?
Da linux-lts
es auch neuer als 4.10 ist (derzeit 4.14), scheint es auch keine einfache Möglichkeit zu geben, einen älteren Kernel zu installieren, bei dem Blacklisting vermutlich funktioniert.
Die Verwendung nolapic
als Kernel-Parameter löst das Problem des Herunterfahrens der Panik, führt jedoch dazu, dass das System einige Minuten nach dem Start einfriert, sodass ich es nicht verwenden kann.
Das Hinzufügen
initcall_blacklist=i2c_dw_init_master
zur Kernel-Befehlszeile sollte verhindern, dass der Designware-Treiber während des Startvorgangs initialisiert wird, und das Problem insgesamt vermeiden.In den Kernel-Parametern finden Sie eine sehr kurze Beschreibung
initcall_blacklist
und im Thread um den Patch finden Sie weitere nützliche Hintergrundinformationen.quelle
i2c_dw_isr+0x3ef/0x6d0
. Bedeutet das, dass die Funktion von etwas anderem gezogen wird, oder liegt der Fehler in einem anderen Modul?i2c_dw_probe
besser? Sehen Sie die schwarze Liste in Kraft? (Es protokolliert eine Nachricht in den Kernel-Protokollen, die besagt, dass eine Funktion übersprungen wird.)initcall_blacklist=i2c_dw_init_master,i2c_dw_probe
.dmesg | grep i2c
zeigt Einträge wie[ 0.000000] blacklisting initcall i2c_dw_init_master
.initcall i2c_dw_probe blacklisted
? Dieblacklisting
Nachricht gibt an, dass der Startparameter zum Auffüllen der Liste verwendet wurde, dieblacklisted
Nachricht zeigt jedoch an, dass der Anruf tatsächlich übersprungen wurde. Ich könnte hier den falschen Baum bellen, tut mir leid ...Beim Experimentieren mit verschiedenen Methoden zum Herunterfahren scheint es, Linux unter
poweroff
Verwendungsystemd.unit=poweroff.target
eines Kernel-Parameters auf dem Ziel zu booten . OK wird heruntergefahren.Während ich auf eine bessere Lösung warte, habe ich einen Starteintrag hinzugefügt, der einfach heruntergefahren wird. Dies ist mit GRUB (und vermutlich mit anderen Bootloadern) einfach , aber ich konnte keinen Weg finden, UEFI selbst einfach herunterzufahren. Und es scheint, dass die UEFI-Implementierung von Alienware nicht mehrere Einträge für dieselbe Datei unterstützt. Daher habe ich am Ende
vmlinuz-linux
einen Eintrag für die Kopie kopiert und hinzugefügt:Hier sind die Festplatten- und Partitionsoptionen systemspezifisch. Der hier erstellte Starteintrag war nummeriert
0001
, daher einoff
Skript zum sauberen Herunterfahren:Es gibt wahrscheinlich einen einfacheren Weg, ein UEFI-Abschaltziel zu haben.
quelle