[写在前面]哇塞哥贡献了本文的主要素材,老戚进行了编辑和风格整理。
x86启动过程中,BIOS会把POST code(POST:Power-On Self Test)不断的发送到IO空间的0x80地址(Port80),硬件设计上常常用Port80来驱动LED灯,从而直观的获取BIOS进程的信息。当我们遇到系统启动问题时,Port80 LED能够显示问题发生的前后场景,是调试x86不可或缺的工具。
本文探讨了两种常用Port80(POST code) LED的实现机制:
基于x86 LPC总线(TPM接口)(见图<1>的1/2)
基于PCIe-PCI桥(PCIe扩展卡)(图<1>的3)
图<1> Port80 LED诊断卡
1. IO Port80 x86以PCI总线的方式来管理内外部设备。PCI协议定义了配置(Configuration)空间、IO空间、Memory空间(点击打开:x86的设备寻址),三种空间的寻址互相独立。 IO空间的地址范围为0x0~0xFFFF(64KB)。理论上,PCI设备都可以申请IO空间,限制是必须以4KB的倍数为边界(0xZ000~0xZFFF)。跟memory空间地址分配相似,系统也是根据配置空间提供的信息,来分配IO BAR。 现实中, IO空间的存在主要是为了 兼容早期(l