UEFI——文件操作(FileIO)

UEFI的文件系统栈如图所示,在UEFI中都含有一个ESP(EFI System Patition)分区,这个分区上存放了启动文件。UEFI就需要有读写文件的功能。文件的读写管理通过文件系统来完成,要支持读写文件,UEFI必须首先能操作ESP上的文件系统。UEFI内置了EFI_SIMPLE_FILE_SYSTEM_PROTOCOL(简称FileSystemIo)用于操作FAT文件系统

 首先可以通过两种方式获取EFI_SHELL_PROTOCOL协议接口,EFI_SHELL_PROTOCOL是UEFI规范中定义的一个协议,这个协议允许UEFI应用或者驱动程序与UEFI Shell交互,执行命令、运行其他应用程序、访问文件系统等。

步骤1:检查协议是否可用

使用OpenProtocol()打开协议并获取接口指针,其代码原型为

/**
    查询一个句柄看它是否支持指定的协议。如果Handle支持该协议,将代表调用者打开这个协议
**/

typedef
EFI_STATUS
(EFIAPI *EFI_OPEN_PROTOCOL)(
  IN  EFI_HANDLE                Handle, //正在打开协议接口的指针的句柄
  IN  EFI_GUID                  *Protocol, //协议的唯一标识符,指协议的GUID
  OUT VOID                      **Interface  OPTIONAL, //输出参数,返回指向相应协议接口的指针的地址
  IN  EFI_HANDLE                AgentHandle, //打开由protocol和interface指定的协议接口的agent的句柄。agent通常是执行某操作的实体,例如UEFI应用或驱动程序,接口是指协议的具体实现
  IN  EFI_HANDLE                ControllerHandle, //如果打开协议的agent是遵循UEFI驱动程序模型的驱动程序,则此参数是需要协议接口的控制器句柄,如果不遵循,则此参数是可选的,并且可能为NULL
  IN  UINT32                    Attributes //由句柄和协议指定的协议接口的打开模式
  );

其中协议接口的打开方式有如下几种:

#define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL   0x00000001
#define EFI_OPEN_PROTOCOL_GET_PROTOCOL         0x00000002
#define EFI_OPEN_PROTOCOL_TEST_PROTOCOL        0x00000004
#define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER  0x00000008
#define EFI_OPEN_PROTOCOL_BY_DRIVER            0x00000010
#define EFI_OPEN_PROTOCOL_EXCLUSIVE            0x00000020

/**
在UEFI环境中,OpenProtocol 函数用于打开一个协议接口,以便UEFI应用程序或驱动程序可以与该协议进行交互。以下是一些用于 OpenProtocol 函数的标志(Flags),它们定义了打开协议的不同方式和权限。

EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL:
值:0x00000001
描述:这个标志指示 OpenProtocol 应该通过一个句柄和一个协议GUID来打开协议。这是最常用的方式,用于打开由特定句柄支持的协议。
EF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值