searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Option ROM软硬联调问题分析专题——Option ROM背景知识

2023-09-21 08:17:23
113
0

1.Option ROM的背景知识

PCI Option ROM又叫PCI Expansion ROM。其位于PCI或者ISA设备上的只读存储器,因为这个存储器不是总线标准规定一定要实现的,所以叫Option ROM(可选实现的ROM)。 它是用于设备初始化和系统boot的code,即存放着用于初始化该设备的数据和代码。有的PCI Option ROM被存放在板卡上,而有的则保存在BIOS的binary里面。显卡和网卡等设备上通常带有Option ROM。
Option ROM按版本分有2.1的Option ROM和3.0的Option ROM。

 

如上图所示,PCI Option ROM由image header, PCI data structure和Image 三个部分组成。
首先,在Option ROM的头两个字节是magic number: "0x55“,“0xAA"。由此可以验证是否是合法的Option ROM.
其次,在0x18-0x19这个位置可以获取到PCI Data structure pointer, 这其实是一个地址,由这个地址,我们可以得到PCI Data structure所存放的位置。
最后,通过解析PCI Data structure,我们可以获得ROM的version, class type, size等等信息。
BIOS的Option ROM开发,有Legacy BIOS下的Option ROM,与UEFI的BIOS下Option ROM之分。由于PXE装机只能在UEFI模式,故紫金的BIOS下Option ROM PXE和云盘启动盘均是使用UEFI的BIOS下Option ROM调试。
2.UEFI的Option ROM结构

UEFI Option ROM利用了之前保留的字节(偏移0x04处),用来表明自己的身份。
UEFI Option ROM内的hex实际上是UEFI driver的一种,EDKII提供了相应的工具,将生成文件转换为Option ROM。前面已经说过了,我们现在所开发的option ROM,主要是PCI Option ROM。关于PCI Option ROM的内容可以参考《EDKII Driver Writer’s Guide for UEFI 2.3.1》。
Option ROM文件,要求字节校验和必须为0;Option ROM是由BIOS调用的。如果BIOS检测到ROM代码符合pnp BIOS的规范,将使用FAR CALL调用偏移3h处的入口向量,控制权将转交给Option ROM代码。当然,为了正常将控制权返回给BIOS,在Option ROM代码的最后必须使用RETF,将控制权交出。因此,Option ROM第一件事情就是需要保存好各个寄存器的值,在执行完后还回去,防止BIOS罢工。

3.PCI配置空间关于Expansion ROM的定义

在pci/pcie设备的配置空间中关于Expansion ROM的定义在30h寄存器:

4.Expansion ROM 的初始化过程

BIOS的POST阶段,扫描并执行pci设备的expansion的过程大概分以下几步:

(1)首先判断pci设备是否实现“Expansion rom base address”寄存器,有则进行下一步判断;
(2)如果有实现了expansion的基址寄存器,则配置和使能expansion rom,然后查找expansion rom是否有”AA55”的标示字符,如果有则说明设备有真实的expansion rom芯片存在;
(3)如果expansion rom已经存在,则扫描是否有适合本设备和本CPU架构的image代码存在;
(4)如果有适合本环境的image代码存在,则把相应的代码拷贝到ram的合适位置,并跳入header format中指定的初始化入口执行;
(5)最后关闭expansion rom的使能。

 

0条评论
0 / 1000