UEFI学习之第一个应用程序“HelloWorld”

引言:从理论到实践的第一步

在初步了解UEFI的基本概念和工程结构后,编写第一个"Hello World"应用程序是掌握UEFI开发的关键一步。这个看似简单的程序将带您深入UEFI应用的运行机制,揭开固件层开发的神秘面纱。通过本文,您将完成从环境搭建到代码运行的完整开发闭环。


一、开发环境准备

        我使用的Ubuntu 20.4搭建的开发环境,网上有很多教程可以参考,这边对于环境的搭建就不再做过多的赘述.

二、编写Hello World程序

2.1HelloWorld.c

#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/UefiBootServicesTableLib.h>

EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
  Print(L"Hello, World!\n");//打印函数
  //使用ConOut输出协议输出
  SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello, World!\n");
  
  return EFI_SUCCESS;
}

2.2HelloWorld.inf

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = HelloWorldApp
  FILE_GUID                      = cf4365b2-d5f3-4598-862c-7625ec71e1a2
  MODULE_TYPE                    = UEFI_APPLICATION
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = UefiMain

[Sources]
  HelloWorld.c

[Packages]
  MdePkg/MdePkg.dec

[LibraryClasses]
  UefiLib
  UefiBootServicesTableLib
  UefiApplicationEntryPoint

三、工程配置与编译

3.1 平台配置文件

edk2/OvmfPkg/OvmfPkgX64.dsc

3.2 编译命令

编译OVmf同时也生成我们所需要的HelloWorldApp.efi,也可以在edk2目录下创建自己Package,创建对应的包声明文件(.dec)、包配置文件(.dsc)

build  -p edk2/OvmfPkg/OvmfPkgX64.dsc -t GCC5 -a X64

四、运行与调试

4.1 生成文件路径

Build/OvmfX64/DEBUG_GCC5/X64/HelloWorldApp.efi

4.2 使用QEMU测试

bios.bin就是Ovmf生成的镜像OVMF.fd(Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd)

hda-contents就是将对应的.efi文件拷贝到这里

debug.log对应的就是调试日志

run.sh对应的就是qemu得运行脚本,可自行更改对应的选项

配合OVMF镜像启动:

qemu-system-x86_64 -bios bios.bin -net none -drive format=raw,file=fat:rw:hda-contents -serial stdio -m 2048  -enable-kvm -smp 2 -vga qxl -cpu host

4.3 运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值