请保留-> 【原文: https://blog.csdn.net/luobing4365 和 http://yiiyee.cn/blog/author/luobing/】
上一篇做好了服务型UEFI驱动的示例工程,本篇准备编写测试用的UEFI应用,演示如何使用驱动提供的Protocol。另外,对于如何加载驱动进行测试,也会详细讲述。
1 编写测试驱动的UEFI应用
完成了服务型驱动和相应示例Protocol的构建后,我们准备编写访问示例Protocol的UEFI应用。本节准备的示例工程TestServiceDrv,在文末提供了下载地址。
编写测试示例Protocol的代码,步骤如下:
- 将示例工程ServiceDrv的头文件MyProtocol.h拷贝到示例工程TestServiceDrv的文件夹下。同时修改TestServiceDrv.inf文件,在[Sources] Section下添加此头文件名;
- 在TestServiceDrv的主程序所在源文件TestServiceDrv.c中添加GUID的声明和定义;
- 在主程序中添加测试用的代码。
在我们准备的服务型驱动例子中,准备了三个接口函数。其中,接口函数My_SampleIn()和
MySample_DoSth()对私有数据进行了不同赋值,接口函数My_SampleOut()则将私有数据打印了出来。我们可以据此编写测试用的代码,如示例1所示。
【示例1】测试示例Protocol
EFI_STATUS EFIAPI UefiMain (IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable)
{
EFI_STATUS Status;
EFI_MYSAMPLE_PROTOCOL *myprotocol;
Status=gBS->LocateProtocol(&gEfiMYSampleProtocolGUID,//示例Protocol GUID
NULL, (VOID **)&myprotocol);
if(EFI_ERROR(Status))
{
Print(L”LocatProtocol error: %r\n”, Status);
return Status;
}
//测试示例Protocol的接口函数
myprotocol->MySample_In(myprotocol,L”Hello,My protocol!”);
myprotocol->MySample_Out(myprotocol);
myprotocol->MySample_DoSth(myprotocol,L”Enjoy UEFI!”);
myprotocol->MySample_Out(myprotocol);
return EFI_SUCCESS;
}
示例应用TestServiceDrv是配合之前构建的服务型驱动ServiceDrv工作的,如果ServiceDrv没有加载,则提示找不到Protocol;如果ServiceDrv加载后,则会如示例1所示,依次调用示例Protocol的接口函数。
继续阅读“UEFI开发探索67- YIE001PCIe开发板(03 UEFI驱动)”1,414 total views, 1 views today