NXP i.MX 8M Mini 的源码构建系统使用的是Yocto,如果不熟悉Yocto,完全看不懂 i.MX 8M Mini 的相关代码。

废话不多说,直接到Yocto 官网看文档,写Demo。参考官网的文档/部分博客。

  • Yocto Project Quick Start

  • Yocto Project Quick Build

  • Yocto Project Overview and Concepts Manual

  • Yocto Project Reference Manual

  • Yocto Project Development Tasks Manual

  • Yocto基本概念及介绍

  • OpenEmbedded 入门 (一):OpenEmbedded 简介

  • 4 种用于构建嵌入式 Linux 系统的工具

  • Yocto实用技巧

  • Yocto Project开发系列 入门系列,包括调试技巧

Yocto的学习过程比较陡峭。大概看完一遍官网文档,感觉还是云里雾里的,只能边实践边学习。

1. Yocto 是什么 ?

Yocto项目是一个开源协作项目,其重点是嵌入式Linux系统的开发人员。 除此之外,Yocto Project使用基于OpenEmbedded(OE)项目的构建主机,该项目使用BitBake工具构建完整的Linux映像。 BitBake和OE组件组合在一起形成一个参考构建主机,历史上称为Poky。

YoctoBuildroot有异曲同工之妙。两者同为构建嵌入式的编译系统。不同点挺多的,如果之前了解过Buildroot,学习Yocto会事半功倍。两者的不同点这里不做展开说明。

2. Yocto 中的基本概念

熟悉Yocto项目中的一些基本概念 :

通过生活中实际的例子来体现

  • Yocto: 开源项目名称,构建自定义的Linux 系统
  • Poky: Yocto项目中提供一个构建Linux的完成示例。
  • BitBake: OpenEmbedded构建系统的核心工具,负责解析元数据,从中生成任务列表,然后执行这些任务。
  • Layers: 包含相关元数据(即指令集)的存储库,它们告诉OpenEmbedded构建系统如何构建目标。方便项目中各个模块的隔离,有助于项目的维护。例如(meta-skeleton , meta-yocto-bsp) 默认以meta-xxx开头
  • Recipes: 具有.bb后缀的文件,通常,xxx.bb文件包含了软件的信息。
  • Metadata: 元数据是Yocto项目的核心,基本元素的描述与来源。

Yocto中相关的概念比较多,有的时候不太容易理解。这里以生活中一个示例通俗易懂的连贯起来。
Yocto 代表饭店名,知道是做什么的。Pocky代表厨房(如何做出一道美味的菜品), Layers代表菜系(湘菜,川菜,北方菜) Recipes代表具体的菜谱(描述一道菜具体是怎么做的), MetaData代表做菜的原材料。 各种材料准备好了,BitBake代表厨师(看如何做出一道菜的)。

3.Yocto 实战

为了适应不同的环境,这里在Docker 构建Yocto 。

使用Docker容器的CROPS,您可以创建与操作系统无关的Yocto Project开发环境。参考 Yocto Project Development Tasks Manual -> 2.2.2. Setting Up to Use CROss PlatformS (CROPS)。

  • 运行 poky-container
//创建工作目录
mkdir -p /home/myuser/mystuff
// 运行容器
docker run --rm -it -v /home/myuser/mystuff:/workdir crops/poky --workdir=/workdir
  • 容器正常其中之后,开始下载/编译源码Yocto Project Quick Build
// 下载源码
> git clone git://git.yoctoproject.org/poky//切换到2.6.1版本
> cd poky
> git fetch --tags
> git tag
> git checkout tags/yocto-2.6.1 -b my-yocto-2.6.1
  • 编译固件
// 设置运行环境
source oe-init-build-env//编译最小系统
bitbake  core-image-minimal 

  • 余留问题

ubuntu 18.4 系统bitbake core-image-minimal执行之后,编译报错,并没有耗费时间去解决,直接使用docker 容器搭建。

最后通过删除 build / tmp 目录,编译通过。


Loading cache: 100% |############################################################################################################################################| Time: 0:00:00
Loaded 1263 entries from dependency cache.
NOTE: Resolving any missing task queue dependenciesBuild Configuration:
BB_VERSION           = "1.40.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "i586-poky-linux"
MACHINE              = "qemux86"
DISTRO               = "poky"
DISTRO_VERSION       = "2.6.1"
TUNE_FEATURES        = "m32 i586"
TARGET_FPU           = ""
meta
meta-poky
meta-yocto-bsp       = "my-yocto-2.6.1:1cab405d88149fd63322a867c6adb4a80ba68db3"Initialising tasks: 100% |#######################################################################################################################################| Time: 0:00:01
Sstate summary: Wanted 653 Found 0 Missed 653 Current 85 (0% match, 11% complete)
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
ERROR: gcc-cross-i586-8.2.0-r0 do_compile: oe_runmake failed
ERROR: gcc-cross-i586-8.2.0-r0 do_compile: Function failed: do_compile (log file is located at /home/mike/Work/nxp-imx8/test-yocto/poky/build/tmp/work/x86_64-linux/gcc-cross-i586/8.2.0-r0/temp/log.do_compile.17033)
ERROR: Logfile of failure stored in: /home/mike/Work/nxp-imx8/test-yocto/poky/build/tmp/work/x86_64-linux/gcc-cross-i586/8.2.0-r0/temp/log.do_compile.17033|  #define FIRST_PSEUDO_REGISTER FIRST_PSEUDO_REG
|                                ^
| ../../../../../../../work-shared/gcc-8.2.0-r0/gcc-8.2.0/gcc/rtl.h:4302:38: note: in expansion of macro ‘FIRST_PSEUDO_REGISTER’
|  extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
|                                       ^~~~~~~~~~~~~~~~~~~~~
| Makefile:2671: recipe for target 'build/genrecog.o' failed
| make[1]: *** [build/genrecog.o] Error 1
| make[1]: Leaving directory '/home/mike/Work/nxp-imx8/test-yocto/poky/build/tmp/work/x86_64-linux/gcc-cross-i586/8.2.0-r0/gcc-8.2.0/build.x86_64-linux.i586-poky-linux/gcc'
| ERROR: oe_runmake failed
| Makefile:4279: recipe for target 'all-gcc' failed
| make: *** [all-gcc] Error 2
| WARNING: exit code 1 from a shell command.
| ERROR: Function failed: do_compile (log file is located at /home/mike/Work/nxp-imx8/test-yocto/poky/build/tmp/work/x86_64-linux/gcc-cross-i586/8.2.0-r0/temp/log.do_compile.17033)
ERROR: Task (/home/mike/Work/nxp-imx8/test-yocto/poky/meta/recipes-devtools/gcc/gcc-cross_8.2.bb:do_compile) failed with exit code '1'
ERROR: qemu-native-3.0.0-r0 do_compile: oe_runmake failed
ERROR: qemu-native-3.0.0-r0 do_compile: Function failed: do_compile (log file is located at /home/mike/Work/nxp-imx8/test-yocto/poky/build/tmp/work/x86_64-linux/qemu-native/3.0.0-r0/temp/log.do_compile.17035)
ERROR: Logfile of failure stored in: /home/mike/Work/nxp-imx8/test-yocto/poky/build/tmp/work/x86_64-linux/qemu-native/3.0.0-r0/temp/log.do_compile.17035
Log data follows:
| DEBUG: Executing shell function do_compile
|   LINK    aarch64-softmmu/qemu-system-aarch64
|   LINK    arm-softmmu/qemu-system-arm
| ../slirp/tcp_subr.o: file not recognized: File truncated
| collect2: error: ld returned 1 exit status
| ../slirp/tcp_subr.o: file not recognized: File truncated
| collect2: error: ld returned 1 exit status
| Makefile:199: recipe for target 'qemu-system-aarch64' failed
| make[1]: *** [qemu-system-aarch64] Error 1
| Makefile:199: recipe for target 'qemu-system-arm' failed
| make[1]: *** [qemu-system-arm] Error 1
| Makefile:481: recipe for target 'subdir-arm-softmmu' failed
| make: *** [subdir-arm-softmmu] Error 2
| make: *** Waiting for unfinished jobs....
| Makefile:481: recipe for target 'subdir-aarch64-softmmu' failed
| make: *** [subdir-aarch64-softmmu] Error 2...................................|   CC      mips-softmmu/trace/generated-helpers.o
|   LINK    mips-softmmu/qemu-system-mips
| ../slirp/tcp_subr.o: file not recognized: File truncated
| collect2: error: ld returned 1 exit status
| Makefile:199: recipe for target 'qemu-system-mips' failed
| make[1]: *** [qemu-system-mips] Error 1
| Makefile:481: recipe for target 'subdir-mips-softmmu' failed
| make: *** [subdir-mips-softmmu] Error 2
| ERROR: oe_runmake failed
| WARNING: exit code 1 from a shell command.
| ERROR: Function failed: do_compile (log file is located at /home/mike/Work/nxp-imx8/test-yocto/poky/build/tmp/work/x86_64-linux/qemu-native/3.0.0-r0/temp/log.do_compile.17035)
ERROR: Task (virtual:native:/home/mike/Work/nxp-imx8/test-yocto/poky/meta/recipes-devtools/qemu/qemu_3.0.0.bb:do_compile) failed with exit code '1'
NOTE: Tasks Summary: Attempted 765 tasks of which 760 didn't need to be rerun and 2 failed.Summary: 2 tasks failed:/home/mike/Work/nxp-imx8/test-yocto/poky/meta/recipes-devtools/gcc/gcc-cross_8.2.bb:do_compilevirtual:native:/home/mike/Work/nxp-imx8/test-yocto/poky/meta/recipes-devtools/qemu/qemu_3.0.0.bb:do_compile
Summary: There were 4 ERROR messages shown, returning a non-zero exit code.
  • 编译成功,成功运行 runqemu qemux86

[ 物联网篇 ] 02 - Yocto Project (YP)快速入门相关推荐

  1. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  2. .net mvc html访问数据库,【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6) - 三生石上...

    图挂了的说明: 我是在Word中写的本系列文章,然后转成的HTML,所以图片都存在于 fineui.com 服务器,由于临时访问量太多,服务器喘不过气了.... 你可以稍后访问,实在是抱歉...... ...

  3. 物联网IoT协议之OPC UA快速入门教程

    本文转载,原文作者:源码先生, 文章链接:https://www.debugself.com/2019/11/27/opc_guide/, 请勿用于商业用途.如有侵权,请告知删除,谢谢! 八大物联网I ...

  4. apache2.4.9 开启path_info访问_【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)...

    新建项目 打开VS2015,找到菜单项[文件->新建->项目],打开向导对话框: 注意我们的选择项: 运行平台:.NET FrameWork 4.5 项目模板:ASP.NET Web Ap ...

  5. Lucene第一篇【介绍Lucene、快速入门】

    tags: Lucene 什么是Lucene?? Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的 ...

  6. [vs2010 project] CppUnit快速入门

    简介 测试是软件开发过程中极其重要的一环,详尽周密的测试能够减少软件BUG,提高软件品质.测试包括单元测试.系统测试等.其中单元测试是指针对软件功能单元所作的测试,这里的功能单元可以是一个类的属性或者 ...

  7. 数学建模专栏 | 第二篇 :MATLAB 数学建模快速入门

    MATLAB 虽然功能很强大,但上手却很容易,尤其是 R2013a 以后的版本, 使用起来更加容易. 现在使用 MATLAB 的一个理念就是像 Word 一样去使用 MATLAB.本讲将通过一个实例介 ...

  8. 【一篇入魂】redis快速入门—部署、数据类型、持久化、事务、集群

    Redis简介 简单介绍 Redis:开源.免费.非关系型数据库.K-V数据库.内存数据库,支持持久化.事务和备份,集群(支持16个库)等高可用功能.并且性能极高(可以达到100000+的QPS),易 ...

  9. Vue-60分钟快速入门篇-下篇

    概述 上一篇我们重点介绍了组件的创建.注册和使用,熟练这几个步骤将有助于深入组件的开发.另外,在子组件中定义props,可以让父组件的数据传递下来,这就好比子组件告诉父组件:"嘿,老哥,我开 ...

最新文章

  1. 现代软件工程 结对编程 (I) 三维棋类游戏
  2. PostgreSQL 8.2.5 安装为 Windows 服务 (Service)
  3. 给select设置默认值,在option在页面上已经写死的情况下
  4. 郑州学python_郑州Python基础知识点学习之内置类型
  5. php 函数 打印,php打印函数入门教程
  6. javascript - dom
  7. [0630]Tyvj 1063 数字串
  8. 写了cookie阻止通过输入地址直接访问下一个html,但是直接输入地址访问时,会闪一下下一个页面,怎么回事啊????、...
  9. Unity3D-相关函数功能
  10. mysql log4jlogger_mybatis结合log4j打印SQL日志
  11. phpexcel 导出到xls文件的时候出现乱码解决
  12. vs中程序获取计算机系统音量,用C# 控制Windows系统音量的实现方法
  13. 四川大学计算机与生命科学专业,四川大学生命科学学院2014年研招专业目录
  14. APP微信支付报错《商户号该产品权限未开通,请前往商户平台产品中心检查后重试》
  15. 毕设题目:Matlab车牌识别
  16. sd卡格式化后还能恢复吗?恢复小技巧分享!
  17. 教你怎样选配电脑硬件
  18. 微信小程序基础之input输入框控件
  19. linux新建磁盘分区
  20. 市场调研报告-全球与中国AGM铅酸电池市场现状及未来发展趋势

热门文章

  1. 130 余个超实用网站
  2. 江西计算机一级b考试,江西省计算机B一级考试试题.doc
  3. nopCommerce3.9简体中文语言包(nopCommerce3.9 language)
  4. 如何进入互联网行业,成为产品经理?没有项目经验如何转行当上产品经理?
  5. 利用 Django 动态展示 Pyecharts 图表数据的几种方法
  6. 神奇的Redis延迟
  7. 新劳动法年假计算工具
  8. javaweb实现邮箱接收验证码
  9. 分布式事务Seata源码解析十:AT模式回滚日志undo log详细构建过程
  10. 如何对人脸识别进行法律规制