![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
UEFI
文章平均质量分 71
BIOS UEFI EDK2
90geek
黎明前最黑暗,胜利前最绝望,成功前最渺茫,所以在感觉到吃力的时候成功即将到来!
展开
-
UEFI 之 Virt-Manage 验证OVMF
概要EDK2 中编译出来的OVMF可以使用qemu运行验证,这也是UEFI调试的虚拟环境qemu-system-x86_64 -bios OVMF.fd,但是在使用网络相关调试的时候,qemu就比较繁琐了,需要创建虚拟网卡,设置桥接等;Virt-manage就是一个qemu的管理器,也可以用KVM搭建虚拟环境,有完善的配置网络环境,所以想用Virt-Manage跑OVMF;Virt-Manage UEFI其实跑的是OVMF_VARS.fd 和 OVMF_CODE.fd 而不是OVMF.fd,文件的位置是/u原创 2022-01-16 12:00:00 · 1783 阅读 · 0 评论 -
uefi 之 VirtualBox搭建验证efi环境
概要VirtualBox是一个虚拟环境,不管是windows还是Linux可以搭建,这里要搭建使用这个虚拟环境去验证我们编译的efi文件,用虚拟机搭建主要是为了虚拟机中完善的网络环境,验证网络可以验证网络efi驱动;环境x86/deepin v20应用商店安装 VirtualBox如下版本配置创建VHD盘,也就是虚拟机盘;新建格式选择的是VHD和VMDK都可以;创建完成不要运行;对虚拟机进行设置启动efi,默认是不开启的,这里启动的是virtualBox自己的uefi启动可以看出来FS1 是我们新建的vhd原创 2022-01-16 00:04:08 · 2850 阅读 · 0 评论 -
UEFI 之 redfish
概要Redfish是一种基于HTTPs服务的管理标准,利用RESTful接口实现设备管理。每个HTTPs操作都以UTF-8编码的JSON格式(JSON是一种key-value对的数据格式)提交或返回一个资源或结果,就像Web应用程序向浏览器返回HTML一样。该技术具有降低开发复杂性,易于实施、易于使用而且提供了可扩展性优势,为设计灵活性预留了空间。目前我们利用Redfish管理接口可以实现包括用户管理、获取服务器信息、管理模块信息等常用HDM和BIOS配置。RedFish标准由DMTF组织的SPMF论坛维护原创 2022-01-09 20:11:40 · 3620 阅读 · 0 评论 -
UEFI 之 代码执行uefi shell命令
概要这需求就是类似于linux系统下的系统调用接口system("command")EDK中实现Shell protocol 实现包含协议[Protocols] gEfiShellProtocolGuid ## CONSUMESDemoEFI_STATUSEFIAPIUefiMain ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE原创 2021-12-30 17:58:18 · 2306 阅读 · 0 评论 -
uefi 之 ramdisk
ramdisk一般指虚拟内存盘。虚拟内存盘是通过软件将一部分内存(RAM)模拟为硬盘来使用的一种技术;EDK中支持ramdisk协议的`gEfiRamDiskProtocolGuid`,bootManage,httpboot使用;原创 2021-12-14 13:59:34 · 2650 阅读 · 3 评论 -
UEFI之虚拟环境(OVMF)
概要模拟器平台介绍 :一个仿真平台并不是一个实际的硬件平台 , 但它旨在证明 EDKII 核心模块的稳定性和独立于硬件可以开发模块。仿真平台和实际平台之间的差异是其加载器和仿真的硬件设备。OvmfPkg 是基于qemu的虚拟环境,Linux 和 Windows都可以使用源码git clone https://github.com/tianocore/edk2.gitcd edk2git submodule update --initcd ..qemu需要安装qemuapt insta原创 2021-06-06 23:07:13 · 3801 阅读 · 5 评论 -
UEFI之VFR
概述UEFI用户交互界面的实现涉及到多种不同类型的文件,这里要讲的是VFR(Visual Forms Representation)文件,相比UNI文件它要复杂得多,理解起来也更困难。UEFI交互界面那些字符串是来自UNI文件的(其实并不是全部来自UNI,也有部分是直接通过代码生成的),而整个窗体的框架部分则是来自VFR文件的。在UEFI中,构成这样的窗体的组件大致有四种,分别是Strings,Forms,Fonts和Images,如下图所示:Strings就是UNI文件提供的,Forms就是本文原创 2021-06-06 22:55:44 · 3893 阅读 · 1 评论 -
UEFI之Basetools技巧总结
概要在EDK2中没有编写Makefile的过程,终止是通过Basetools生成编译文件和Makefile的,但是在我们使用中总是感觉没有使用Makefile顺手,所以这里进行总结;生成静态库进行编译这个过程就是,我编译生成一个静态库.lib文件,然后提供别人或自己在以后的编译中使用,省去了重新编译的时间,也可以实现只提供静态库和.h给别人使用;这里以OpensslLib.inf为例,由于OpensslLib编译非常的慢,所以我就将它做成了一个静态库;[Defines] INF_VERSION原创 2021-06-06 22:51:51 · 1602 阅读 · 0 评论 -
UEFI 之 EDK2 环境的搭建
下载代码下载代码主要是在githun,但需要说明的是,直接克隆的代码是不完整的,少好多的子目录和StdLib等;克隆代码:git clone https://github.com/tianocore/edk2.git克隆子目录代码cd edk2git submodule update --init更新子目录代码cd edk2git pullgit submodule update如果无法更新就加这个参数--recursive子目录包括CryptoPkg/Lib原创 2021-06-06 21:16:51 · 1145 阅读 · 1 评论 -
UEFI 之 HelloWorld
基础的Hello Worldmain.c/*main.c */#include <Uefi.h>#include <Library/UefiLib.h>#include <Library/UefiApplicationEntryPoint.h>EFI_STATUSEFIAPIUefiMain ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *Syst原创 2021-06-06 21:14:07 · 742 阅读 · 0 评论 -
UEFI之虚拟环境搭建(EmulatorPkg)
概要模拟器平台介绍 :一个仿真平台并不是一个实际的硬件平台 , 但它旨在证明 EDKII 核心模块的稳定性和独立于硬件可以开发模块。仿真平台和实际平台之间的差异是其加载器和仿真的硬件设备。Emulator虚拟环境,用来取代Nt32Pkg和UnixPkg,可以跨平台编译运行的一个虚拟器。源码git clone https://github.com/tianocore/edk2.gitcd edk2git submodule update --initcd ..环境1.更新软件源,sudo原创 2021-06-06 21:10:27 · 1678 阅读 · 1 评论 -
UEFI之edk2 目录说明
edk2中的子目录AppPkgUEFI Application Development Kit是一系列用来进行uefi app开发的套件,标准依赖库,工具以及demo,目标是降低UEFI app的开发门槛。MdePkg全称为“Module Development Environment Package”,这是一个特殊的package,包含了用于开发一个module所需要的最小环境。一个module可能也会依赖于其他的Package,但是所有modules必须依赖于MdePkg。MdeModuleP原创 2021-06-06 21:08:32 · 1324 阅读 · 0 评论 -
UEFI 之 Capsule Update (固件更新)
概要什么是UEFI Capsule Update呢?Capsule,顾名思义,是“胶囊”的意思,所以UEFI Capsule Update可以理解为胶囊式固件更新。UEFI规范定义了Firmware Management Protocol(FMP)、capsule格式以及EFI System Resource Table (ESRT) 用于支持系统和设备固件更新。使用FMP协议可以获取固件信息并且把ESRT报告给OS。出于安全性考虑,Flash设备在系统启动时是锁住的,所以在操作系统中直接更新Flas原创 2021-06-06 21:05:20 · 12531 阅读 · 10 评论 -
error: conflicting types for ‘UefiMain’
error: conflicting types for ‘UefiMain’EDK2 中添加自己的inf,编译出现如下问题,主要说.c 和.h 冲突了,怎么也想不明白/home/zhubo/loongson/02-code/edk2/Demo/01_helloworld/main.c:7:1: error: conflicting types for ‘UefiMain’ UefiMain ( ^In file included from <command-line>:0:0:/h原创 2020-10-28 16:23:38 · 614 阅读 · 1 评论