在Linux 0.01的引导程序汇编源文件中,启用了A20线。
源自boot/boot.s
:
| that was painless, now we enable A20
call empty_8042
mov al,#0xD1
...
然后引导加载程序跳转到保护模式。
在实模式下,启用A20线可以为我们提供64 KiB - 16字节的地址空间扩展。
在保护模式下,地址总线会自动解锁。
为什么引导加载程序要启用A20地址线,而跳转到保护模式本来就会自动启用呢?
在Linux 0.01的引导程序汇编源文件中,启用了A20线。
源自boot/boot.s
:
| that was painless, now we enable A20
call empty_8042
mov al,#0xD1
...
然后引导加载程序跳转到保护模式。
在实模式下,启用A20线可以为我们提供64 KiB - 16字节的地址空间扩展。
在保护模式下,地址总线会自动解锁。
为什么引导加载程序要启用A20地址线,而跳转到保护模式本来就会自动启用呢?
这个门(A20门)由键盘控制器IC上的GPIO引脚控制。因此,在进入保护模式之前,您需要启用它。如果没有启用它(并且假设您将所有4GB物理内存都映射为单平面内存),则像Micheal Petch指出的那样,“每个奇数兆字节区域都将无法访问。因此,1mb-2mb实际上将引用0-1mb,3mb-4mb将引用2mb-3mb等。”