部署环境
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)
                











![[NOIP2002]过河卒 标准递归](https://img-blog.csdnimg.cn/direct/f3ada3545ca34585a2becf5b93f7cba6.png)






