谁在纯 UEFI 中启动时启用 A20 行?
Who enables the A20 line when booting in pure UEFI?
这是由 UEFI 固件处理还是由 GRUB grubx64.efi
引导加载程序处理?
我查看了 https://wiki.osdev.org/UEFI,它声称:
UEFI firmware ... also prepares a protected mode environment with flat segmentation and for x86-64 CPUs, a long mode environment with identity-mapped paging. The A20 gate is enabled as well.
但找不到任何官方 来源来支持此信息。 UEFI规范没有提到这个。
linux 内核提供了一个可以作为引导程序的 efi-stub,但是在检查了它的源代码后我看不出它是否启用了 A20。所以我仍然不知道它是UEFI固件的工作还是引导加载程序的工作。
(我想为 UEFI 编写自己的引导加载程序,并想了解 UEFI 固件提供了哪些设置 "out of the box" 以及哪些部分必须由我实现)
UEFI 固件启用 A20(如果尚未启用)、使用平面描述符设置 GDT、进入保护模式等。在 64 位 CPUS 上,它还会进入长模式,其中涉及启用身份映射分页。为了让 UEFI 按预期运行,它需要启用 A20 以正确访问所有物理内存。
在一些更现代的处理器上,A20 在开机时启用,甚至可能无法关闭。英特尔已开始摆脱遗留要求,包括放弃支持 pre-286 环境。可以切换的 A20 门的存在是为了让 286(和更高版本的处理器)保持与旧的 8086/80186(或同等)处理器的兼容性。无法更改 A20 状态以及放弃旧版 BIOS 是朝着这个方向迈出的一步。
一旦您的 UEFI 引导加载程序代码启动 运行,您可以保证此时将启用 A20。 A20只是从启用的角度来说你并不关心。
虽然UEFI specification中没有特别提到A20,但似乎暗示:
2.3.2.1 Handoff State
When a 32-bit UEFI OS is loaded, the system firmware hands off control to the OS in flat 32-bit mode. All
descriptors are set to their 4GiB limits so that all of memory is accessible from all segments.
禁用 A20 后,并非所有内存都可以从所有段访问,因此我推断必须在处理器或 UEFI 固件中默认启用 A20。
这是由 UEFI 固件处理还是由 GRUB grubx64.efi
引导加载程序处理?
我查看了 https://wiki.osdev.org/UEFI,它声称:
UEFI firmware ... also prepares a protected mode environment with flat segmentation and for x86-64 CPUs, a long mode environment with identity-mapped paging. The A20 gate is enabled as well.
但找不到任何官方 来源来支持此信息。 UEFI规范没有提到这个。
linux 内核提供了一个可以作为引导程序的 efi-stub,但是在检查了它的源代码后我看不出它是否启用了 A20。所以我仍然不知道它是UEFI固件的工作还是引导加载程序的工作。
(我想为 UEFI 编写自己的引导加载程序,并想了解 UEFI 固件提供了哪些设置 "out of the box" 以及哪些部分必须由我实现)
UEFI 固件启用 A20(如果尚未启用)、使用平面描述符设置 GDT、进入保护模式等。在 64 位 CPUS 上,它还会进入长模式,其中涉及启用身份映射分页。为了让 UEFI 按预期运行,它需要启用 A20 以正确访问所有物理内存。
在一些更现代的处理器上,A20 在开机时启用,甚至可能无法关闭。英特尔已开始摆脱遗留要求,包括放弃支持 pre-286 环境。可以切换的 A20 门的存在是为了让 286(和更高版本的处理器)保持与旧的 8086/80186(或同等)处理器的兼容性。无法更改 A20 状态以及放弃旧版 BIOS 是朝着这个方向迈出的一步。
一旦您的 UEFI 引导加载程序代码启动 运行,您可以保证此时将启用 A20。 A20只是从启用的角度来说你并不关心。
虽然UEFI specification中没有特别提到A20,但似乎暗示:
2.3.2.1 Handoff State When a 32-bit UEFI OS is loaded, the system firmware hands off control to the OS in flat 32-bit mode. All descriptors are set to their 4GiB limits so that all of memory is accessible from all segments.
禁用 A20 后,并非所有内存都可以从所有段访问,因此我推断必须在处理器或 UEFI 固件中默认启用 A20。