Ubuntu搭建UEFI开发环境(编译运行环境部署)

Ubuntu搭建UEFI开发环境(编译运行环境部署)

1、Ubuntu系统环境预备

sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install make
sudo apt-get install python
sudo apt-get install nasm
sudo apt-get install iasl
sudo apt-get install qemu
sudo apt install build-essential
sudo apt install uuid-dev

注意事项:Ubuntu系统版本越高,sudo apt-get install gcc/g++的默认版本就会比较高,对于高版本的gcc/g++,在编译edk源码时会因版本问题编译失败,需选择合适的gcc/g++版本

如下为笔者的Ubuntu环境,可供参考

请添加图片描述
Ubuntu搭建UEFI开发环境(编译运行环境部署)_第1张图片

2、Edk源码编译(Edk2018)

2.1、BaseTools编译

make -C BaseTools

Ubuntu搭建UEFI开发环境(编译运行环境部署)_第2张图片

注意事项:高版本的Edk源码没有集成Bastools编译所需的Brotli模块,需要开发者自行下载集成。低版本的Edk源码没有移除Brotli模块,笔者这里使用的Edk版本为Edk2018,该版本集成了Brotli模块

//未集成Brotli模块报错信息.
brotli/c/xxx: 没有那个文件或目录

2.2、QemuPkg工程编译

//临时配置系统变量
source edksetup.sh BaseTools
//编译X64 Debug版本的OvmfPkgX64.dsc
build -p OvmfPkg/OvmfPkgX64.dsc -a X64 -t GCC5 -b DEBUG

Ubuntu搭建UEFI开发环境(编译运行环境部署)_第3张图片

2.3、执行qemu-system-x86_64模拟器

//切换到OvmfPkgX64编译生成目录,执行Qemu模拟器
cd Build/OvmfX64/DEBUG_GCC5/FV/
qemu-system-x86_64 -pflash OVMF.fd

请添加图片描述

Ubuntu搭建UEFI开发环境(编译运行环境部署)_第4张图片

3、自定义编译脚本

  • UEFI使用模拟器开发过程中,为便于编译执行查看结果 ,可编写一个简单的shell脚本,方便后续开发学习!

#/bin/bash
# build_qemu.sh init(编译BastTools)
# build_qemu.sh build(编译OvmfPkgX64)
# build_qemu.sh run(执行Qemu模拟器)
# build_qemu.sh clean(清除编译文件)

EDK2_TOOLCHAIN=GCC5
EDK2_ARCH=X64
EDK2_BUILD=DEBUG
EDK2_DSC=OvmfPkg/OvmfPkgX64.dsc
FD_OUTPUT_DIR=Build/OvmfX64/${EDK2_BUILD}_${EDK2_TOOLCHAIN}/FV
FD_NAME=OVMF.fd

function Usage() {
  echo
  echo "***************************************************************************"
  echo
  echo "Usage: build_qemu.sh  [option]"
  echo
  echo "       option:   build"
  echo "       option:   run"  
  echo "                 init"
  echo "                 clean"
  echo "!!!!!!Please do \"build_qemu.sh init\" before build! first!!!!!!"
  echo "***************************************************************************"
  exit 0
}

if [ "$1" == "init" ];then
    echo "build basetools"
    mkdir Conf
    rm Conf/* -rf 
    cd BaseTools && make clean && cd ../
    source edksetup.sh BaseTools
    make -C BaseTools 
    chmod 777 BaseTools/BinWrappers/PosixLike/*
    exit
elif [ "$1" == "build" ];then
    echo "build OvmfPkgX64.dsc"
    source edksetup.sh BaseTools
    build -p $EDK2_DSC -a $EDK2_ARCH -t $EDK2_TOOLCHAIN -b $EDK2_BUILD
elif [ "$1" == "run" ];then
    qemu-system-x86_64 -pflash $FD_OUTPUT_DIR/$FD_NAME -net none -serial stdio
elif [ "$1" == "clean" ];then
    echo "make clean"
    rm -rf Build
    cd BaseTools && make clean && cd ../
    exit    	
else
    Usage
    exit
fi

附录

//如下为笔者Edk开发Code Base
https://gitee.com/hostid/edk2_develop.git

你可能感兴趣的:(UEFI学习-Basic,ubuntu,linux,服务器)