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

使用容器编译Yocto镜像

By Toradex胡珊逢

Toradex 发布的 Linux BSP 和 SDK 都是采用 Yocto Project 编译而来。文章将介绍如何使用 Docker 容器完成编译任务。采用 Docker 容器可以免于配置 Yocto Project 的依赖环境,同时能够在不同的编译主机上方便地复用所下载的文件。

首先参考这里安装 docker。

我们使用编译 TorizonCore 系统的容器 torizon/crops 作为基础,对其修改从而编译 Linux BSP。修改好的容器源码可以从这里下载。

Dockerfile 描述里容器是如何被构建。该容器里面我们使用国内的 repo 源,便于在大部分网络环境里初始化编译所需的文件。

startup-tdx.sh 则是执行编译过程的脚本。脚本默认采用 dunfell-5.x.y 分支,用于编译 Linux BSP V5。其中也支持配置HTTP/HTTPS 代理。

Dockerfile startup-tdx.sh 放在同一个目录下,执行下面命令生成容器镜像。

-----------------------------------------

$ docker build -t crops:1 .

-----------------------------------------

除了从源码编译,也可以从Docker Hub 上下载,或者在 FTP 上面下载容器文件 crops.tar.gz 后在编译电脑上导入。

-----------------------------------------

$ docker pull benjaminhu/crops:1

$ docker load < crops.tar.gz

-----------------------------------------

准备好容器后,先建立一个目录例如 /root/bsp5 ,这里将会保存所有编译相关的文件,以及生成的 BSP SDK 等。运行期间  /root/bsp5 会被映射到容器内部的 /workdir 路径。下面命令运行完成后,即可生成 apalis imx8 模块上使用的  tdx-reference-minimal-image 以及 SDK,这些文件位于/root/bsp5/yocto/build/deploy 目录下。

-----------------------------------------

$ mkdir -p /root/bsp5

$ docker run --rm -it --name=crops -v /root/bsp5:/workdir --workdir=/workdir -e MACHINE=apalis-imx8 -e DISTRO=tdx-xwayland -e IMAGE=tdx-reference-minimal-image -e SDK=y benjaminhu/crops:1 startup-tdx.sh

-----------------------------------------

首次运行时可能会出现 NXP EULA,按PageDown EULA 底部,然后按 q 退出即可。

参数说明。

说明

可用值

MACHINE

用于指定所编译 BSP 适用的模块
必填

apalis-imx6, apalis-imx8, apalis-tk1, colibri-imx6, colibri-imx6ull, colibri-imx6ull-emmc, colibri-imx7, colibri-imx7-emmc, colibri-imx8x, verdin-imx8mm, verdin-imx8mp

DISTRO

发行版本类型

tdx-xwayland, tdx-xwayland-rt, tdx-xwayland-upstream, tdx-xwayland-upstream-rt

IMAGE

Toradex 提高两种参考 image。
minimal-image 没有图形框架,在模块上可启动的最小系统。
multimedia-image 包含 Qt,Gstreamer, Wayland 软件

tdx-reference-minimal-image,
tdx-reference-multimedia-image

SDK

用于生成 SDK

SDK=y

上面的命令是直接生成 BSP SDK。如果需要定制化 BSP 或者只是单独编译某个软件,可以采用下面命令进入容器,在修改 local.conf 等文件后,收到执行 bitbake 命令即可。修改文件可以在 /root/bsp5  目录下进行,无需进入容器。

-----------------------------------------

$ docker run --rm -it --name=crops -v /root/bsp5:/workdir --workdir=/workdir -e MACHINE=apalis-imx8 benjaminhu/crops:1 startup-tdx.sh

# pokyuser@826dbfcc8bf6:/workdir/yocto/build$

-----------------------------------------

完成编译任务后,输入 exit 即可退出容器。

yocto-bsp5.tar.xz 包含了编译 Linux BSP V5 所需的大部分文件,将其解压到你自己的编译目录,例如本文的 /root/bsp5 中。在使用上面的容器编译时就无需重复下载,缩短编译时间。

由于文件较大,压缩为多个 1GB 的文件,下载yocto-bsp5.tar.xz.* 后使用下面命令合并再解压。

-----------------------------------------

$ cat yocto-bsp5.tar.xz.* > yocto-bsp5.tar.xz

$ tar vxf yocto-bsp5.tar.xz -C /root/bsp5

-----------------------------------------

相关文章:

  • 【uniapp】小程序中修改Vant组件navbar左箭头的颜色及图标
  • 【区块链 | 智能合约】如何编写一个可升级的智能合约
  • java毕业设计开题报告javaweb户籍管理系统|户口
  • 交换机堆叠+链路聚合+浮动静态路由
  • (分布式缓存)Redis持久化
  • 计算机组成原理第二章----数据信息的表示 详解版(写的这么接地气我一下就懂了?)
  • windows 常用命令字典
  • 【案例回顾】春节一次较波折的MySQL调优
  • IDEA2020创建JavaSE项目改造成JavaWeb项目并配置tomcat
  • 分布式任务调度Schedulerx2.0工作原理
  • ATF启动(三):BL2
  • 论Orchestration和Choreography
  • JUC线程线程池和锁面试题
  • TypeScript 简介
  • css过渡效果
  • JavaScript-如何实现克隆(clone)函数
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • isset在php5.6-和php7.0+的一些差异
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • node学习系列之简单文件上传
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 力扣(LeetCode)56
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 算法-图和图算法
  • 系统认识JavaScript正则表达式
  • 追踪解析 FutureTask 源码
  • 自动记录MySQL慢查询快照脚本
  • !!java web学习笔记(一到五)
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (九)One-Wire总线-DS18B20
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)LINQ之路
  • (转)大型网站架构演变和知识体系
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 事件模型教程(二)
  • .net6Api后台+uniapp导出Excel
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET与 java通用的3DES加密解密方法
  • .NET中winform传递参数至Url并获得返回值或文件
  • .NET中统一的存储过程调用方法(收藏)
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @EnableAsync和@Async开始异步任务支持
  • [ 第一章] JavaScript 简史
  • [20171102]视图v$session中process字段含义
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [BROADCASTING]tensor的扩散机制
  • [BUG]vscode插件live server无法自动打开浏览器
  • [C#]C#学习笔记-CIL和动态程序集
  • [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算