UEFI EDK2源码学习(一)——环境安装

news2024/11/16 7:52:17

部署环境

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

安装情况如下
image.png

拉取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

编译

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

编译结果如下:
image.png

  1. 启动生成的镜像
 sudo docker run -it --name container_edk2_dev_env edk2_dev_env:1.0

image.png

  1. 运行镜像
build -p edk2/EmulatorPkg/EmulatorPkg.dsc -t GCC5 -a X64

image.png
image.png

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退出

运行效果
image.png

参考文献

  • 【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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1688451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

白嫖免费图床!CloudFlare R2太香了!

1 为啥要折腾搭建一个专属图床? 技术大佬写博客都用 md 格式,要在多平台发布,图片就得有外链后续如博客迁移,国内博客网站如掘金,简书,语雀等都做了防盗链,图片无法迁移 2 为啥选择CloudFlare…

力扣刷题---返回word中所有不重复的单词

当需要从一个数据集合中去除重复元素时,set是一个很好的选择。由于其不允许存储重复的元素,因此可以很容易地实现去重功能。这在处理原始数据或进行数据分析时特别有用。 题目: 给定一个字符串数组 words,请返回一个由 words 中所…

SpringCloud微服务03-微服务保护-分布式事务-MQ基础-MQ高级

一、微服务保护 1.雪崩问题 如何做好后备方案就是后续: 2.雪崩解决方案 某一个服务的线程是固定的,出现故障线程占满后,就不会让取调用这个服务,对其他服务就没有影响。 3.Sentinel ①初识Sentinel 配置过程:day05-服…

Unity 实现心电图波形播放(需波形图图片)

实现 在Hierarchy 面板从2D Object 中新建一个Sprite,将波形图图片的赋给Sprite。 修改Sprite 的Sprite Renderer 组件中Draw Mode 为Tiled, 修改Sprite Renderer 的Size 即可实现波形图播放。 在Hierarchy 面板从2D Object 中新建一个Sprite Mask 并赋以遮罩图片…

表现层框架设计之表现层设计模式_2.MVP模式

1.MVP模式 MVP(Model-View-Presenter)模式提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理&am…

10款手机黑科技app,每款都好用到爆!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1. 计划程序应用 —— Android Auto Text Android Auto Text(前身为 Do It Later)是一款简单易用的日程安排应用程序&am…

LLM实战:当网页爬虫集成gpt3.5

1. 背景 最近本qiang~关注了一个开源项目Scrapegraph-ai,是关于网页爬虫结合LLM的项目,所以想一探究竟,毕竟当下及未来,LLM终将替代以往的方方面面。 这篇文章主要介绍下该项目,并基于此项目实现一个demo页面&#x…

can设备调试 - linux driver

这篇文章主要介绍can设备的调试相关信息,不具体介绍驱动的实现。 如果驱动写完,对can设备进行验证,可能会出现很多不可预见的问题。下面说说验证步骤 验证can设备可以使用工具can-utils。这个工具包中会有cansend candump等程序。可以直接通…

找钢集团亮相沙特利雅得建筑行业供应链展会

5月20日-21日,找钢产业互联集团(以下简称:找钢集团)亮相沙特利雅得建筑行业供应链展会。本次展会由沙特阿拉伯国家住房公司(NHC)主办,中信建设协办,涵盖住房新科技、绿色环保等多个主…

C语言例题46、根据公式π/4=1-1/3+1/5-1/7+1/9-1/11+…,计算π的近似值,当最后一项的绝对值小于0.000001为止

#include <stdio.h> #include <math.h>int main() {int fm 1;//分母double sign 1;//正负号double fzs 1;//分子式double sum 0;while (fabs(fzs) > 0.000001) {sum fzs;sign * -1; //变换正负号fm 2; //分母3、5、7、9...增长fzs sign / fm;//分子式…

Pod容器资源限制和探针

目录 一、资源限制 1.Pod和容器的资源请求和限制 2.CPU 资源单位 案例一 案例二 二、健康检查&#xff0c;又称为探针&#xff08;Probe&#xff09; 1.探针的三种规则 2.Probe支持三种检查方法 3.探测获得的三种结果 案例一&#xff1a;exec 案例二&#xff1a;htt…

[NOIP2002]过河卒 标准递归

题目地址 登录—专业IT笔试面试备考平台_牛客网 输入输出描述 如果没有马存在 就是一个经典的递归题 // Dduo // Bhu Bigdata 1421 package Dduo; import java.util.*; // Eslipse IDE 2020-08 // JDK 1.8 // 2024/5/21public class Main {static Scanner scnew Scanner(Sy…

linux命令日常使用思考

linux命令日常使用思考 复制的相关问题scp和cp的区别root192.168.5.229-r的理解 更新版本的相关问题svn info 根目录和家目录的区别根目录家目录 复制的相关问题 scp和cp的区别 安全性&#xff1a;SCP 是基于 SSH 的加密传输协议&#xff0c;可以保证数据在传输过程中的安全性…

Midjourney应用场景、特点、生成图片带来影响

Midjourney是一个基于GPT-3.5系列接口开发的免费AI机器人&#xff0c;旨在提供多领域的智能对话服务。本文主要介绍Midjourney的应用场景、功能特点、图片生成后可以做什么&#xff1f; 一、Midjourney应用场景 Midjourney的应用场景相当广泛&#xff0c;以下是一些主要的适用…

HTML5好看的通用网站模板源码

文章目录 1.设计来源1.1 主界面1.2 模板菜单1 界面1.3 模板菜单2 界面1.4 模板菜单3 界面1.5 下拉菜单1 界面1.6 下拉菜单2 界面1.7 模板菜单4 界面1.8 模板菜单5 界面1.9 界面底部 2.效果和源码2.1 动态效果2.2 源码目录2.3 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址…

学习通高分免费刷课实操教程

文章目录 概要整体架构流程详细步骤云上全平台登录步骤小结 概要 我之前提到过一个通过浏览器的三个脚本就可以免费高分刷课的文章&#xff0c;由于不方便拍视频进行实操演示&#xff0c;然后写下了这个实操教程&#xff0c;之前的三个脚本划到文章末尾 整体架构流程 整体大…

若依 ruoyi-vue 用户账号前后端参数校验密码 手机号 邮箱

前端 <el-dialog :title"title" :visible.sync"open" width"800px" append-to-body><el-form ref"form" :model"form" :rules"rules" label-width"120px"><el-row><el-col :span…

链游:区块链技术的游戏新纪元

随着区块链技术的快速发展&#xff0c;越来越多的行业开始探索与其结合的可能性&#xff0c;其中&#xff0c;游戏行业与区块链的结合尤为引人注目。链游&#xff0c;即基于区块链技术的游戏&#xff0c;正以其独特的优势&#xff0c;为玩家带来全新的游戏体验。本文将对链游进…

【linux】linux中免交互命令expect原理与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…