前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[ 物联网篇 ] 02 - Yocto Project (YP)快速入门

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

作者头像
程序手艺人
发布2019-04-18 11:25:09
4.5K0
发布2019-04-18 11:25:09
举报
文章被收录于专栏:程序手艺人

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1414829

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

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

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)。

代码语言:javascript
复制
//创建工作目录
mkdir -p /home/myuser/mystuff
// 运行容器
docker run --rm -it -v /home/myuser/mystuff:/workdir crops/poky --workdir=/workdir
代码语言:javascript
复制
// 下载源码
> 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
  • 编译固件
代码语言:javascript
复制
// 设置运行环境
source oe-init-build-env

//编译最小系统
bitbake  core-image-minimal 

  • 余留问题

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

代码语言:javascript
复制
Loading cache: 100% |############################################################################################################################################| Time: 0:00:00
Loaded 1263 entries from dependency cache.
NOTE: Resolving any missing task queue dependencies

Build 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_compile
  virtual: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.
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年04月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Yocto 是什么 ?
  • 2. Yocto 中的基本概念
  • 3.Yocto 实战
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档