如何配置UEFI可启动的FreeDOS USB闪存驱动器?

通过balena etcher,FreeDOS .img被烧录到了一个USB驱动器上。

enter image description here

仅支持UEFI的桌面电脑无法识别FreeDOS USB启动盘。在BIOS笔记本上进行USB启动测试表明成功进行了传统引导。

问题

  • 要使其支持UEFI引导,需要什么条件?
  • 是否可以将分区表从MSDOS更改为GPT?

更新

Dell 7010台式机固件过旧,由于某种原因:仅支持UEFI引导。传统引导选项被禁用。无法从DVD/CD启动。

目标是使用此链接中提供的DOS可执行文件更新固件:

https://www.dell.com/support/home/en-us/drivers/DriversDetails?driverId=5M70H


你确定无法以BIOS模式启动那台电脑吗? - sudodus
是的,出于某种原因,它不接受启用传统引导的命令。 - gatorback
请告诉我们关于这台电脑的品牌名称和型号。也许阅读此信息的某人知道如何以 BIOS 模式启动它。 - sudodus
现在我明白你的意图了。那么VirtualBox不是一个选择,更新固件也不是一个选择,除非你能在Linux中完成。FreeDOS的问题可能是它是一个16位系统,而UEFI不接受这样的系统(我们在memtest+中遇到了这个问题)。也许有另一个DOS版本可以在UEFI模式下运行。为了这个目的而获取Windows似乎有点过头了。 - sudodus
3你关掉了UEFI安全启动吗?那会阻止CSM/BIOS/传统引导。 - oldfred
@oldfred 谢谢你提出这个有见地的问题:是的,UEFI安全启动=禁用。 - gatorback
3个回答

FreeDOS假定使用BIOS,与UEFI不兼容

FreeDOS维基页面wiki.freedos.org/wiki/index.php/UEFI告诉我们它不能工作

UEFI是统一可扩展固件接口的缩写。

请注意,许多新型(2010年以后)计算机使用UEFI引导,与BIOS不兼容。FreeDOS假定使用BIOS,并且与UEFI不兼容。

许多主板制造商正在用UEFI+GPT代替BIOS+MBR。UEFI使用GPT表而不是MBR。UEFI处理大扇区硬盘。硬盘制造商已经(2010年以后)推出了具有大扇区的硬盘,而BIOS无法处理(它们被硬编码为512字节扇区)。

几乎所有UEFI系统今天(2021年)也可以在BIOS模式下引导,即CSM或传统模式。但可以预期未来将有许多个人电脑仅以UEFI模式启动的UEFI/BIOS系统。

一个运行FreeDOS的解决方法是在虚拟机中安装它,并将该虚拟机设置为以BIOS模式(别名CSM或传统模式)启动。您可以使用VirtualBox来实现这个目的。(但是您不能通过这种方式刷新计算机的BIOS)。还有一个名为DOSBox的x86模拟器,带有DOS系统。 编辑 1: 我找到了这个链接,可能会有所帮助:

wiki.archlinux.org/index.php/Flashing_BIOS_from_Linux

刷新Linux中的BIOS 本文旨在提供有关在Linux下刷新系统BIOS的信息。大多数制造商提供Windows可执行文件或仅可在Windows下运行的BIOS可执行文件。然而,有一些实用工具可以让您在Linux下升级系统BIOS。警告:刷新主板BIOS是一项危险的操作,可能导致主板无法使用!虽然本文的作者已成功运行此过程多次,但结果因人而异。请小心!如果您的系统支持,您可能希望考虑更新微码。注意: ... 对于戴尔电脑用户,戴尔建议Linux用户按照这里提供的信息刷新他们的BIOS(简而言之,将.EXE文件放在USB闪存驱动器上,并使用F12启动菜单访问固件的刷新工具)。
可以在UEFI模式下运行Windows PE。标准的操作是使用您自己或朋友的Windows 10系统,在USB闪存驱动器或CD/DVD光盘中创建一个Windows PE系统。
从Windows PE启动后,您可以刷新BIOS。
根据this link所述,它可以用于非商业目的进行再分发(因此可以使用朋友的Windows系统中创建的Windows PE)。

1尽管根本问题没有解决,但由于FreeDOS显然无法满足UEFI要求,因此还是给予了信用。 - gatorback
也许你敢从Linux上尝试,或者试着更新微码来解决问题。 - sudodus
1感谢介绍fwupdmgr。不幸的是,看起来Dell Optiplex 7010不受https://fwupd.org/lvfs/search?value=Dell+Optiplex支持。 - gatorback
1澄清一下:没有UEFI的“要求”,任何DOS变体都可以“满足”。UEFI本机引导去除了DOS所依赖的BIOS功能。甚至可以说DOS的某些部分被委托给了BIOS。因此,禁用传统启动将禁用DOS的重要部分。 - korkman

根据我所看到的,为了支持这一点,我们需要在UEFI引导加载程序中构建一个有效的BIOS实现(即所有常规的BIOS中断API)。因此,您可以通过UEFI引导BIOS代码(或至少是一个相当完整的CSM),然后再引导DOS。可能仍然存在与MBR和仅限于x64的引导相关的问题。一旦跳转到x64模式,进入16位模式甚至添加32位DOS扩展程序变得非常困难...而且在IA-64上是不可能的(我认为)。这正是UEFI旨在解决的问题,以及为什么EFI长期以来一直是除了x86/64系统之外的“解决方案”(它需要“通用”扩展才能在那个[坦率地说,PIFA]平台上使用)。
然而,除了IA64之外,我认为可以使用虚拟化技术和异常处理程序来“模拟”问题指令。任何会出现这些问题的系统都会有足够的计算能力来处理额外的步骤(和昂贵的上下文切换),这对操作系统开发人员而言可能更加头疼,而对用户而言则不是问题。
记住,我们在各种虚拟机解决方案中都内置了开源BIOS代码,包括QEMU和VirtualBox。只是它们期望有一个带有可用硬件驱动程序的操作系统,而你唯一可用的操作系统将是UEFI固件。
作为替代策略:你可以尝试安装Linux系统,并在KVM下运行freeDOS,尽可能使用PCI透传来支持更多硬件。这样应该可以使用当前的软件技术来实现。需要注意的是,DOS实际上是为ISA系统设计的,而不是PCI系统。

似乎并不那么困难。如果你拥有内核级的ia64,你可以设置控制位返回到实模式,并远跳转到内存底部。从那里,你可以重新加载一个尽可能高地设置自身的32位支持程序,它知道如何将16位中断调用转换为UEFI调用。按照现代标准来说,频繁改变CPU指令模式会很慢,但按照DOS标准来说则很快。 - Joshua


  • 相关问题