UEFI原理与编程(4)第一个protocol

第一个protocol

服务需要常驻内存,只有驱动可以常驻内存,我们就要用驱动的形式提供服务,将服务可以安装到任何控制器或者handle对象上。使用DXE驱动在image初始化时(即执行模块入口函数时),将protocol安装到自身handle即可。
(源文件包括工程文件放在Github里了,链接自取)(https://download.csdn.net/download/m0_49918601/12857555.)

服务接口设计

  1. firstprotocol.c
#include <firstprotocol.h>
#pragma warning(disable:4133)

EFI_STATUS EFIAPI
MyFirst_Hello(IN EFI_MYFIRST_PROTOCOL *This)
{
	DEBUG((EFI_D_INFO, L"Hello World wy\n"));
	return EFI_SUCCESS;
}


EFI_STATUS EFIAPI
MyProtocolEntry(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE   *SystemTable )
{
	EFI_STATUS       Status;
	EFI_MYFIRST_PROTOCOL *MyFirstDriver = NULL;
	MyFirstDriver->Revision = 1;
	MyFirstDriver->MyFirst_HelloWorld = MyFirst_Hello;

	//Install an instance of EFI MYPROTOCOL into its own HANDLE

	Status = gBS->InstallProtocolInterface(
		&ImageHandle,
		&gEfiMyFirstProtocolGuid,
		EFI_NATIVE_INTERFACE,
		MyFirstDriver
	);

	if (Status == EFI_SUCCESS)
	    DEBUG((EFI_D_INFO, L"install succeess\n"));
	else
	    DEBUG((EFI_D_INFO, L"nstall failed\n"));
	return EFI_SUCCESS;
}
  1. firstprotocol.h
#include<Uefi.h>
#include<Library/DebugLib.h>
#include<Library/UefiBootServicesTableLib.h>
#include<Library/UefiDriverEntryPoint.h>

#ifndef _EFI_MYFIRSTDRIVER_H_
#define _EFI_MYFIRSTDRIVER_H_


#define EFI_MYFIRST_PROTOCOL_GUID \
  {0xcd33ac22, 0x5ee3, 0x487d, { 0x91, 0x4f, 0xff, 0xfe, 0x64, 0xcd, 0xa, 0x3a } }



typedef struct _EFI_MYFIRST_PROTOCOL EFI_MYFIRST_PROTOCOL;
 typedef  EFI_MYFIRST_PROTOCOL EFI_MYPROTOCOL;


 typedef EFI_STATUS(EFIAPI *EFI_MYFIRST_HELLOWORLD)(IN EFI_MYPROTOCOL *This);

struct _EFI_MYFIRST_PROTOCOL {
UINT64       Revision;
EFI_MYFIRST_HELLOWORLD   MyFirst_HelloWorld;
}; 


extern EFI_GUID gEfiMyFirstProtocolGuid;
#endif  

服务使用

  1. locateprotocol.c
#include <firstprotocol.h>

EFI_STATUS EFIAPI
LocateProtocolEntry(IN EFI_HANDLE Image, IN EFI_SYSTEM_TABLE *SystemTable)
{
	EFI_STATUS Status;
	EFI_MYFIRST_PROTOCOL *MyFirstDriver = NULL;
	Status = gBS->LocateProtocol(&gEfiMyFirstProtocolGuid, NULL, (void**)&MyFirstDriver);
	if (!EFI_ERROR(Status))
	{
		Status = MyFirstDriver->MyFirst_HelloWorld(MyFirstDriver);
	}
	else {
		DEBUG((EFI_D_ERROR, "Locate Error\n", Status));
	}
	return EFI_SUCCESS;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UEFI(Unified Extensible Firmware Interface)是一种固件接口标准,用于用于替换传统的BIOS(Basic Input/Output System)固件,旨在提高系统启动速度、安全性和可靠性。 UEFI原理编程完整版PDF是一份详细的技术指南,提供了UEFI开发所需的全部信息,包括如何设计UEFI驱动程序、应用程序和固件,以及如何使用UEFI的各种功能。 这份PDF文件将UEFI划分为四个主要模块:启动服务、管理服务、硬件抽象层和UEFI Shell。每个模块都有详细的描述和示例代码,此外还包含了UEFI的系统架构、数据结构、驱动程序与应用程序的开发方法等内容。 此外,UEFI原理编程完整版PDF还介绍了UEFI与安全性、多核技术、嵌入式系统等方面的关系,并为读者提供了关键的UefiSpec和UefiDebugTools库文档。 总之,UEFI原理编程完整版PDF是一份权威的技术指南,涵盖了UEFI方方面面的内容,非常适合开发人员和工程师学习和参考。 ### 回答2: UEFI(Unified Extensible Firmware Interface)是一种新型的启动编程接口,它替代了旧版的BIOS(基本输入输出系统)。UEFI原理编程可以帮助开发人员理解UEFI的工作原理编程技巧。 UEFI拥有完善的安全性和可靠性,其编程方式也十分灵活。与BIOS相比,UEFI可以支持更多的硬件平台和更大的硬盘容量,同时也可以优化启动速度和程序的执行效率。 UEFI原理编程pdf完整版可以帮助开发人员更好地了解UEFI的概念和架构,并提供丰富的代码示例,帮助开发人员快速掌握UEFI编程技能。除此之外,该书还介绍了UEFI的启动流程、安全策略、UEFI应用的开发和调试等内容,对于想要深入学习UEFI编程的开发人员来说是一本很有价值的参考书。 总之,UEFI原理编程pdf完整版是一本优秀的技术参考书,其内容涵盖了UEFI的方方面面,对于想要深入了解和运用UEFI的开发人员来说具有很高的参考价值。 ### 回答3: UEFI(Unified Extensible Firmware Interface)是一种新型的系统固件接口,它为操作系统与硬件之间提供了一种标准的接口。相比传统的BIOS,UEFI可以支持更多的硬件功能,同时也更加安全和灵活。 UEFI原理主要包括以下几个方面:1、UEFI接口包括了启动管理器,硬件抽象层,运行环境和应用层等模块;2、UEFI支持模块化设计和驱动加载,可以动态地加载和卸载硬件驱动,提高了系统灵活性和安全性;3、UEFI使用GUID Partition Table(GPT)替代MBR分区表,支持更大的硬盘容量和更稳定的系统启动;4、UEFI还支持Secure Boot功能,可以防止恶意程序篡改启动软件和系统文件,提高了系统安全性。 关于UEFI编程,需要掌握以下几个核心内容:1、UEFI开发环境的搭建,需要熟悉UEFI规范以及系统固件接口的程序编写;2、UEFI应用程序的设计和开发,可以利用UEFI提供的应用程序接口(API)或者开发自定义的应用程序;3、UEFI驱动程序的编写,需要掌握UEFI驱动程序的架构和编程模型;4、UEFI启动管理器的开发,需要熟悉UEFI启动管理器的设计和实现。 总之,UEFI是一种新型的系统固件接口,可以为操作系统和硬件提供一个标准的接口,提高系统的安全性和灵活性。对于UEFI编程的学习和掌握,则需要对UEFI规范和程序设计有深入的了解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值