gpt4 book ai didi

x86 - 如何在 Linux 上的 NASM 中创建 UEFI 内核

转载 作者:行者123 更新时间:2023-12-01 16:29:52 24 4
gpt4 key购买 nike

我一直在遵循本操作系统开发指南 OS Development on Windows

但是,我不喜欢 Windows 开发环境,因此我尝试将这些说明转移到我喜欢的 Linux 环境中。

我已经尝试过 Rod's Books 的教程,并且一切都正确编译,并且我收到了 hello.efi 文件...但是如何从它启动?我使用命令 qemu-system-x86_64 -bios OVMF.fd -kernel hello.efi -net none,但我只得到典型的 EFI shell。

我真正想要的是 Linux 版本的 Hacker Pulp 指南。

我也尝试过来自 kalzlauskas 的指南,以及来自 osdev UEFI Bare Bones 的说明.

最佳答案

TL;DR:主要问题是您无法直接使用 QEMU 的 -kernel 选项运行 EFI 应用程序。 -kernel 用于启动符合多重引导的可执行文件或加载 Linux bzImage 文件。

<小时/>

由于您的问题表明您已成功编译并链接了一个 EFI 应用程序与其中一个教程,因此本答案将严格关注使用 QEMU 运行该应用程序的方法。您遵循哪种教程或方法来构建 EFI 应用程序本身并不重要。

在项目目录中使用此命令创建一系列子目录以用作EFI启动驱动器:

mkdir -p bootdrv/EFI/BOOT/

您只需创建目录一次。创建后,将 hello.efi 文件复制到名为 bootdrv/EFI/BOOT/BOOTX64.EFI 的文件中。 EFI/BOOT/BOOTX64.EFI 是 64 位 UEFI 的默认启动文件。在 32 位 UEFI 上,默认启动文件是 EFI/BOOT/BOOTIA32.EFI。运行以下命令来启动您的EFI程序:

qemu-system-x86_64 -bios OVMF.fd -net none -drive file=fat:rw:bootdrv,format=raw

这会将 bootdrv 目录作为 FAT 文件系统安装在模拟器中作为第一个硬盘驱动器。 64 位 EFI 应自动运行文件 EFI/BOOT/BOOTX64.EFI

<小时/>

作为替代方案,您可以将 hello.efi 文件复制到目录 bootdrv/EFI/BOOT/,并创建一个名为 bootdrv 的启动脚本/EFI/BOOT/startup.nsh 包含以下命令:

\EFI\BOOT\hello.efi
pause

EFI/BOOT/startup.nsh 是默认启动脚本,将在没有默认 EFI 应用程序的情况下运行。该文件应在最后一个命令后包含一个空行。命令 \EFI\BOOT\hello.efi 运行 hello.efipause 提示按下某个键。您不必指定 pause,如果您运行的程序退出回 shell,这会很方便。您可以使用与以前相同的命令来运行它:

qemu-system-x86_64 -bios OVMF.fd -net none -drive file=fat:rw:bootdrv,format=raw

这会将 bootdrv 目录作为 FAT 文件系统安装在模拟器中作为第一个硬盘驱动器。 EFI将加载EFI/BOOT/startup.nsh作为启动脚本并执行其中包含的命令。这应该会自动运行 hello.efi

关于x86 - 如何在 Linux 上的 NASM 中创建 UEFI 内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55408415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com