私はArch Linuxを実行しており、設定を完了しました。ダンプファイルこれにより、現在のカーネルにパニックが発生した場合(またはsysrq + cを介して手動で競合が発生した場合)、別のカーネル(kexecカーネル)が起動し、後でチェックできるように競合ダンプが生成されます。
問題は、コンソールでトリガーするかXorg内でトリガーするかにかかわらず、kexecカーネルの全期間にわたって同じ画面がディスプレイに残っているため、何をしているのかを見ることができないことです。
たとえば、AMD / Radeonを使用しているi915以外のラップトップでは問題ありません。
kexecカーネルに対して次のカーネルパラメータを試しましたが、問題には影響しません。
1. systemd.unit=kdump-save.service irqpoll nr_cpus=1 reset_devices ipv6.disable=1 loglevel=9
2.systemd.unit=kdump-save.service irqpoll nr_cpus=1 reset_devices ipv6.disable=1 loglevel=9 i915.fastboot=0 i915.reset=1 i915.modeset=-1 i915.force_reset_modeset_test=true i915.verbose_state_checks=1 i915.enable_hangcheck=1 i915.error_capture=1 zram.num_devices=3 zswap.enabled=0
ExecStart=
現在何の効果もなく使用している全体のラインは次のとおりです。ExecStart=/usr/bin/kexec -p /boot/vmlinuz-linux-git --initrd=/boot/initramfs-linux-git.img --reuse-cmdline --reset-vga --console-vga "--append=root=UUID=2b8b9ab8-7ac5-4586-aa42-d7ffb12de92a systemd.unit=kdump-save.service irqpoll nr_cpus=1 reset_devices ipv6.disable=1 loglevel=9 i915.fastboot=0 i915.reset=1 i915.modeset=-1 i915.force_reset_modeset_test=true i915.verbose_state_checks=1 i915.enable_hangcheck=1 i915.error_capture=1 zram.num_devices=3 zswap.enabled=0"
したがって、カーネルパニックが発生すると、kexecカーネルがダンプファイルの保存を終了して再起動するまで、パニック時に存在していたXまたはコンソール画面が画面に残ります。
crashkernel=
kexecカーネルは、デフォルトのカーネルのargが低すぎるとOOMする可能性があるため、そのmakedumpfile
画面が表示されないため、x分後に再起動しない理由がわかりません。
80x25モードに切り替える(動作する)方法が必要だと思います。それとも、kexecカーネルにi915グラフィックスカードをリセットして正常に再初期化できるように指示する方法が必要だと思います。
編集する:EFIを使用せずにgrub + MBRといくつかの主要なカーネル情報を使用します。
[ 0.275493] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-linux-git root=UUID=2b8b9ab8-7ac5-4586-aa42-d7ffb12de92a rw root_trim=yes rd.luks.allow-discards rd.luks.options=discard ipv6.disable=1 ipv6.disable_ipv6=1 ipv6.autoconf=0 loglevel=15 log_buf_len=16M ignore_loglevel printk.always_kmsg_dump=y printk.time=y printk.devkmsg=on mminit_loglevel=4 memory_corruption_check=1 fbcon=scrollback:4096k fbcon=font:ProFont6x11 net.ifnames=0 nolvm dobtrfs console=tty1 earlyprintk=vga audit=0 systemd.log_target=kmsg systemd.journald.forward_to_console=1 enforcing=0 udev.children-max=1256 rd.udev.children-max=1256 nohz=on oops=panic crashkernel=1024M panic=0 page_poison=1 psi=1 sysrq_always_enabled random.trust_cpu=off logo.nologo lpj=0 mce=bootlog reboot=force,cold noexec=on nohibernate scsi_mod.use_blk_mq=1 consoleblank=120 mitigations=off nospectre_v1 nospectre_v2 spectre_v2=off nospec_store_bypass_disable kvm-intel.vmentry_l1d_flush=never l1tf=off nopti pti=off no_stf_barrier noibrs noibpb ssbd=force-off spectre_v2_user=off noretpoline mds=off rd.log=all noefi cpuidle.governor=menu zram.num_devices=3 zswap.enabled=0 zswap.same_filled_pages_enabled=1 zswap.compressor=zstd zswap.max_pool_percent=40 zswap.zpool=z3fold vsyscall=none i915.enable_fbc=1 i915.verbose_state_checks=1 i915.enable_hangcheck=1 i915.error_capture=1
[ 0.845622] device: 'fbcon': device_add
[ 0.845626] PM: Adding info for No Bus:fbcon
...
[ 4.416734] fbcon: i915drmfb (fb0) is primary device
...
[ 4.494499] i915 0000:00:02.0: fb0: i915drmfb frame buffer device
デフォルトのカーネルとkexecカーネルのコマンドラインの違いは次のとおりです。
diff --git a/home/user/logs/pri_kernel.log b/home/user/logs/kexeckernel.log
index e6d2815..9b90a12 100644
--- a/home/user/logs/pri_kernel.log
+++ b/home/user/logs/kexeckernel.log
@@ -1,2 +1,2 @@
[ 0.000000] Command line:
-BOOT_IMAGE=/boot/vmlinuz-linux-git
root=UUID=2b8b9ab8-7ac5-4586-aa42-d7ffb12de92a rw root_trim=yes rd.luks.allow-discards rd.luks.options=discard ipv6.disable=1 ipv6.disable_ipv6=1 ipv6.autoconf=0 loglevel=15 log_buf_len=16M ignore_loglevel printk.always_kmsg_dump=y printk.time=y printk.devkmsg=on mminit_loglevel=4 memory_corruption_check=1 fbcon=scrollback:4096k fbcon=font:ProFont6x11 net.ifnames=0 nolvm dobtrfs console=tty1 earlyprintk=vga audit=0 systemd.log_target=kmsg systemd.journald.forward_to_console=1 enforcing=0 udev.children-max=1256 rd.udev.children-max=1256 nohz=on oops=panic
-crashkernel=1024M
panic=0 page_poison=1 psi=1 sysrq_always_enabled random.trust_cpu=off logo.nologo lpj=0 mce=bootlog reboot=force,cold noexec=on nohibernate scsi_mod.use_blk_mq=1 consoleblank=120 mitigations=off nospectre_v1 nospectre_v2 spectre_v2=off nospec_store_bypass_disable kvm-intel.vmentry_l1d_flush=never l1tf=off nopti pti=off no_stf_barrier noibrs noibpb ssbd=force-off spectre_v2_user=off noretpoline mds=off rd.log=all noefi cpuidle.governor=menu zram.num_devices=3 zswap.enabled=0 zswap.same_filled_pages_enabled=1 zswap.compressor=zstd zswap.max_pool_percent=40 zswap.zpool=z3fold vsyscall=none i915.enable_fbc=1 i915.verbose_state_checks=1 i915.enable_hangcheck=1 i915.error_capture=1
+root=UUID=2b8b9ab8-7ac5-4586-aa42-d7ffb12de92a systemd.unit=kdump-save.service irqpoll nr_cpus=1 reset_devices ipv6.disable=1 loglevel=9 i915.fastboot=0 i915.reset=1 i915.modeset=-1 i915.force_reset_modeset_test=true i915.verbose_state_checks=1 i915.enable_hangcheck=1 i915.error_capture=1 zram.num_devices=3 zswap.enabled=0 acpi_rsdp=0xf05b0 elfcorehdr=2588032K
~
~
cmdlineを除いて、kexecカーネルdmesgには記載されていませんi915
。
答え1
CONFIG_DRM_I915=y
私は。 CONFIG_DRM_I915=m
CONFIG_DRM=y
=m
上記の2つの変更を行った後、make nconfig
実際の変更は次のとおりです.config
。
--- .config.old 2019-09-10 12:38:12.798272432 +0200
+++ .config 2019-09-10 15:17:26.327144324 +0200
@@ -2279,7 +2279,7 @@ CONFIG_I2C_MUX=m
CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_SMBUS=m
-CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOBIT=y
#
# I2C Hardware Bus support
@@ -3124,11 +3124,12 @@ CONFIG_AGP_INTEL=y
CONFIG_INTEL_GTT=y
# CONFIG_VGA_ARB is not set
# CONFIG_VGA_SWITCHEROO is not set
-CONFIG_DRM=m
+CONFIG_DRM=y
CONFIG_DRM_MIPI_DSI=y
CONFIG_DRM_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DEBUG_MM is not set
# CONFIG_DRM_DEBUG_SELFTEST is not set
-CONFIG_DRM_KMS_HELPER=m
+CONFIG_DRM_KMS_HELPER=y
CONFIG_DRM_KMS_FB_HELPER=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
@@ -3160,7 +3161,7 @@ CONFIG_DRM_I2C_NXP_TDA998X=m
# end of ACP (Audio CoProcessor) Configuration
# CONFIG_DRM_NOUVEAU is not set
-CONFIG_DRM_I915=m
+CONFIG_DRM_I915=y
CONFIG_DRM_I915_ALPHA_SUPPORT=y
CONFIG_DRM_I915_FORCE_PROBE="*"
CONFIG_DRM_I915_CAPTURE_ERROR=y
@@ -3223,7 +3224,7 @@ CONFIG_DRM_PANEL_BRIDGE=y
# CONFIG_DRM_TINYDRM is not set
# CONFIG_DRM_VBOXVIDEO is not set
# CONFIG_DRM_LEGACY is not set
-CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=m
+CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
#
# Frame buffer Devices
@@ -3236,11 +3237,11 @@ CONFIG_FB_BOOT_VESA_SUPPORT=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
-CONFIG_FB_SYS_FILLRECT=m
-CONFIG_FB_SYS_COPYAREA=m
-CONFIG_FB_SYS_IMAGEBLIT=m
+CONFIG_FB_SYS_FILLRECT=y
+CONFIG_FB_SYS_COPYAREA=y
+CONFIG_FB_SYS_IMAGEBLIT=y
# CONFIG_FB_FOREIGN_ENDIAN is not set
-CONFIG_FB_SYS_FOPS=m
+CONFIG_FB_SYS_FOPS=y
CONFIG_FB_DEFERRED_IO=y
# CONFIG_FB_MODE_HELPERS is not set
CONFIG_FB_TILEBLITTING=y
@@ -3265,7 +3266,6 @@ CONFIG_FB_VESA=y
# CONFIG_FB_RIVA is not set
# CONFIG_FB_I740 is not set
# CONFIG_FB_LE80578 is not set
-# CONFIG_FB_INTEL is not set
# CONFIG_FB_MATROX is not set
# CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set
OPのすべてのkexecカーネルパラメータを維持しましたが、うまくいきます!また、i915
OPからすべてのパラメータを削除しましたが、次のように動作し続けます。systemd.unit=kdump-save.service irqpoll nr_cpus=1 reset_devices ipv6.disable=1 loglevel=9
これでビデオモードがリセットされ、起動後0.2秒以内にkexecカーネルのすべての内容を見ることができます。
これがおそらく(すでに)AMD / Radeonで実行される理由です。DRM_RADEON=y
とCONFIG_DRM=y
。
修正する:
私は別の方法を見つけました。 andをカーネルモジュールとして
保持するには、そのエントリが(正直にすべてが必要かどうかわからない)、(おそらくそうではない)が1行にあることを確認してください。この方法も機能しますが、表示される最も古いdmesg行は起動後4.3秒です(カーネルi915 / drmの場合は0.2秒と比較)。i915
drm
/etc/mkintcpio.conf
MODULES=(i915 drm fbcon)
/etc/modules-load.d/i915.conf
i915
^ つまり、initrd/initramfs イメージに、kexec カーネルの起動時にできるだけ早くロードできるモジュールがあることを確認してください。