返回

从源代码构建 Syslinux EFI 64 位:排除故障并解决 start_image() 返回加载错误问题

Linux

从源代码构建 Syslinux EFI 64 位:故障排除和解决方案

概述

本文将深入探究当尝试从源代码构建和运行 Syslinux EFI 64 位时可能遇到的“start_image() returned Load Error”错误,并提供分步故障排除指南和解决方案。

问题识别

当 Syslinux EFI 64 位从源代码编译时,可能出现“start_image() returned Load Error”错误。这通常是由以下原因引起的:

  • 已编译 Syslinux 与 qemu 环境不兼容
  • Syslinux 源代码未正确修改以支持 EFI 64 位
  • UEFI 引导配置不当

解决步骤

要解决此问题,请遵循以下步骤:

1. 检查 Syslinux 与 qemu 的兼容性

确保安装了与 qemu 环境兼容的 Syslinux 版本。对于 qemu,建议使用 Debian 提供的 Syslinux 二进制文件。

2. 修改 Syslinux 源代码

对于从源代码编译的 Syslinux,需要进行以下修改:

  • 在文件 ./syslinux-6.04~git20190206.bf6db5b4+dfsg1/efi/efi.h 中,将第 23-25 行替换为:
#include <efi/efi.h>
#include <efi/efilib.h>
#include <efi/efistdarg.h>
#include <efi/efisetjmp.h>

3. 重新编译 Syslinux

使用 make efi64 命令重新编译 Syslinux。

4. 准备引导环境

  • 创建一个虚拟机驱动器文件、GPT 分区表和一个引导分区。
  • 将以下文件复制到引导分区的 /EFI/boot/ 目录:
    • ./syslinux-6.04~git20190206.bf6db5b4+dfsg1/efi64 子目录中的所有 .c32 文件
    • ldlinux.e64
    • syslinux.efi 重命名为 grubx64.efi

5. 配置 qemu

  • 安装 qemu 相关软件包:qemu-system-x86 aqemu ovmf
  • 配置 aqemu 使用 TCG 加速器并指定 OVMF 固件:-bios /usr/share/ovmf/OVMF.fd

6. 启动 qemu

启动 qemu 并加载引导分区。如果 syslinux.efi 直接重命名为 bootx64.efi,qemu 可能会显示其他错误消息。

结论

通过遵循这些步骤,你应该能够解决 Syslinux EFI 64 位的“start_image() returned Load Error”错误,并成功从源代码构建和运行 Syslinux。如果你遇到任何进一步的问题,请随时参考提供的参考链接或寻求其他支持。

常见问题解答

1. Syslinux 是什么?

Syslinux 是一个开源引导加载程序,用于引导 Linux 和其他操作系统。

2. EFI 是什么?

EFI(可扩展固件接口)是一种接口规范,用于计算机的引导过程。

3. qemu 是什么?

qemu 是一个开源机器模拟器和虚拟机管理器。

4. 为什么会出现“start_image() returned Load Error”错误?

此错误通常是由与 qemu 环境不兼容的 Syslinux、未正确修改的源代码或不当的 UEFI 引导配置引起的。

5. 如何避免此错误?

确保使用兼容的 Syslinux 版本、修改源代码并正确配置 UEFI 引导环境。