Arch Linuxを実行するAlienware Aurora R7があります。終了すると、カーネルがパニック状態になり、次のような内容がパニックメッセージに表示されます(タイムスタンプを省略)。
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
さまざまなソースから(1、2)、これはモジュールに関連しているようですi2c-designware-core
。回避策は、対応するモジュールをブラックリストに追加することです。しかし、最近のカーネル(4.10以上のように見える)では、モジュールとしてビルドされていないようです。
# 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
だから私はパニック状態でカーネルを再起動させました:
# 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
(奇妙なルートは/proc/cmdline
UEFIから直接起動し、で作成されたエントリを使用するためですefibootmgr
。ルートのルートは/boot
ESPがインストールされている場所です。)
これはタッチパッドのもののようですが、タッチパッドがなくて買わないと思います。この機能を無効にするにはどうすればよいですか?必須ですか?カスタムカーネルの構築?
4.10(現在4.14)よりも最新バージョンなので、古いlinux-lts
カーネルをインストールする簡単な方法がないようで、ブラックリスト機能が動作することもあります。
カーネルパラメータとして使用すると、nolapic
シャットダウンパニックの問題は解決されますが、起動後数分間システムがハングして使用できなくなります。
答え1
カーネルのソースコードを読んだ後、ブラックリストに追加する必要がある関数を見つけました!
ありがとうスティーブンジッタのヒントinitcall_blacklist
。
initcall_blacklist=dw_i2c_init_driver
カーネルのコマンドラインに追加されました。これはカーネル4.15.0で動作します。
この答えを見つけることができる他のすべての人に。以下を編集してこれを行うことができます/etc/default/grub
。
- 端末で実行:
sudo -H gedit /etc/default/grub
。 - ブラックリスト文字列を
GRUB_CMDLINE_LINUX_DEFAULT
:に追加しますGRUB_CMDLINE_LINUX_DEFAULT="… initcall_blacklist=dw_i2c_init_driver"
。 - ファイルを保存してエディタを閉じます。
- 端末で実行:
sudo update-grub
。 - 再起動してテストしてみてください!
答え2
答え3
poweroff
さまざまなシャットダウン方法を試しましたが、カーネルパラメータを使用してターゲットにLinuxを起動するとsystemd.unit=poweroff.target
正常にシャットダウンするようです。
だから、より良い解決策を待っている間、簡単な終了開始エントリを追加しました。それは簡単です幼虫(おそらく他のブートローダがあるでしょう)UEFI自体を簡単にオフにする方法はありません。また、AlienwareのUEFI実装は、同じファイルに対して複数の項目をサポートしていないようで、最終的に重複する項目をコピーしてvmlinuz-linux
追加しました。
cp /boot/vmlinuz-linux /boot/vmlinuz-shutdown
cp /boot/initramfs-linux.img /boot/initramfs-shutdown.img
kernel_opts="root=UUID=e5018f7e-5838-4a47-b146-fc1614673356 ro initrd=/initramfs-shutdown.img systemd.unit=poweroff.target"
efibootmgr --disk /dev/nvme0n1 --part 1 --create --gpt --label "Shutdown" --loader /vmlinuz-shutdown --unicode "$kernel_opts"
ここのディスクとパーティションのオプションは、私のシステムにのみ適用されます。ここで生成された開始項目には番号が付けられているため、完全な終了を実行するにはスクリプトが必要です0001
。off
#! /bin/sh
sudo efibootmgr -n 0001
reboot
UEFI 終了ターゲットを設定するより簡単な方法があるかもしれません。