相关资料

参考文章下载地址:
链接: 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)

  1. # 下载安装
  2. git clone https://github.com/tianocore/edk2.git
  3. cd edk2
  4. git checkout --track origin/UDK2018
  5. sudo apt-get install build-essential uuid-dev nasm
  6. # 编译工具tools
  7. export WORKSPACE=$(realpath ./)
  8. echo $WORKSPACE
  9. make -C $WORKSPACE/BaseTools
  10. # set environment
  11. cd $WORKSPACE
  12. source edksetup.sh
  13. # 编译模拟器
  14. build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a X64 -b DEBUG -t GCC5 -D BUILD_64 -D UNIX_SEC_BUILD -n 3
  15. # Shell
  16. 已经有了: edk2\EdkShellBinPkg\FullShell 各版本的Shell都有,放到U盘改名: /EFI/BOOT/BOOTx64.EFI启动即可
  17. # 建立仿真环境
  18. export WORKSPACE=$(realpath ./)
  19. source edksetup.sh
  20. build -p OvmfPkg/OvmfPkgX64.dsc -a X64 -b DEBUG -t GCC5 -D BUILD_64 -n 3
  21. # 直接运行仿真环境
  22. qemu-system-x86_64 -bios ./Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd -debugcon \
  23. file:debug.log -global isa-debugcon.iobase=0x402 -m 512 -enable-kvm
  24. # 建立仿真环境并与Qemu文件交互
  25. 这里先创建一个共享盘,用来方便在进入UEFI Shell后共享自己的文件
  26. dd if=/dev/zero of=app.disk bs=1 count=1 seek=1024K
  27. sudo mkfs.vfat app.disk
  28. sudo mkdir /mnt/mnt_app -p
  29. sudo mount app.disk /mnt/mnt_app/
  30. # sudo cp ../edk2/Build/OptionRomPkg/DEBUG_GCC5/X64/OromHello.rom /mnt/mnt_app/ 自己得测试程序
  31. sudo qemu-system-x86_64 -bios ./Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd -debugcon \
  32. file:debug.log -global isa-debugcon.iobase=0x402 \
  33. -serial file:serial.log -hda app.disk -m 512 -enable-kvm

UEFI启动(TBD)

UEFI Shell制作(TBD)

目录说明

edk2中子目录介绍 中描述了各个PKG目录的作用,以及对应平台;

Coreboot和UEFI的关系

3. EDK2的环境及搭建 - 图1

下边详情列举下目录(持续更新中)

  1. (base) baiy@inno-MS-7B89:edk2$ git remote -v
  2. origin https://github.com/tianocore/edk2.git (fetch)
  3. origin https://github.com/tianocore/edk2.git (push)
  4. (base) baiy@inno-MS-7B89:edk2$ git br
  5. * UDK2018
  6. # 注: 下边调整了下目录顺序,并删了暂时OvmfPkg无用的包,因为有很多架构相关包 单独分离出来
  7. (base) baiy@inno-MS-7B89:edk2$ tree -L 1
  8. .
  9. !!! 通用模块package
  10. ├── AppPkg UEFI Application Development Kit是一系列用来进行uefi app开发的套件,标准依赖库,工具以及demo,目标是降低UEFI app的开发门槛。
  11. ├── MdePkg Module Development Environment Package”,这是一个特殊的package,包含了用于开发一个module所需要的最小环境。
  12. 一个module可能也会依赖于其他的Package,但是所有modules必须依赖于MdePkg
  13. ├── MdeModulePkg 提供符合UEFI/PI工业标准的模块,也提供该标准相关的开发环境,PPIs/PROTOCOLs/GUIDs和依赖库。
  14. ├── BaseTools 提供编译相关的工具用于EDKEDK2,比如:AutoGen, Build, GenSec, GenFV, GenFW, GenRds工具。
  15. ├── CorebootModulePkg Coreboot原本和UEFI/BIOS是竞争关系,但是现在Coreboot也逐渐向UEFI标准靠拢,
  16. 目前依靠此包可以轻松从coreboot启动到UEFICoreboot Support Modules包含了如下代码:
  17. 用来解析coreboot table的代码,
  18. 报告存储器/IO资源的代码,
  19. 安装acpi tablesmbios table EFI系统表中的代码。
  20. 它位于uefi环境和hardware的中间层。
  21. ├── CorebootPayloadPkg 用来加载上层UEFI环境的中间层,Hardware->Coreboot->CorebootPayloadPkg->UEFI->HLOS
  22. ├── CryptoPkg UEFI定义了HLOS(high level OS)和平台固件之间的接口,多个安全特性也在2.2版本之后加入其中,此包是用来提供加密支持的。
  23. ├── ShellBinPkg // EDK Shell开发包以及一个官方的EDK Shell实现,这两个包已经在被Shell 2.x逐渐取代了。
  24. ├── ShellPkg Shell 2.x版本开发包以及一个官方的UEFI Shell 实现。
  25. ├── OvmfPkg // X86下仿真 使用OvmfPkg
  26. ├── BeagleBoardPkg
  27. ├── Build // !!! 编译程序的目标位置,就放在这里
  28. ├── BuildNotes2.txt
  29. ├── Conf
  30. ├── Contributions.txt
  31. ├── DuetPkg
  32. ├── EdkCompatibilityPkg
  33. ├── edksetup.bat
  34. ├── edksetup.sh // !!! 环境变量,测试前必须西安执行这个脚本
  35. ├── EdkShellBinPkg
  36. ├── EdkShellPkg
  37. ├── EmbeddedPkg
  38. ├── EmulatorPkg
  39. ├── FatBinPkg
  40. ├── FatPkg
  41. ├── FmpDevicePkg
  42. ├── IntelFrameworkModulePkg
  43. ├── IntelFrameworkPkg
  44. ├── IntelFsp2Pkg
  45. ├── IntelFsp2WrapperPkg
  46. ├── IntelFspPkg
  47. ├── IntelFspWrapperPkg
  48. ├── IntelSiliconPkg
  49. ├── License.txt
  50. ├── Maintainers.txt
  51. ├── NetworkPkg
  52. ├── Nt32Pkg
  53. ├── Omap35xxPkg
  54. ├── OptionRomPkg
  55. ├── PcAtChipsetPkg
  56. ├── QuarkPlatformPkg
  57. ├── QuarkSocPkg
  58. ├── Readme.md
  59. ├── SecurityPkg
  60. ├── SignedCapsulePkg
  61. ├── SourceLevelDebugPkg
  62. ├── StdLib
  63. ├── StdLibPrivateInternalFiles
  64. ├── UefiCpuPkg
  65. ├── UnixPkg
  66. ├── Vlv2DeviceRefCodePkg
  67. └── Vlv2TbltDevicePkg

FAQ:

找不到Trim:

Trim命令在EDKII中,将命令放到环境变量中,一了百了

  1. PATH=/home/share/workspace/edk2/BaseTools/BinWrappers/PosixLike/:$PATH

找不到xlib.h

include

  1. 切换ubuntu本地源,
  2. sudo apt-get install libghc-x11-dev