UEFI开发——EDK2环境搭建( Ubuntu Linux64 )
目录
2.1 找到python软连接的位置 ( /usr/bin/ )
5. (排坑)安装 X11 库及其扩展,否则edk2编译会报错
6. (排坑)将 NASM 更新到 2.15.x 以上版本,当前的edk2项目需要依赖nasm2.15以上版本,否则编译会报错
一、环境依赖安装
1. 安装 Git
//打开Linux系统的终端,运行
sudo apt install git
//查看版本确认安装成功
git --version
成功输出:
2. 安装Python3
//安装python3,一定要是 3.x.x 版本
sudo apt install python3
//查看版本号确认安装成功
python3 --version
由于Linux系统自带了一个python,我的是Ubuntu18 自带的python2,所以还要建立python3与python的软链接,否则python命令还是调用的python2,只能用python3命令调用,会导致edk2编译失败。
2.1 找到python软连接的位置 ( /usr/bin/ )
2.2 删除旧的python软连接
//打开终端,进入管理员模式
sudo -i
//进入目标文件夹
cd /usr/bin/
//删除python软连接
sudo rm -rf python
2.3 构建新的python软连接
//与python3.6建立软连接
sudo ln -s /usr/bin/python3.6 /usr/bin/python
//验证输出
python --version
成功输出:
3. 安装UUID-DEV、NASM、BISON、FLEX
//下载各项依赖
sudo apt-get install uuid-dev nasm bison flex
4. 安装GCC、MAKE
sudo apt-get install build-essential
gcc --version
make --version
成功输出:
5. (排坑)安装 X11 库及其扩展,否则edk2编译会报错
//安装X11库及其扩展,因为编译模拟器的过程中有源代码需要使用
// #include <X11/**>
sudo apt-get install libx11-dev x11proto-xext-dev libxext-dev
6. (排坑)将 NASM 更新到 2.15.x 以上版本,当前的edk2项目需要依赖nasm2.15以上版本,否则编译会报错
nasm各版本下载链接:http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D 找到合适的版本下载:
下载完成后解压:
进入解压后的文件夹:
cd nasm-2.16
./autogen.sh
./configure
make
make install
//验证是否升级成功
nasm --version
成功输出:
6. 下载EDK2项目以及必要的开发包
//进入桌面,新建一个文件夹,我的是UEFI,进入这个文件夹
cd /home/wby/桌面/UEFI
//从git上拉取EDK2项目文件
git clone http://github.com/tianocore/edk2.git
git clone http://github.com/tianocore/edk2-libc.git
git clone http://github.com/acpica/acpica.git
//然后进入edk2文件夹执行update
cd edk2
git submodule update --init
//这一步会等待较长时间,一定要update成功,否则会编译失败
//因为git项目中很多应用的第三方插件库是以链接的形式存在的
//clone时不会把链接的文件下载,只能通过update下载包含的链接文件
二、编译相关工具
1. 编译ACPICA生成ISAL编译器开发包
//进入桌面UEFI文件夹
cd /home/wby/桌面/UEFI/
make -C ./acpica/
2. 编译BaseTools
//进入edk2文件夹
cd edk2/
make -C edk2/BaseTools
3. 新建 myexport.sh 文件
//进入桌面UEFI文件夹
cd /home/wby/桌面/UEFI
//新建myexport.sh,并打开
vim myexport.sh
//输入以下内容
export WORKSPACE=$PWD
export PACKAGES_PATH=$PWD/edk2:$PWD/edk2-libc
export IASL_PREFIX=$PWD/acpica/generate/unix/bin/
export PYTHON_COMMAND=/usr/bin/python3
export GCC5=/usr/bin/gcc
4. 编译Emulator模拟器
cd /home/wby/桌面/UEFI/
source myexport.sh
source edk2/edksetup.sh
build -p edk2/EmulatorPkg/EmulatorPkg.dsc -t GCC5 -a X64
5. 编译UEFI程序
cd /home/wby/桌面/UEFI/
build -p edk2-libc/AppPkg/AppPkg.dsc -t GCC5 -a X64
开始编译输出:
编译成功输出:
三、运行模拟器执行UEFI程序
//进入编译bild目录
cd /hone/wby/桌面/UEFI/Build/EmulatorX64/DEBUG_GCC5/X64/
//执行Host文件
./Host
成功输出如下:
在UEFI系统中输入 fs0: 进入虚拟器的工作目录:
输入对应的.efi执行:
四、开发流程:
1. UEFI模拟器的 fs0: 对应的文件目录为 桌面/UEFI/Build/EmulatorX64/DEBUG_GCC5/X64/
其中,用户自定义的.efi文件为Hello.efi和Main.efi,其他为系统文件。
2. 开发时,要进入 UEFI/edk2-libc/AppPkg/Applicayions 目录,修改Hello或Main文件夹中的 .c 文件,二者的区别在于依赖的库文件不同。Hello的依赖库相对较小,而Main的依赖库为C语言标准库,更多具体信息可以参考 UEFI/edk2-libc/AppPkg/ReadMe.txt ,见下图:
3. 代码编写完毕后,重新编译。执行
cd /home/wby/桌面/UEFI/
source myexport.sh
source edk2/edksetup.sh
//执行build前必须加上上边的两条source语句
build -p edk2-libc/AppPkg/AppPkg.dsc -t GCC5 -a X64
4. 将build生成的Hello.efi或者是Main.efi(根据自己的设置走)文件,移动到 模拟器工作目录
build结果文件路径:桌面/UEFI/Build/AppPkg/DEBUG_GCC5/X64/
模拟器工作路径 :桌面/UEFI/Build/EmulatorX64/DEBUG_GCC5/X64/
5. 移动文件可以热操作,即不需要关闭模拟器就可以移动.efi文件。移动后,再次输入文件名字即可运行。