hello yocto

关键词: yocto Poky BitBake

通过两个小示例来了解yocto的构建流程,熟悉poky进而了解yocto。

主要内容:

  • 快速构建yocto环境
  • hello bitbake
  • hello poky
  • 构建流程详解

文档参考:

最新文档 https://taotaodiy-yocto.readthedocs.io/en/latest/yocto/yocto-hello.html

快速开始

可直接参考官方文档:点击跳转

准备主机

  • 运行受支持的Linux发行版(即Fedora,openSUSE,CentOS,Debian或Ubuntu)。
  • 50 GB的可用磁盘空间
  • Git 1.8.3.1或更高
  • tar 1.28或更高
  • Python 3.5.0或更高版本。
  • gcc 5.0或更高。

科学上网

此处省略,但这一点很关键,没有这一步就不用下一步了。

安装环境

sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev

获取poky

git克隆poky仓库

git clone git://git.yoctoproject.org/poky

yocto官方每半年发布一个版本,本文档编写时,官方发布yocto-3.1。
方便后续学习,我们先查看poky标签,尽量使用最新的分支。

cd poky
git fetch --tags
git tag

从标签yocto-3.1创建本地分支taotaodiy-yocto-3.1,请根据最新tag自行修改。

git checkout tags/yocto-3.2.2 -b taotaodiy-yocto-3.2.2

构建镜像

初始化构建环境

source oe-init-build-env

我们会得到一些提示,比如

You can now run 'bitbake <target>'Common targets are:core-image-minimalcore-image-satometa-toolchainmeta-ide-support

我们就按照提示开始构建(注意不能使用root)

bitbake core-image-sato

这时候就开始构建了,我们会看到运行的若干tasks,耗费时间根据网速和主机性能而定。

再去查看我们的工程会发现多出来一个build目录,里面放着下载的文件、构建的临时文件以及我们最终编译的镜像。

模拟运行

构建完毕,使用QEMU运行构建的镜像

runqemu qemux86-64

hello world

新建一下目录:

新建层 poky/meta-hello 新建文件夹 poky/meta-hello/conf 新建配方
poky/meta-hello/recipes-hello 新建文件夹
poky/meta-hello/recipes-hello/hello/files

conf添加layer.conf,直接复制的meta-poky的conf/layer.conf,改了个名字

新建layer.conf,新建Recipes文件

# We have a conf and classes directory, add to BBPATH
BBPATH =. "${LAYERDIR}:"# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \${LAYERDIR}/recipes-*/*/*.bbappend"BBFILE_COLLECTIONS += "hello"
BBFILE_PATTERN_hello = "^${LAYERDIR}/"
BBFILE_PRIORITY_hello = "5"LAYERSERIES_COMPAT_hello = "gatesgarth"# This should only be incremented on significant changes that will
# cause compatibility issues with other layers
LAYERVERSION_hello = "3"LAYERDEPENDS_hello = "hello"REQUIRED_POKY_BBLAYERS_CONF_VERSION = "2"

目录结构如下

meta-hello
├── conf
│   └── layer.conf
└── recipes-hello├── hello-bitbake├── hello-git└── hello-poky└── files

在bblayers.conf中添加 meta-hello的绝对路径

BBLAYERS ?= " \/home/taotaodiy/yocto-project/poky/meta \/home/taotaodiy/yocto-project/poky/meta-poky \/home/taotaodiy/yocto-project/poky/meta-yocto-bsp \/home/taotaodiy/yocto-project/poky/meta-hello \"

hello bitbake

新建hello-bitbake.bb

参考
https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-hello.html#the-hello-world-example

DESCRIPTION = "Prints Hello World"
SECTION = "examples"
PV = '1'
PR = "r0"LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"python do_build() {bb.plain("********************");bb.plain("*                  *");bb.plain("*  Hello, World!   *");bb.plain("*                  *");bb.plain("********************");
}

编译hello-bitbake.bb

使用bitbake查找hello bitbake -s | grep hello-bitbake

编译单独的层 bitbake hello-bitbake bitbake -c clean hello-bitbake

hello poky

files中添加hello.c和Makefile

#include "stdio.h"int main()
{printf("hello yocto\n");printf("hello taotaodiy\n");return 0;
}
hello:$(CC) hello.c -c -o hello-git.PHONY:clean
clean:-rm -rf *.o

新建hello-poky.bb

DESCRIPTION = "Hello World Test"
SECTION = "examples"LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
PV = "1"
PR = "r0"SRC_URI = "file://hello.c;md5=a4ded9eb3c34d18125f8fb676c34290e\file://Makefile;md5=c0c08aca49fc1069080622478ad17ad6 \"S = "${WORKDIR}"do_compile () {make
}do_install() {install -d ${D}${bindir}/install -m 0755 ${S}/hello-taotaodiy ${D}${bindir}/
}FILES_${PN} = "${bindir}/hello-taotaodiy"
  • DESCRIPTION:这个包的描述
  • LIC_FILES_CHKSUM:文件的md5校验值,可以用md5sum hello.c来获取
  • PV:recipe的版本号
  • PR:recipe的修订版本号
  • SRC_URI:源文件列表
  • S:指定变量
  • do_compile :
    重写了bitbake的函数,是bitbake进行compiletask的时候做的事情
  • do_install:同上
  • bindir:是一个路径变量,可以在总的conf,以及各个packge的conf中找到定义,大部分情况下是
    /usr/bin/
  • <file://> :
    从本地获取文件,会从配方(*.bb)或者附加文件(.bbappend)的子目录中去寻找

md5计算 xxx为文件名

md5sum xxx

编译hello-poky.bb

使用bitbake查找hello bitbake -s | grep hello-poky

编译单独的层 bitbake hello-poky bitbake -c clean hello-poky

将hello-poky添加到镜像中

我们之前构建的命令是 bitbake core-image-sato

这个文件在poky/meta/recipes-sato/images/core-image-sato.bb

向文件末尾添加一行

IMAGE_INSTALL_append += "hello-poky"

再次编译,等待编译完成。

最终我们就能在
poky/build/tmp/work/qemux86_64-poky-linux/core-image-sato/1.0-r0/rootfs/usr/bin
中找到hello-taotaodiy

再次启动我们编译的系统,runqemu qemux86-64

在终端执行 hello-taotaodiy 就会得到如下输出:

hello git

这里我们再换一种,从远端仓库获取代码编译进系统

首先我们要有一个远程仓库,https://gitee.com/taotaodiy/hello-git

这个仓库只有一个.c文件和一个Makefile,和上面代码一致。

在hello-git目录下添加如下.bb文件。

DESCRIPTION = "hello git"
SECTION = "examples"LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
PV = "1"
PR = "r0"#DEPENDS = "xxx"UBRANCH = "master"SRC_URI = "git://gitee.com/taotaodiy/hello-git.git;protocol=https;branch=${UBRANCH}"
SRCREV = "c77fa3087e5a2f23fdac118ea00350d0eb40be95"S = "${WORKDIR}"do_compile () {make
}do_install() {install -d ${D}${bindir}/install -m 0755 ${S}/hello-git ${D}${bindir}/
}FILES_${PN} = "${bindir}/hello-git"

其中SRCREV为git远程提交时的log,可通过 git log 命令查看

同样我们将hello-git添加到镜像中

IMAGE_INSTALL_append += "hello-git"

运行编译的系统,在终端执行 hello-git 。

yocto tips

系统开发人员需要的基本技能。

  • 处理企业代理
  • 将包装添加到图像
  • 了解配方和包装的区别
  • 自己构建一个包,为什么有用
  • 找出配方创建了哪些包装
  • 找出包装中的文件
  • 找出图像中有哪些文件
  • 将ssh服务器添加到映像(启用将文件传输到目标)
  • 知道食谱的解剖
  • 知道如何创建和使用图层
  • 查找配方(带有OpenEmbedded Layer索引)
  • 了解机器和发行版设置之间的区别
  • 查找并使用适合您硬件的正确BSP(机器)
  • 查找发行版功能的示例并知道在何处进行设置
  • 了解任务管道并执行单个任务
  • 了解devtool以及它如何简化您的工作流程
  • 通过共享下载和共享状态缓存提高构建速度
  • 生成并理解依赖图
  • 生成并了解比特烘烤环境
  • 构建用于应用程序开发的可扩展SDK

hello yocto相关推荐

  1. yocto linux dns,yocto-sumo源码解析(一): o

    oe-init-build-env是yocto构建环境运行的第一个脚本,通过运行下面的命令: . oe-init-build-env build-arm64 即可对yocto项目进行构建,顾名思义,该 ...

  2. yocto中文环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> 我所使用的yocto版本是1.5.1,系统默认的locale是en_US,并不包含中文环境.但是在实际编译的过程中不仅仅是中文 ...

  3. imx6 板卡移植官方yocto版本(2_定制系统)

    上一节中已经讲述了如何去构建编译环境,这一节讲一下如何定制专属于自己板卡的系统.1.配置linux内核官方repo下来的yocto项目里配置了多个内核可选,我们可以在yocto目录下/source/m ...

  4. imx6 板卡移植官方yocto版本(1_安装环境)

    玩imx6板卡也有两年了,之前由于各种原因(主要是懒),一直用的是官方的LTIB版本,这里必须要吐槽一下这个LTIB,各种错误百出,而且严重挑系统,硬是将我从CentOS阵营搞到Ubuntu社区.最近 ...

  5. Yocto的使用实例

    Yocto的使用实例 本文以往rootfs中添加一个软件包为例,阐述使用Yocto定制发行版的大致流程.  有关Yocto的功能和结构介绍,详见Yocto详解 1.开发环境构建 一般有两种情况:一种是 ...

  6. Yocto基本概念及介绍

    Yocto详解 参考:http://www.yoctoproject.org/docs/2.1/mega-manual/mega-manual.html#creating-a-general-laye ...

  7. linux在mak时候出现错误,在使用yocto构建linux映像时出现“memfd戋create的静态声明跟随非静态声明”错误...

    我正在使用 Yocto 建立系统 Ubuntu 18.04 主机.我正在遵循提供的步骤 here . 我正在为 Colibri iMX6ULL 模块上的计算机.但是,我的生成失败,它显示以下错误 de ...

  8. 根文件系统构建(Yocto方式)

    本章有独立的教程,请参考<[正点原子]I.MX6U Yocto 构建根文件系统V1.0.pdf>!

  9. Yocto Project - basic - 01 - Quick Start

    Yocto 是一个被广泛使用的操作系统,本节开始介绍: 文章的内容来自于Yocto的官方介绍文档. 1 简介 The Yocto Project is an open-source collabora ...

  10. YOCTO项目介绍:通过提供模版、工具和方法帮助开发者创建基于linux内核的定制系统

    目录 YOCTO项目介绍 配置内核 build配套 Yocto ,是一个开源社区.它通过提供模版.工具和方法帮助开发者创建基于linux内核的定制系统,支持ARM, PPC, MIPS, x86 (3 ...

最新文章

  1. 02-dispatch_barrier
  2. 浅谈边缘计算对企业安全建设的影响及趋势
  3. Ts + React + Mobx 实现移动端浏览器控制台
  4. CISCO专用协议CDP
  5. cuda,nvidia-driver ,cudnn下载地址及版本对应
  6. C# 小工具开发--DeBugHttp
  7. kaggle案例(part1)--Text Analysis Topic Modelling with spaCy||GENSIM
  8. Mac cnpm装包时提示Error: EACCES: permission denied解决办法
  9. numpy+pandas+matplotlib绘制对数函数图形
  10. 【C语言】创建一个函数,判断某一正整数是否为完数,并调用这个函数找出1000以内所有完数...
  11. 恒丰银行年报:以区块链等线上“大脑”再造业务流程
  12. BLE - LINK LAYER SPECIFICATION
  13. CDN对互联网产业的价值和作用
  14. Google DFP广告管理系统标准版简介
  15. Uchome分页方法
  16. 分享 Android 识音识别 挺有想法的。
  17. web前端基础——媒体查询
  18. php 499,nginx499错误
  19. 无线电波是怎么产生的
  20. eel+html 2 exe

热门文章

  1. harmonyos1.0.1,华为正式发布鸿蒙系统HarmonyOS 1.0
  2. 手机WAN远程唤醒主机
  3. 公钥(RSA)加密应用场景
  4. 友盟推送 php,laravel5.4+umeng(友盟)集成app消息推送功能
  5. 单片微型计算机徐春辉,单片微机原理及应用 徐春辉第12章 习题答案
  6. 网易云课堂python怎样_有木有人上过网易云课堂的 Python Web 微专业,怎么样?
  7. ROSbag解压图片
  8. 关于Android证书MD5获取
  9. opencv实战项目:基于opencv的车牌号码识别
  10. 如何开启系统打印机服务器,windows7系统如何开启打印机服务