1.基础专栏-3.EDK2的环境及搭建-《计算机知识》

admin 2025-11-02 22:14:42 系统网络 来源:ZONE.CI 全球网 0 阅读模式
  • 相关资料
  • 学习目标
  • UEFI和EDK2介绍
    • TianoCore介绍">TianoCore介绍
    • TianoCore Wiki内容
  • EDK2 环境
    • 开发环境搭建(Ubuntu)
    • UEFI启动(TBD)
    • UEFI Shell制作(TBD)
    • 目录说明
  • FAQ:
    • 找不到Trim:
    • 找不到xlib.h
  • include

    相关资料

    • 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)

    • EDK2开发环境搭建
    • 官方文档
    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 提供编译相关的工具用于EDK和EDK2,比如:AutoGen, Build, GenSec, GenFV, GenFW, GenRds工具。
    15. ├── CorebootModulePkg Coreboot原本和UEFI/BIOS是竞争关系,但是现在Coreboot也逐渐向UEFI标准靠拢,
    16. 目前依靠此包可以轻松从coreboot启动到UEFI,Coreboot Support Modules包含了如下代码:
    17. 用来解析coreboot table的代码,
    18. 报告存储器/IO资源的代码,
    19. 安装acpi table和smbios 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

    01-shell脚本介绍-《shell脚本》 系统网络

    01-shell脚本介绍-《shell脚本》

    一、shell脚本是什么二、为什么要学shell,而不是其他计算机语言三、学习这门课程的优势四、学了能干什么五、学习什么内容六、学习的技巧七、成长路径八、学习环
    评论:0   参与:  25