为什么要在保护模式下启用 A20 线?
Why enable A20 line in Protected Mode?
在Linux0.01的bootloader的汇编源文件中,使能了A20线。
来自boot/boot.s
:
| that was painless, now we enable A20
call empty_8042
mov al,#0xD1
...
之后引导加载程序跳转到保护模式。
在实模式下,启用 A20 行可为我们提供一个地址 space 扩展 64 KiB - 16 字节。
在保护模式下,地址总线自动解锁。
为什么引导加载程序在跳转到保护模式时启用 A20 地址线?
In Real Mode, enabling the A20 line grants us an address space expansion of 64 KiB - 16 bytes.
正确,在实模式下(在 286+ 上)您可以将段寄存器设置为 0xFFFF
,这将允许您访问最多 (0xFFFF << 4) + 64K
.
的内存
In Protected Mode, the address bus is unlocked automatically.
保护模式是一种CPU模式,所以它不"unlock"总线,它只是允许使用额外的地址space,这需要地址上有更多的引脚公共汽车。
Why does the bootloader enable the A20 address line when the jump to Protected Mode would do that anyway?
因为不会。 "A20" 一般是指在 PC-AT 中添加的硬件破解,需要在保护模式正常运行之前将其禁用。
首先,回想一下旧的 CPUs(通过 80186)最多只能访问 1 MiB 的内存,因此有 20 个地址线(A0 - A19)。一些非常古老的软件利用了这样一个事实,即内存访问超过 1 MiB 会 wrap 到较低的内存。
当286增加了更多的地址线后,IBM不想破坏与这个旧软件的兼容性,所以他们做了不可思议的事情:他们在external第 21 地址行 (A20),默认情况下将其关闭,重新启用环绕行为,因此旧软件仍可正常运行。所以 286 本身对这个黑客一无所知——它在 CPU 之外。对于CPU,A20和其他地址线没有区别。
这个门(A20 门)由键盘控制器 IC 上的 GPIO 引脚控制。因此,您需要在进入保护模式之前启用它。如果你没有,(并且说你平面映射了所有 4GB 的物理内存),那么 ,"every odd numbered megabyte region will be inaccessible. So 1mb-2mb will actually reference 0-1mb, 3mb-4mb will reference 2mb-3mb etc."
另请参阅:
- A20 Line(维基百科)
在Linux0.01的bootloader的汇编源文件中,使能了A20线。
来自boot/boot.s
:
| that was painless, now we enable A20
call empty_8042
mov al,#0xD1
...
之后引导加载程序跳转到保护模式。
在实模式下,启用 A20 行可为我们提供一个地址 space 扩展 64 KiB - 16 字节。
在保护模式下,地址总线自动解锁。
为什么引导加载程序在跳转到保护模式时启用 A20 地址线?
In Real Mode, enabling the A20 line grants us an address space expansion of 64 KiB - 16 bytes.
正确,在实模式下(在 286+ 上)您可以将段寄存器设置为 0xFFFF
,这将允许您访问最多 (0xFFFF << 4) + 64K
.
In Protected Mode, the address bus is unlocked automatically.
保护模式是一种CPU模式,所以它不"unlock"总线,它只是允许使用额外的地址space,这需要地址上有更多的引脚公共汽车。
Why does the bootloader enable the A20 address line when the jump to Protected Mode would do that anyway?
因为不会。 "A20" 一般是指在 PC-AT 中添加的硬件破解,需要在保护模式正常运行之前将其禁用。
首先,回想一下旧的 CPUs(通过 80186)最多只能访问 1 MiB 的内存,因此有 20 个地址线(A0 - A19)。一些非常古老的软件利用了这样一个事实,即内存访问超过 1 MiB 会 wrap 到较低的内存。
当286增加了更多的地址线后,IBM不想破坏与这个旧软件的兼容性,所以他们做了不可思议的事情:他们在external第 21 地址行 (A20),默认情况下将其关闭,重新启用环绕行为,因此旧软件仍可正常运行。所以 286 本身对这个黑客一无所知——它在 CPU 之外。对于CPU,A20和其他地址线没有区别。
这个门(A20 门)由键盘控制器 IC 上的 GPIO 引脚控制。因此,您需要在进入保护模式之前启用它。如果你没有,(并且说你平面映射了所有 4GB 的物理内存),那么
- A20 Line(维基百科)