我应该如何修复在 dmesg 中生成“CPU 卡在内核中”的失败 kexec?

我应该如何修复在 dmesg 中生成“CPU 卡在内核中”的失败 kexec?

我已经从 Raspberry Pi 源代码和适用于 arm64 的 kexec-tools 构建了内核,并在 Raspberry Pi 4 上启动了我的内核。

当我尝试运行 kexec 时,它不产生任何输出,并以非零返回代码退出,并且将错误消息发布到 dmesg。

调试输出

运行 kexec 通常不会打印任何输出,但运行 with--debug显示调试消息会显示:

# kexec -s -l /media/sda1/boot/vmlinuz-rpi4barb --initrd /media/sda1/boot/initramfs-rpi4barb --reuse-cmdline --debug
arch_process_options:178: command_line: coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 bcm2708_fb.fbwidth=1824 bcm2708_fb.fbheight=984 bcm2708_fb.fbswap=1 smsc95xx.macaddr=DC:A6:32:09:35:A1 vc_mem.mem_base=0x3eb00000 vc_mem.mem_size=0x3ff00000  modules=loop,squashfs,sd-mod,usb-storage quiet console=tty1 console=ttyS0,115200
arch_process_options:180: initrd: /media/sda1/boot/initramfs-rpi4barb
arch_process_options:182: dtb: (null)
arch_process_options:185: console: (null)
Try gzip decompression.
Try LZMA decompression.
lzma_decompress_file: read on /media/sda1/boot/vmlinuz-rpi4barb of 65536 bytes failed
elf_arm64_probe: Not an ELF executable.

# echo $?
255

我的内核做过启动(所以它必须是一些一种可执行文件)。file索赔:

# file /media/sda1/boot/vmlinuz-rpi4barb
/media/sda1/boot/vmlinuz-rpi4barb: Linux kernel ARM64 boot executable Image, little-endian, 4K pages

dmesg 输出

当我运行时kexec,该行Can't kexec: CPUs are stuck in the kernel出现在 dmesg 中。

这是什么意思CPUs are stuck in the kernel,我应该怎么做才能解决这个问题?我用谷歌搜索了该消息,发现主要是生成它的代码和一些未解答的问题。

这与 PSCI 有关吗?

一个邮件列表线程确实有一些回复表明问题可能出在名为PSCI。运行建议的命令dmesg | grep -E 'psci|started in'不会产生任何输出,这表明我构建的内核不支持 PSCI。

我不明白这个答案。内核文档将 PSCI 置于 kvm 下,但我的内核正在启动到物理硬件。

我错过了什么吗?

非常感谢任何帮助

我的内核构建错误了吗?我是否错过了任何文档或帖子来展示执行此操作的正确方法?

感谢您的关注。

相关内容