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 종료 대상을 설정하는 더 쉬운 방법이 있을 수 있습니다.