相关资料
- UEFI原理与编程_戴正华 第二章
- EDK2开发环境搭建
- UEFI社区
- TianoCore
- TianoCore Wiki
参考文章下载地址:
链接: https://pan.baidu.com/s/1LjrydEzCACG3ohpx7mMKKg 提取码: 4i3j
学习目标
本节主要目标:
- 下载和编译EDK2
- 用qemu模拟运行EDK2
- 制作一个U盘EDK2
- 制作U盘让UEFI进入到SHELL中
学会环境部署,便于以后使用
UEFI和EDK2介绍
不同的厂商对UEFI有不同的实现, 一种比较常用的开源实现是EDK2. EDK2是一个遵循UEFI标准和PI标准的跨平台固件开发环境.
所以我们这里看下EDK2即可。
TianoCore介绍
TianoCore社区支持统一可扩展固件接口(UEFI)的开源实现。
EDK II是现代的,功能丰富的跨平台固件开发环境,适用于UEFI和UEFI平台初始化(PI)规范。
详细资料参考: TianoCore Wiki。
TianoCore Wiki内容
EDK2 环境
开发环境搭建(Ubuntu)
# 下载安装
git clone https://github.com/tianocore/edk2.git
cd edk2
git checkout --track origin/UDK2018
sudo apt-get install build-essential uuid-dev nasm
# 编译工具tools
export WORKSPACE=$(realpath ./)
echo $WORKSPACE
make -C $WORKSPACE/BaseTools
# set environment
cd $WORKSPACE
source edksetup.sh
# 编译模拟器
build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a X64 -b DEBUG -t GCC5 -D BUILD_64 -D UNIX_SEC_BUILD -n 3
# Shell
已经有了: edk2\EdkShellBinPkg\FullShell 各版本的Shell都有,放到U盘改名: /EFI/BOOT/BOOTx64.EFI启动即可
# 建立仿真环境
export WORKSPACE=$(realpath ./)
source edksetup.sh
build -p OvmfPkg/OvmfPkgX64.dsc -a X64 -b DEBUG -t GCC5 -D BUILD_64 -n 3
# 直接运行仿真环境
qemu-system-x86_64 -bios ./Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd -debugcon \
file:debug.log -global isa-debugcon.iobase=0x402 -m 512 -enable-kvm
# 建立仿真环境并与Qemu文件交互
这里先创建一个共享盘,用来方便在进入UEFI Shell后共享自己的文件
dd if=/dev/zero of=app.disk bs=1 count=1 seek=1024K
sudo mkfs.vfat app.disk
sudo mkdir /mnt/mnt_app -p
sudo mount app.disk /mnt/mnt_app/
# sudo cp ../edk2/Build/OptionRomPkg/DEBUG_GCC5/X64/OromHello.rom /mnt/mnt_app/ 自己得测试程序
sudo qemu-system-x86_64 -bios ./Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd -debugcon \
file:debug.log -global isa-debugcon.iobase=0x402 \
-serial file:serial.log -hda app.disk -m 512 -enable-kvm
UEFI启动(TBD)
UEFI Shell制作(TBD)
目录说明
edk2中子目录介绍 中描述了各个PKG目录的作用,以及对应平台;
Coreboot和UEFI的关系
下边详情列举下目录(持续更新中)
(base) baiy@inno-MS-7B89:edk2$ git remote -v
origin https://github.com/tianocore/edk2.git (fetch)
origin https://github.com/tianocore/edk2.git (push)
(base) baiy@inno-MS-7B89:edk2$ git br
* UDK2018
# 注: 下边调整了下目录顺序,并删了暂时OvmfPkg无用的包,因为有很多架构相关包 单独分离出来
(base) baiy@inno-MS-7B89:edk2$ tree -L 1
.
!!! 通用模块package
├── AppPkg UEFI Application Development Kit是一系列用来进行uefi app开发的套件,标准依赖库,工具以及demo,目标是降低UEFI app的开发门槛。
├── MdePkg “Module Development Environment Package”,这是一个特殊的package,包含了用于开发一个module所需要的最小环境。
一个module可能也会依赖于其他的Package,但是所有modules必须依赖于MdePkg。
├── MdeModulePkg 提供符合UEFI/PI工业标准的模块,也提供该标准相关的开发环境,PPIs/PROTOCOLs/GUIDs和依赖库。
├── BaseTools 提供编译相关的工具用于EDK和EDK2,比如:AutoGen, Build, GenSec, GenFV, GenFW, GenRds工具。
├── CorebootModulePkg Coreboot原本和UEFI/BIOS是竞争关系,但是现在Coreboot也逐渐向UEFI标准靠拢,
目前依靠此包可以轻松从coreboot启动到UEFI,Coreboot Support Modules包含了如下代码:
用来解析coreboot table的代码,
报告存储器/IO资源的代码,
安装acpi table和smbios table 到EFI系统表中的代码。
它位于uefi环境和hardware的中间层。
├── CorebootPayloadPkg 用来加载上层UEFI环境的中间层,Hardware->Coreboot->CorebootPayloadPkg->UEFI->HLOS
├── CryptoPkg UEFI定义了HLOS(high level OS)和平台固件之间的接口,多个安全特性也在2.2版本之后加入其中,此包是用来提供加密支持的。
├── ShellBinPkg // EDK Shell开发包以及一个官方的EDK Shell实现,这两个包已经在被Shell 2.x逐渐取代了。
├── ShellPkg Shell 2.x版本开发包以及一个官方的UEFI Shell 实现。
├── OvmfPkg // X86下仿真 使用OvmfPkg
├── BeagleBoardPkg
├── Build // !!! 编译程序的目标位置,就放在这里
├── BuildNotes2.txt
├── Conf
├── Contributions.txt
├── DuetPkg
├── EdkCompatibilityPkg
├── edksetup.bat
├── edksetup.sh // !!! 环境变量,测试前必须西安执行这个脚本
├── EdkShellBinPkg
├── EdkShellPkg
├── EmbeddedPkg
├── EmulatorPkg
├── FatBinPkg
├── FatPkg
├── FmpDevicePkg
├── IntelFrameworkModulePkg
├── IntelFrameworkPkg
├── IntelFsp2Pkg
├── IntelFsp2WrapperPkg
├── IntelFspPkg
├── IntelFspWrapperPkg
├── IntelSiliconPkg
├── License.txt
├── Maintainers.txt
├── NetworkPkg
├── Nt32Pkg
├── Omap35xxPkg
├── OptionRomPkg
├── PcAtChipsetPkg
├── QuarkPlatformPkg
├── QuarkSocPkg
├── Readme.md
├── SecurityPkg
├── SignedCapsulePkg
├── SourceLevelDebugPkg
├── StdLib
├── StdLibPrivateInternalFiles
├── UefiCpuPkg
├── UnixPkg
├── Vlv2DeviceRefCodePkg
└── Vlv2TbltDevicePkg
FAQ:
找不到Trim:
Trim命令在EDKII中,将命令放到环境变量中,一了百了
PATH=/home/share/workspace/edk2/BaseTools/BinWrappers/PosixLike/:$PATH
找不到xlib.h
include
切换ubuntu本地源,
sudo apt-get install libghc-x11-dev