当前位置: 首页 > article >正文

使用 Docker 构建 preboot 交叉编译环境

ASR1606/ASR1603 的 preboot 代码需要在 Linux 环境下编译,通常使用 VMware 或者 VirtualBox 软件创建一个 Linux 虚拟机,在虚拟机中做交叉编译。但 preboot 不是那种需要经常编译的代码,完全可以将 preboot 的编译环境制作成 docker 镜像,与虚拟机相比,docker 的启动速度更快,占用资源更少,需要用到的时候创建一个 docker 容器来编译 preboot,非常适合用来做这类偶尔需要用一下的场景。

构建镜像

docker 根据 dockerfile 文件来构建镜像,dockerfile 中的命令描述其实就是搭建交叉编译环境的过程,主要将工具链、编译脚本复制到镜像内并配置好环境变量。

FROM ubuntu:latest
LABEL version="1.0.0"
LABEL author="hacper"


RUN apt update && apt install make unzip curl -y &&  mkdir /preboot && mkdir /preboot/src
COPY gcc-arm-none-eabi-9-2019-q4-major.zip /preboot
COPY build_CRANEL.sh /preboot
COPY build_CRANEM.sh /preboot
WORKDIR /preboot
RUN unzip gcc-arm-none-eabi-9-2019-q4-major.zip && rm gcc-arm-none-eabi-9-2019-q4-major.zip
ENV PATH=$PATH:/preboot/gcc-arm-none-eabi-9-2019-q4-major/bin

依赖的工具链 gcc-arm-none-eabi-9-2019-q4-major.zip,需要将其放在根目录。然后执行 docker build 命令构建镜像:

docker build -t hacper/preboot_builder:latest .

镜像构建完成之后可以将镜像推送到 docker hub,后面使用的时候直接从 docker hub 拉取构建好的镜像。

docker push hacper/preboot_builder

使用

后面使用只需要从 docker hub 拉取镜像:

docker pull hacper/preboot_builder

然后创建容器:

docker run -v /e/workspace/preboot/preboot_boot2:/preboot/src -it hacper/preboot_builder

/e/workspace/preboot/preboot_boot2 只是示例路径,需要修改为自己电脑上的 preboot 源码路径。preboot_boot2 目录下的 CRANEL、CRANEM 分别放置对应的 preboot 源码,将 preboot_boot2 目录挂载到容器中。

执行编译脚本编译preboot:

 ./build_CRANEL.sh
 ./build_CRANEM.sh

生成的镜像分别在路径:

preboot_boot2\CRANEL\apps\preboot\bin\crane\preboot.bin


preboot_boot2\CRANEM\apps\preboot\bin\cortexr-arom-crane\preboot.bin

http://www.kler.cn/a/488262.html

相关文章:

  • 六、Angular 发送请求/ HttpClient 模块
  • 51单片机——串口通信(重点)
  • Jenkins-持续集成、交付、构建、部署、测试
  • 测试覆盖率
  • 学习记录:C/C++ 中的续行符
  • 缓存-Redis-常见问题-缓存击穿-永不过期+逻辑过期(全面 易理解)
  • 数据集-目标检测系列- 电话 测数据集 call_phone >> DataBall
  • Nginx安全加固系列:防范XSS
  • QEMU通过OVS实现联网
  • 计算机网络之---信号与编码
  • HDFS编程 - 使用HDFS Java API进行文件操作
  • 一、智能体强化学习——强化学习基础
  • component-动态控制 div width 的值 根据传入的变量决定width的值 vue
  • Qt重写webrtc的demo peerconnection
  • 【原型设计】Axure快速入门教程
  • 机器学习实战——决策树:从原理到应用的深度解析
  • 【SOC 芯片设计 DFT 学习专栏 -- RTL 中的信号名和 Netlist 中的信号名差异】
  • d2j-dex2jar classes.dex 执行报错:not support version 问题解决
  • vue入门项目
  • Git之提交和撤销操作
  • Zstandard压缩算法
  • 如何解决HTML和CSS相关的问题,什么情况下会导致元素被遮挡?
  • Qt官方下载地址
  • 【Azure Redis 缓存】Azure Redis 遇见的连接不上问题和数据丢失的情况解答
  • RT-DETR融合[AAAI2025]的ConSeg中的模块
  • 慧知开源充电桩平台:优势与国际化之路