framework中的BBSTable

1 概述

BBS定义了BIOS识别系统中IPL(Initial Program Load)设备的方法,使得BIOS可以按照用户设置的优先顺序来引导系统。

BBS使得BIOS可以将系统中的所有IPL设备放进一个列表,并保存在NV存储器中。IPL设备一般包括以下三种:BAIDPnP Card以及LegacyBBS只支持BAIDPnP Card

BBS最基本的一个功能是定义IPL优先级。IPL优先级是用户通过配置界面为IPL设备指定的,比如第一个启动设备为A:,第二个为C:…。用户每次开机时,系统都需要重新枚举所有的IPL设备。

如果从一个IPL设备启动操作系统失败,BIOS将重新获得控制权,并尝试从下一个IPL设备启动。所有IPL设备都尝试无法启动后,这个过程会才会结束。这时BIOS可以打印一个提示信息,告诉用户无法启动到操作系统,等待用户敲一个键后,重新调用INT 19h

IPL设备实际上可以是任何可以加载操作系统的设备,包括软驱、硬盘、CD-ROMPCMCIA等,将来还可能包括串口、并口等。

IPL设备的一个比较重要的功能是在引导操作系统失败后,必须要能返回BIOSBBS定义INT 18h作为启动失败的恢复向量。比如,如果配置从一个网卡启动,但是没插网线,这时网卡的Oprom就应该通过调用INT 18h告诉BIOS无法引导操作系统。

2 BBS Table的创建与获取

CSM文档中定义EFI_LEGACY_BIOS_PROTOCOL,该Protocol提供了获取BBS table的接口函数:GetBbsInfo

typedef

EFI_STATUS

(EFIAPI *EFI_LEGACY_BIOS_GET_BBS_INFO) (

IN EFI_LEGACY_BIOS_PROTOCOL *This,

OUT UINT16 *HddCount,

OUT HDD_INFO **HddInfo,

OUT UINT16 *BbsCount,

IN OUT BBS_TABLE **BbsTable

)

这个函数可以得到内部的BBS数据结构,以便对其进行修改。

Framework中定义了一个256项的BbsTable[256],其中BbsTable[0]对应的是软驱,从BbsTable[1]- BbsTable[16]分别对应一块硬盘,后面的所有项用于存放BEVBCV

硬盘对应的BbsTable为什么是16项呢?这是因为代码中假设平台支持的最大IDE控制器个数为8,每个控制器可以有两个驱动器MasterSlave

函数首先判断软驱是否连接,如果有连接有是否有软盘……,然后填充BbsTable[0]。完成后就轮到HDD了,先读取系统中的硬盘驱动器的信息HddInfo,根据该信息分别填充BbsTable[1]- BbsTable[16]。最后通过调用legacy161号函数Legacy16UpdateBbs,将不兼容BBSOprom加入到BbsTable中。

涉及到的代码都在文件LegacyBios/LegacyBoot.c中。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值