当我在 ARM 机器上从 Grub 启动 Linux 内核时,会导致立即重新启动。
efi stub 输出以下内容:
grub2> set root=(hd6,gpt1)
grub2> linux /efi/linux/vmlinuz
grub2> initrd /efi/linux/initrd.img
grub2> boot
EFI stub: Booting Linux kernel...
EFI stub: Using DTB configuration table
EFI stub: Exiting boot services...
(我知道,目前还没有关于 Linux 根分区的信息,我首先只是想确定我是否真的可以启动内核。)
该机器由 American Megatrends 生产的 ARM64 UEFI 上的 Qualcomm Snapdragon 8cx 驱动。由于它最初附带专有操作系统,因此到目前为止,我发现无法使用正确的 DTB 文件启动它。
是否有可能在没有 DTB 文件的情况下,仅使用 UEFI 提供的硬件信息在 ARM64-UEFI 机器上启动内核?
我想要启动的内核是刚刚编译的 Linux 5.16.1,启用了所有 ARM64 功能和 Qualcomm 配置。
编辑:
即使使用正确的 DTB 文件,也会出现同样的行为。
grub2> devicetree /efi/linux/my-devicetree.dtb
答案1
目前,没有设备树就无法在 Qualcomm 芯片组上启动 Linux 内核,因为大多数驱动程序都依赖设备树来获取平台数据。大多数 Qualcomm 特定驱动程序都不了解 ACPI。
对于您提到的即使没有设备树也无法启动内核的问题,请确保您已启用内核配置CONFIG_EFI_STUB
并禁用CONFIG_EFI_DISABLE_PCI_DMA
。第一个选项允许 GRUB 在内核映像中添加的 EFI 存根的帮助下启动内核,而禁用第二个选项可在退出 UEFI 服务后保持 PCI 设备正常运行。启用第二个选项可能会导致某些 PCI 设备启动失败。
看:https://github.com/pftf/RPi4/issues/168
earlycon=efifb
另外,您可以通过传递命令行参数来启用 EFI earlycon 。