Ubuntu下搭建UDK2018开发环境

Ubuntu下搭建UDK2018开发环境

简介

截至目前,UDK最新的版本是2018,我就以UDK2018为例,一步一步来搭建UDK2018的编译环境。UDK2018可以从github的网站上下载,链接:https://github.com/tianocore/edk2/releases/tag/vUDK2018。文参考:how-to-build-linux-like-system

UDK相对于EDK2而言,是一个比较稳定的版本,可能一年只更新一次,而EDK2可能几天就会有代码更新。所以一般用来BIOS用的都会选择UDK,如龙芯的BIOS便是UDK2018。UDK的编译环境支持Windows和Linux,这里记录下ubuntu下搭建环境的步骤。

环境搭建

1.下载UDK2018:vUDK2018.zip,下载完解压出来,这里假设解压的目录为UDK2018.

2.下载最新的NASM,用于编译汇编相关的代码:

sudo apt install nasm

3.安装用于编译asl code的工具:

sudo apt install iasl

4.安装OpenSSL* Crypto 库:https://github.com/openssl/openssl/archive/OpenSSL_1_1_0g.zip,下载解压至目录UDK2018\CryptoPkg\Library\OpensslLib,并命名为openssl

5.安装Python

sudo apt install python

6.安装uuid库,编译basetools时需要用到

sudo apt install uuid-dev

编译

  1. 编译BaseTools. 打开控制台进入UDK2018\BaseTools目录,依次执行:
make clean
make -C ./

 

注意:由于最新的ubuntu 内置GCC版本较高(GCC7或GCC9),编译会fail,需要再安装低版本的GCC5,点击下载,下载后使用如下命令安装:

sudo dpkg -i gcc-5-source_5.5.0-12ubuntu1_all.deb
or
apt install gcc-5 -y

 

  1. 返回UDK2018目录,配置编译参数:
source edksetup.sh BaseTools
  1. 测试编译64位 AppPkg模块
build -a X64 -t GCC5 -p AppPkg/AppPkg.dsc

此时报如下错误:

修改Conf/tools_def.txt文件,把GCC编译参数中的-Werror去掉即可。

  1. 测试编译64位 MdeModulePkg 模块 
build -a X64 -t GCC5 -p MdeModulePkg/MdeModulePkg.dsc
  1. 测试编译32位 MdeModulePkg 模块
build -a IA32 -t GCC5 -p MdeModulePkg/MdeModulePkg.dsc

此时会报错,如下:

  /home/nod/Documents/UDK2018/UDK2018/edk2-vUDK2018/Build/MdeModule/DEBUG_GCC5/IA32/MdeModulePkg/Bus/Pci/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupportDxe/DEBUG/IncompatiblePciDeviceSupport.dll unsupported ELF EM_386 relocation 0xa.
GenFw: ERROR 3000: Invalid
  /home/nod/Documents/UDK2018/UDK2018/edk2-vUDK2018/Build/MdeModule/DEBUG_GCC5/IA32/MdeModulePkg/Bus/Pci/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupportDxe/DEBUG/IncompatiblePciDeviceSupport.dll unsupported ELF EM_386 relocation 0x9.
GenFw: ERROR 3000: Invalid

出现这个错误的原因是GCC版本较高的原因,安装一个4.8的就可以编译通过了,可用如下命令安装:

sudo apt-get install gcc-4.8

若提示找不到包是因为Ubuntu版本较高,只能手动安装了,下载地址:https://mirrors.huaweicloud.com/ubuntu/pool/universe/g/,选择名字结尾带_all的包,这才是完整的,其它的会提示缺少依赖。

安装完使用 gcc -v 查看当前GCC版本还是原来的,怎么切换到4.8呢?看这篇文章: Ubuntu下多个GCC版本切换,做完就可以成功编译32位的了.

常用编译参数

上面编译时候带的参数代表什么意思呢?

-a  即architecture,指定编译的架构,可以是X64, IA32, MIPS64EL等

-p  即package,指定要编译的模块,如MdeModulePkg/MdeModulePkg.dsc, AppPkg/AppPkg.dsc

-t   即Toolchain, 指定编译工具,一般Windows的编译工具是VS, 如VS2013, Linux下则为GCC,如GCC5,具体所支持的工具可在Conf/tools_def.txt查看到

-b  即build, 指定编译的版本, 可以是RELEASE或DEBUG也可以通过修改Conf/target.txt文件配置默认的参数,这样编译的时候就不用每次都打参数了,直接输入build即可

s

编译和运行edk2中的OVMF,使用虚拟机qemu运行编译效果

1)在edk2目录下执行:

source edksetup.sh BaseTools

2)编译开放虚拟机固件OVMF(这里我选择编译X64架构版本的),在edk2路径下执行如下命令:

build -a X64 -t GCC48 -p OvmfPkg/OvmfPkgX64.dsc

说明:这里可以参考开始的那个链接,其他的教程有时会要求手动更改Conf路径下的target.txt来配置编译目标的配置,再执行source edksetup.sh,但是这里为了方便,直接使用命令行的方式配置,指定GCC48并不是要安装gcc4.8,我这里理解的是gcc7.5中应该有向下编译器版本兼容的宏,所以不需额外再去安装gcc4.8,避免造成问题一的出现。这一步过程比较长,编译完后没有错误即可运行(这里需要安装qemu,安装方式直接sudo apt-get install qemu即可);

3)运行虚拟机固件,启动编译的uefi结果

qemu-system-x86_64 -bios Build/OvmfX64/DEBUG_GCC48/FV/OVMF.fd -M pc -m 256 -cpu qemu64 -vga cirrus -name UEFI -boot order=dc

说明:qemu在不同机器架构的运行版本不一样,我是指定在X86_64架构Ubuntu虚拟机,所以使用qemu-system-x86_64,编译的结果在Build/OvmfX64/DEBUG_GCC48/FV/路径下,运行效果如下图:

https://i-blog.csdnimg.cn/blog_migrate/0fe4244b20d944b119f170f9e7c91878.png

稍等片刻可以进入到如下shell界面(可以按回车或者Esc加快进度)

https://i-blog.csdnimg.cn/blog_migrate/25b8362a2bd1eef127c65555d515abd3.png

让后再shell中输入exit即可进入到我们比较熟悉的uefi配置界面:

https://i-blog.csdnimg.cn/blog_migrate/a99db48da2e32e93fa3f0b53b52e9e46.png

如果想从qemu界面退出,可以按键盘的Ctrl+Alt组合键。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值