【UEFI】使用Docker快速部署EDK2开发环境

最近换了OA,重新配置EDK2开发环境让我窒息,因此我决定把整个EDK2的开发环境打包在Docker镜像中,方便在不同设备上快速构建开发环境,也方便后续对开发环境镜像更新。

1 Linux下的部署方法

主逻辑:

① 安装Docker,基于Ubuntu 20.04

② 创建Dockerfile

③ 编译Docker镜像

④ 启动Docker容器

1.1 安装Docker

1.1.1 卸载旧版本 (如果适用)

如果你之前安装过旧版本的 Docker,首先需要卸载它们。可以使用以下命令来执行卸载:

sudo apt-get remove docker docker-engine docker.io containerd runc

1.1.2 更新 apt 软件包索引

确保你的系统上的 apt 软件包索引是最新的:

sudo apt-get update

1.1.3 安装依赖软件包

Docker 需要一些依赖软件包来正常运行,你可以通过以下命令安装它们:

sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

1.1.4 添加 Docker 的官方 GPG 密钥

添加 Docker 官方 GPG 密钥以验证下载的 Docker 软件包的完整性:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

1.1.5 添加 Docker APT 仓库

添加 Docker APT 仓库以便于从它安装 Docker:

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

1.1.6 更新 apt 软件包索引

再次更新 apt 软件包索引以确保你已经添加的 Docker 仓库已经被包含:

sudo apt-get update

1.1.7 安装 Docker

安装 Docker 软件包:

sudo apt-get install -y docker-ce docker-ce-cli containerd.io

1.1.8 检查安装情况

现在 Docker 已经安装完成。你可以通过运行以下命令来验证 Docker 是否已经正确安装:

sudo docker --version

1.2 创建Dockerfile

构建Dockerfile有两种情况,1:拉取github上EDK2的最新source,并直接基于ubuntu20.04进行实时环境搭建并编译镜像;2:直接将本地已搭建好的EDK2的开发环境打包成镜像。我把两种方案都做一遍,但实际工作中只需要任选其一即可,没有优劣,看实际需要决定。

1.2.1 拉取EDK2最新source并编译docker镜像

在ubuntu的桌面上新建名为docker的文件夹并创建Dockerfile:

mkdir docker

cd docker/

touch Dockerfile

开始修改Dockerfile:

sudo gedit Dockerfile

复制下方内容并粘贴到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

其实这个部分的逻辑就是之前我基于linux手动搭建开发环境的逻辑,只是通过Dockerfile的方式来自动完成,具体可以对比我之前的文章:【UEFI】Windows和Linux下的环境搭建icon-default.png?t=N7T8https://blog.csdn.net/ZuoYiranSky/article/details/128707666

1.2.2 打包本地开发环境并编译为镜像文件

我的EDK2开发环境放置在/home/dsy/Desktop/UEFIWorkspace/下,在这个文件夹下创建Dockerfile:

touch Dockerfile

开始修改Dockerfile:

sudo gedit Dockerfile

复制下方内容并粘贴到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
   
# 将所需要的文件夹下的所有文件拷贝到容器的 /workspace 目录下
COPY edk2 /workspace/edk2
COPY edk2-libc /workspace/edk2-libc
COPY edk2-platforms /workspace/edk2-platforms
COPY acpica /workspace/acpica
COPY myexport.sh /workspace

# 将当前文件夹下所有文件和文件夹都拷贝到容器的 /workspace 目录下
# COPY . /workspace

需要明确,我的EDK2开发环境是放置在/home/dsy/Desktop/UEFIWorkspace/下的,你们要确认自己的环境位置再针对修改上方路径。

1.3 编译Docker镜像

同样,我把刚刚1.2中的两种不同情况也分开编译。

1.3.1 拉取EDK2的最新source并编译为镜像文件

拉取EDK2的github source并编译为Docker镜像,命名为edk2_dev_env,版本号为1.0,前方的镜像命名必须为小写,缩写含义为(EDK2_Development_Environment):

sudo docker build -t edk2_dev_env:1.0 .

1.3.2 打包本地开发环境并编译为镜像文件

直接在/home/dsy/Desktop/UEFIWorkspace/,开始编译Docker镜像,命名为edk2_dev_env_local,版本号为1.0,前方的镜像命名必须为小写,缩写含义为(EDK2_Development_Environment_Local):

sudo docker build -t edk2_dev_env_local:1.0 .

1.4 启动Docker容器

1.4.1 启动1.3.1中生成的edk2_dev_env:1.0镜像

sudo docker run -it --name container_edk2_dev_env edk2_dev_env:1.0

 接下来就可以正常执行uefi代码编译和开发了。

1.4.2 启动1.3.2中生成的edk2_dev_env_local:1.0镜像

sudo docker run -it --name container_edk2_dev_env_local edk2_dev_env_local:1.0

2 常用命令

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)

  • 47
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Windows 环境下配置 EDK2 开发环境,可以按照以下步骤进行操作: 1. 安装所需的软件和工具: - 下载并安装 Visual Studio(推荐使用 Visual Studio 2019)。 - 下载并安装 Python(推荐使用 Python 3.x 版本)。 - 下载并安装 Git。 2. 克隆 EDK2 代码库: - 打开命令行终端,切换到你希望存放 EDK2 代码的目录。 - 运行以下命令克隆 EDK2 代码库: ``` git clone https://github.com/tianocore/edk2.git ``` 3. 配置环境变量: - 将 Python 安装路径添加到系统环境变量中。例如,将 `C:\Python39` 添加到 PATH 变量中。 - 将 MSBuild 工具添加到系统环境变量中。根据你的 Visual Studio 版本和架构,添加类似以下路径的变量: ``` C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin ``` 4. 构建 BaseTools 工具: - 打开命令行终端,切换到 EDK2 代码库的 `BaseTools` 目录。 - 运行以下命令来构建 BaseTools 工具: ``` python ./Build.py ``` 5. 配置 EDK2 环境: - 打开命令行终端,切换到 EDK2 代码库的根目录。 - 运行以下命令来配置 EDK2 环境: ``` .\edksetup.bat ``` 6. 生成项目文件: - 运行以下命令生成项目文件: ``` build ``` 7. 构建 EDK2: - 运行以下命令来构建 EDK2: ``` build -a [平台架构] -p [平台名称]/[模块名称].dsc ``` 其中,`[平台架构]` 可以是 `IA32`、`X64` 或 `ARM`,`[平台名称]` 和 `[模块名称]` 是你要构建的平台和模块的名称。 完成以上步骤后,你就成功配置了 EDK2 开发环境。你可以根据需要进行修改和编译 UEFI 固件和应用程序。注意,以上步骤仅提供了基本的配置过程,具体的配置和构建步骤可能因个人需求和环境而有所不同。建议参考 EDK2 的官方文档和相关资料进行更详细的配置和使用说明。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值