部署环境
vmvare15.0 + ubuntu20.04 + docker
edk2 源码
具体步骤
docker安装
# 更新apt软件包索引
sudo apt-get update# 添加docker依赖
sudo apt-get install -y \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common# 添加docker 官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -# 安装docker
sudo apt-get install -y docker-ce docker-ce-cli containerd.io# 检查安装情况
sudo docker --version
安装情况如下
拉取EDK2代码
mkdir docker
cd docker/
touch Dockerfile# 修改Dockerfile文件
sudo gedit Dockerfile
复制下方内容并粘贴到该文件中
# 使用基础的 Ubuntu 镜像
FROM ubuntu:latest# 设置工作目录
WORKDIR /workspace# 更新 apt 软件包索引并安装所需软件包
RUN apt-get update && apt-get install -y \git \python3 \uuid-dev \nasm \bison \flex \build-essential \x11proto-xext-dev \libx11-dev \libxext-dev# 下载 EDK2 及其他必要开发包
RUN 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# 更新 SubModule
RUN cd edk2 && git submodule update --init# 编译 BaseTools
RUN make -C edk2/BaseTools PYTHON_COMMAND=/usr/bin/python3# 编译 ACPICA
RUN make -C acpica/# 设置开发工具地址RUN echo "export WORKSPACE=\$PWD" >> /workspace/myexport.sh \&& echo "export PACKAGES_PATH=\$PWD/edk2:\$PWD/edk2-libc" >> /workspace/myexport.sh \&& echo "export IASL_PREFIX=/workspace/acpica/generate/unix/bin/" >> /workspace/myexport.sh \&& echo "export PYTHON_COMMAND=/usr/bin/python3" >> /workspace/myexport.sh \&& echo "source edk2/edksetup.sh" >> /workspace/myexport.sh# 设置脚本可执行权限
RUN chmod +x /workspace/myexport.sh# 设置环境变量
ENV WORKSPACE=/workspace
ENV PACKAGES_PATH=/workspace/edk2:/workspace/edk2-libc
ENV IASL_PREFIX=/workspace/acpica/generate/unix/bin/
ENV PYTHON_COMMAND=/usr/bin/python3
编译
- 拉取EDK2的github source并编译为Docker镜像,命名为edk2_dev_env,版本号为1.0,前方的镜像命名必须为小写,缩写含义为(EDK2_Development_Environment):
sudo docker build -t edk2_dev_env:1.0 .
编译结果如下:
- 启动生成的镜像
sudo docker run -it --name container_edk2_dev_env edk2_dev_env:1.0
- 运行镜像
build -p edk2/EmulatorPkg/EmulatorPkg.dsc -t GCC5 -a X64
qemu运行
# 安装 qemu
sudo apt-get install qemu-system-x86# 生成OVMF固件
build -p edk2/OvmfPkg/OvmfPkgX64.dsc -a X64 -t GCC5
cd Build/OvmfX64/DEBUG_GCC5/FV/
qemu-system-x86_64 -bios OVMF.fd -nographic# qemu界面 使用 Ctrl+A 然后 X 退出
# docker界面 使用 exit退出
运行效果
参考文献
- 【UEFI】使用Docker快速部署EDK2开发环境
- 「Coding Tools」 第3话 Ubuntu下EDK2开发环境搭建
- ubuntu20.04下搭建EDK2开发环境 - 闹闹爸爸 - 博客园
- UEFI EDK2 Ubuntu20.04上环境搭建记录与踩坑_edk2支持的gcc版本-CSDN博客
常见docker指令
sudo docker ps -a 显示所有正在运行和已停止的 Docker 容器的列表sudo docker rm container_name/id 删除容器(提供名称或ID)sudo docker restart container_name/id 重新启动容器(提供名称或ID)sudo docker exec -it container_name/id /bin/bash 以命令行的形式执行容器sudo docker images 显示所有Docker镜像的列表sudo docker rmi image_name/id 删除镜像(提供名称或ID)