世界热点!UEFI开发环境搭建(踩坑指南)

时间:2023-02-28 17:15:12 来源: 哔哩哔哩

参考内容

「Coding Tools」 第3话 Ubuntu下EDK2开发环境搭建 - 哔哩哔哩 (bilibili.com)


【资料图】

「Coding Tools」 第4话 如何使用Qemu虚拟机运行EDK2编译结果 - 哔哩哔哩 (bilibili.com)

《UEFI编程实践》- 罗冰 机械工业出版社

环境:

vmware 17

ubuntu 22.04(不建议使用20.04以下的环境)

1、 安装依赖工具

apt install python3 (建议使用python3不要使用python2)

apt install python3-distutils

apt install uuid-dev

apt install nasm(必须2.15及以上)

apt install bison

apt install flex

apt install iasl(不要使用acpica! 可能会导致编译OVMF镜像时路径错误)

2、 下载开发包

mkdir ~/UEFI

cd ~/UEFI

git clone http://github.com/tianocore/edk2.git

git clone http://github.com/tianocore/edk2-libc.git

3、 配置编译环境

cd edk2

git submodule update –init (此时会遭遇多次失败,不要怀疑自己,重复几次即可,使用科学上网有概率提高成功率)

make -C BaseTools (成功会提示OK)

新建脚本配置环境方便多次使用 vim initedk.sh 内容为:

cd $home/~/UEFI/edk2

export EDK_TOOLS_PATH=$home/~/UEFI/edk2/BaseTools

source edksetup.sh BaseTools

export PYTHON_COMMAND=/usr/bin/python3(若默认python环境为2可加此条,一般不用)

4、 编译UEFI模拟器

本文只编译64位模拟器,qemu及应用程序,若要编译32位程序使用命令-a IA32,目前遇到的问题是使用64位机器编译32位程序仍然会从64位的基础库中查找依赖,理论解决方法是将32位的依赖库添加一个硬链接(暂未解决)。

source initedk.sh

build -p edk2/EmulatorPkg/EmulatorPkg.dsc -t GCC5 -a X64

或者修改edk2/Conf目录下的target.txt

以done标志成功

编译完成后生成的文件在~ /UEFI/edk2/Build/EmulatorX64/DEBUG_GCC5/X64中

可执行文件./Host

5、 编译OVMF镜像及GDB调试

以MdeModulePkg的HelloWorld为目标调试工具

5.1添加调试代码

编辑HelloWorld源码目录在

~/UEFI/edk2/MdeModulePkg/Application/HelloWorld/HelloWorld.c

添加头文件声明

#include <Library/DebugLib.h>

主程序中添加获取程序入口地址代码

DEBUG ((EFI_D_INFO, "HelloWorld:My Entry point is 0x%08x\n", (CHAR16*)UefiMain ));

接着编辑OvmfPkg.dsc,文件路径在

~/UEFI/edk2/OvmfPkg/OvmfPkgX64.dsc

在[Components]下添加代码

MdeModulePkg/Application/HelloWorld/HelloWorld.inf{

<LibraryClasses>

DebugLib|MdePkg/Library/UefiDebugLibConOut/UefiDebugLibConOut.inf

}

5.2编译OVMF镜像

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

以done标志成功,编译完成的文件在~/edk2/Build/OvmfX64/DEBUG_GCC5中,镜像文件在此目录下的FV中,HelloWorld二进制文件在此目录下的X64中。

5.3准备qemu环境

~/UEFI  mkdir ovmf_dbg

cd ovmf_dbg

cp edk2/Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd ./

cp mkdir hda_contents

cp edk2/Build/OvmfX64/DEBUG_GCC5/X64/HelloWorld.* ./had_contents

5.4启动qemu

qemu-system-x84_64 -s -pflash OVMF.fd -hda fat:rw:hda_contents/ -net none

-debugcon file:debug.log -global isa-debugcon.iobase=0x402

可能会提示

把他装了就完了,进入Shell,执行HelloWorld.efi,执行过程会同步将调试信息输出到debug.log

打开日志文件,查找加载驱动的指针地址Loading driver point   

5.5 GDB挂载调试

计算偏移地址

text = 0x61D2000+0x0000240 = 0x61D2240

data = 0x61D2000+0x0000240+0x0002080 = 0x61D42c0

加载符号,设定断点,并将GDB挂载到QEMU上

回到Shell,再次运行HelloWorld.efi,断点被命中,gdb程序同步运行,可进行后续调试工作。

至此环境搭建确认完成,可以正常使用调试。

标签: 开发环境 哔哩哔哩 正常使用

精彩推送

龙须沟原貌_龙须沟被授予什么称号|环球聚看点

1、1951年12月北京市人民政府授予老舍“人民艺术家”的称号。2、 "京味小说 "的开创者-------------

来源:2023.02.18

中设股份:具备承接方舱医院建设勘察设计能力并参与部分相关建设

中设股份11月25日在投资者互动平台表示,公司具备承接方舱医院建设的勘察设计能力并参与了部分相关建设。

来源:2023.02.18

观天下!治疗过敏鼻炎的药物是_治疗过敏鼻炎的药物

1、过敏性鼻炎又称过敏性鼻炎,是机体对过敏原产生反应后,鼻腔内发生的一系列反应。2、临床选药要结合...

来源:2023.02.18

2月17日基金净值:景顺景颐嘉利6个月持有期债券A最新净值1.1418,跌0.09%_天天快消息

2月17日,景顺景颐嘉利6个月持有期债券A最新单位净值为1 1418元,累计净值为1 1418元,较前一交易日下...

来源:2023.02.18

oppo手机怎么分屏幕_oppo手机怎么分屏

1、分屏功能可以把屏幕一分为二,视频、聊天两不误。2、分屏功能怎么打开进入“设置”--“其他设置”--...

来源:2023.02.17

2022中国正能量“五个一百”网络精品征集评选展播活动 用图片讲述正能量故事

2022中国正能量“五个一百”网络精品征集评选展播活动“百幅网络正能量图片”征集进行时,用图片力量诠...

来源:2023.02.17

前瞻性通胀指标1月反弹 美国对抗通胀遭遇挫折!-速读

综合报道,美国劳工统计局16日发布的报告显示,衡量批发价格水平的生产者价格指数(PPI)1月环比上涨0 7%,创下202

来源:2023.02.17

在云端影评_如何评价在云端

欢迎观看本篇文章,小升来为大家解答以上问题。在云端影评,如何评价在云端很多人还不知道,现在让我们...

来源:2023.02.17

春节租车市场火爆,新能源车企能否押注“汽车租赁”?

近两年来,新能源汽车市场一路狂飙,2021-2022年,我国新能源车的销量分别为352 1万辆和688 7万辆,同...

来源:2023.02.17

新闻快讯

X 关闭

X 关闭

新闻快讯