Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建

By: fulinux
E-mail: fulinux@sina.com
Blog: https://blog.csdn.net/fulinus
喜欢的盆友欢迎点赞和订阅!
你的喜欢就是我写作的动力!

在这里插入图片描述

返回总目录:Yocto开发讲解系列 - 总目录

学习Yocto的目标:

我的理想是通过一条命令生成对应开发板的所有镜像文件,开机后的系统跑着Qt的wayland桌面管理系统,实现一个类似手机桌面环境的系统,但是精简、高效率、不吃资源、方便应用层实现多个Qt程序来回切换使用桌面等等。这是我学习yocto和wayland/QtWayland的目的

欢迎来到Yocto的世界

下面我将手把手带大家进入Yocto宏大的世界,一起领略下Yocto伟大,以后再也不用为编译bootloader、linux kernel、busybox、第三方库或程序、以及如何制作文件系统而苦恼了!

准备编译环境:

对编译机器的要求:
我建议你使用Ubuntu 16.04以上的版本!
磁盘空闲大小最好是50G以上!
Git, tar, Python和gcc版本需要满足如下要求:

  • Git 1.8.3.1 or greater
  • tar 1.28 or greater
  • Python 3.5.0 or greater
  • gcc 5.0 or greater

我当前的ubuntu版本如下:

$ uname -a
Linux OptiPlex-7050 4.15.0-136-generic #140~16.04.1-Ubuntu SMP Wed Feb 3 18:51:03 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
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 -y
#或者Ubuntu最新版本安装下面的
$ sudo apt install gawk wget git diffstat unzip texinfo gcc 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 zstd liblz4-tool -y

下载yocto的poky项目:

环境准备好之后开始下载源代码!
提示:yocto poky下载和编译的整个环节(除了运行QEMU虚拟机外)不需要root权限,请尽可能不要在root环境下去操作哦

$ git clone git://git.yoctoproject.org/poky
$ cd poky
$ git fetch --tags

下面是如果你poky克隆下载比较慢的可以在github上面找找资源,比如:

$ git clone https://github.com/YoeDistro/poky.git
$ cd poky
$ git remote set-url origin git://git.yoctoproject.org/poky #把源修改成了官方的,也可以不用哈
$ git fetch --tags

当然,我们尽量选择一个稳定的长期支持的版本来做开发,比如Dunfell(yocto-3.1)版本,推荐使用Dunfell,支持到2024年,但是本系列使用的是最新的Hardknott(yocto-3.3)。最新的Honister(yocto-3.4)以及之后的版本语法有大的改动,如果你稍有些经验的话可以用Honister或更高版本,如果是小白就用Hardknott或者Dunfell吧,它们两个没有语法上的差异,可以兼容。

切换到对应的版本:

git checkout -t  origin/hardknott -b my-hardknott

或者:

git checkout -t  origin/dunfell -b my-dunfell

使能编译环境:

首先是进入这个poky目录哈~

$ cd ~/poky

简单看下这里都有什么~
在这里插入图片描述
使能一下编译环境,最好是开发的时候起一个独立的终端(shell)来负责编译,这样就不用反复切换终端,还要使能下面的语句了。(不执行下面语句的话,就不能使用bitbake命令哦):

$ source oe-init-build-env

有个提示:

You can also run generated qemu images with a command like ‘runqemu
qemux86-64’
首次使能的时候会创建build目录,后面包括编译和输出的所有东西都在这个build目录下,所以build目录下的改动都是零时的,都是会变化的,所以不建议在build的目录下去做代码的修改,也无法保存下来,当然也不要怕去修改build目录下的代码,为了快速和零时改动是可以接收的。而且后面的章节讲到创建workspace目录都在这个下面。

build]$ ls
bitbake-cookerdaemon.log  cache  conf  sstate-cache  tmp

开始Yocto的编译:

好了,准备好了编译环境,就可以开始编译了!如下所示:

提示:如果编译有错误看下面内容:

build]$ bitbake core-image-sato
Loading cache: 100% |                                                                            | ETA:  --:--:--
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |###########################################################################| Time: 0:00:11
Parsing of 821 .bb files complete (0 cached, 821 parsed). 1395 targets, 42 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION           = "1.48.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "ubuntu-16.04"
TARGET_SYS           = "x86_64-poky-linux"
MACHINE              = "qemux86-64"
DISTRO               = "mydistro"
DISTRO_VERSION       = "3.2.2"
TUNE_FEATURES        = "m64 core2"
TARGET_FPU           = ""
meta                 
meta-poky            
meta-yocto-bsp       

Initialising tasks: 100% |########################################################################| Time: 0:00:07
Sstate summary: Wanted 1975 Found 328 Missed 1647 Current 0 (16% match, 0% complete)
NOTE: Executing Tasks

例如图片中这样:
在这里插入图片描述
要下载的东西还是特别多的,6835个任务要执行
在这里插入图片描述
初始构建时间可能很长,要为构建一个功能齐全的Linux系统需要编译大量的软件包,就不可避免需要较长的初始构建时间。但是,一旦完成初始构建,Yocto Project使用的共享状态(状态)缓存机制可以防止系统重新构建自上次构建以来尚未“触及”的软件包。稳定状态机制大大减少了后续构建的时间。

可能要等待一段时间。。。。我们继续看下文

有些盆友网络下载速度慢,我将我的downloads目录打包后上传到了百度云上面,连接分享如下,
链接:https://pan.baidu.com/s/1ajjdPB97VEkpJYOjJ_P5FQ 提取码:uatu
复制这段内容后打开百度网盘手机App,操作更方便哦
下载后合并解压,在将其中的文件复制到poky/build/downloads下

编译出错解决方法

如果编译出错:

build]$ bitbake core-image-sato
ERROR:  OE-core's config sanity checker detected a potential misconfiguration.
    Either fix the cause of this error or at your own risk disable the checker (see sanity.conf).
    Following is the list of potential problems / advisories:

    Your version of gcc is older than 6.0 and will break builds. Please install a newer version of gcc (you could use the project's buildtools-extended-tarball or use scripts/install-buildtools).

提示我们说系统的gcc版本比6.0的低,我的Ubuntu是16.04,对应的gcc版本是5.4,此时它也提供了解决方法,即执行:

poky]$ scripts/install-buildtools
INFO: Fetching buildtools installer
*******会卡顿一段时间**********
INFO: Fetching buildtools installer checksum
INFO: Checksum success
INFO: Making installer executable
Extended Build tools installer version 3.1+snapshot
===================================================
You are about to install the SDK to "/home/fulinux/poky/buildtools". Proceed [Y/n]? Y
Extracting SDK..................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /home/fulinux/poky/buildtools/environment-setup-x86_64-pokysdk-linux

其实本质是将相关的开发工具下载到了poky/buildtools目录下,如:

poky]$ ls buildtools/sysroots/x86_64-pokysdk-linux/usr/bin/
2to3                ifnames      mshortname          subunit-notify
2to3-3.8            ld           mshowfat            subunit-output
aclocal             ld.bfd       mtools              subunit-stats
aclocal-1.16        ld.gold      mtoolstest          subunit-tags
addr2line           libtoolize   mtype               tap2subunit
amuFormat.sh        locale       mxtar               tar
ar                  locate       mzip                texi2any
as                  lz           nettle-hash         texi2dvi
autoconf            m4           nettle-lfib-stream  texi2pdf
autoheader          make         nettle-pbkdf2       texindex
autom4te            makedb       nm                  tgz
automake            makeinfo     objcopy             update-alternatives
automake-1.16       mattrib      objdump             update-ca-certificates
autopoint           mbadblocks   openssl             updatedb
autoreconf          mcat         patch               uz
autoscan            mcd          patch.patch         wget
autoupdate          mcheck       pbr                 x86_64-pokysdk-linux-addr2line
c++                 mclasserase  pcprofiledump       x86_64-pokysdk-linux-ar
cc                  mcomp        pdftexi2dvi         x86_64-pokysdk-linux-as
c++filt             mcopy        pip3                x86_64-pokysdk-linux-c++filt
chrpath             mdel         pip3.8              x86_64-pokysdk-linux-cpp
cpp                 mdeltree     pkcs1-conv          x86_64-pokysdk-linux-dwp
c_rehash            mdir         pkg-config          x86_64-pokysdk-linux-elfedit
dwp                 mdu          pldd                x86_64-pokysdk-linux-g++
easy3_install       mformat      pod2texi            x86_64-pokysdk-linux-gcc
easy_install-3.8    minfo        pydoc3              x86_64-pokysdk-linux-gcc-10.2.0
elfedit             mkmanifest   pydoc3.8            x86_64-pokysdk-linux-gcc-ar
find                mlabel       python3             x86_64-pokysdk-linux-gcc-nm
find.findutils      mmd          python3.8           x86_64-pokysdk-linux-gcc-ranlib
g++                 mmount       python3.8.real      x86_64-pokysdk-linux-gnu-pkg-config
gcc                 mmove        ranlib              x86_64-pokysdk-linux-gprof
gencat              mpartition   readelf             x86_64-pokysdk-linux-ld
getconf             mrd          recode-sr-latin     x86_64-pokysdk-linux-ld.bfd
getent              mren         rpcgen              x86_64-pokysdk-linux-ld.gold
gettextize          msgattrib    sexp-conv           x86_64-pokysdk-linux-libtool
git                 msgcat       size                x86_64-pokysdk-linux-lto-dump
git.real            msgcmp       sprof               x86_64-pokysdk-linux-nm
git-receive-pack    msgcomm      strings             x86_64-pokysdk-linux-objcopy
git-shell           msgconv      strip               x86_64-pokysdk-linux-objdump
git-upload-archive  msgen        subunit-1to2        x86_64-pokysdk-linux-ranlib
git-upload-pack     msgexec      subunit2csv         x86_64-pokysdk-linux-readelf
gnu-configize       msgfilter    subunit2disk        x86_64-pokysdk-linux-size
gprof               msgfmt       subunit2gtk         x86_64-pokysdk-linux-strings
gtar                msggrep      subunit2junitxml    x86_64-pokysdk-linux-strip
iconv               msginit      subunit2pyunit      xargs
iconvconfig         msgmerge     subunit-2to1        xargs.findutils
idle3               msgunfmt     subunit-filter      xgettext
idle3.8             msguniq      subunit-ls

这个时候我们只需要在终端窗口中执行:

. /home/fulinux/poky/buildtools/environment-setup-x86_64-pokysdk-linux

使能一下gcc等工具路径的环境变量脚本即可开始重新编译了。

更新Python3.6

安装python3.6的方法:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6

#将Python版本切换到3.6

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 3

其他切换去的方法,比如切换3.5:

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 3

Yocto系列讲解 (入门篇) 2 - 演示运行qemux86-64虚拟机

最终效果展示

最终的效果:
在这里插入图片描述

希望帮我点个赞加关注,你的喜欢就是我持续更新的动力!

openEuler Embedded Yocto构建 openEuler Embedded采用的面向嵌入式系统Yocto构建体系,而非openEuler服务器场景的OBS构建体系。虽然实现了内核和软件包在代码层面的共享,但在具体构建上有着巨大的差异,需要专门编写相应的构建文件,这也意味当前openEuler体系中众多软件包的构建规则不能直接应用于嵌入式场景。当前openEuler Embedded已经实现了250+软件包的支持,未来为了实现所有软件包的支持,显然不能把所有的软件包的构建在Yocto下重新实现一遍。 阅读详情

相关推荐

yocto环境构建

在一些情况下,如果公司没有能力做底层硬件PCB的封装设计和产品外观,需要用人家的硬件,那么就需要在上面进行二次开发,市面上有不少的硬件公司或团队提供二次开发网关的服务,我的工作中就遇到过这种情况,硬件用别人的,自己在上面开发软件,下面记录整理下在yocto环境盒子上进行c/c++二次开发的大致内容,供后面回顾和参考。例如:以上就是今天要讲的内容,本文主要介绍了需要构建yocto系统环境的场景以及如何构建yocto的环境,方便嵌入式软件工程师在没有硬件的情况下进行开发。

wel_006的博客 1833

Yocto开发讲解系列 - 总目录

Yocto开发讲解系列总纲Yocto开发专栏前言

fulinux的博客 3万+

开篇、Yocto介绍

Yocto介绍

TNT的博客 4755

Yocto系列讲解[入门篇] 5 - 在meta-mylayer中添加helloworld recipe

四种方式创建自己的helloworld recipe

fulinux的博客 6801

Yocto系列讲解[入门篇] 2 - 演示运行qemux86-64虚拟机

手把手教大家怎么编译Yocto,并运行一个qemux86虚拟机

fulinux的博客 1万+

Yocto系列讲解[入门篇] 4 - 创建自己的meta layer

这里写目录标题创建和生成自己的layer

fulinux的博客 7660

【Yocto学习入门】01 - Yocto简介

【Yocto学习入门】01 - Yocto简介一. 什么是yocto?二. 为什么使用Yocto Project三. Yocto 专业术语四. Yocto层(Layer)模型 一. 什么是yocto? yocto是一个开源合作项目,能帮助开发者为不同的硬件架构制作基于Linux的系统Image镜像, yocto提供了提供了很多工具和一个开放空间帮助开发者直接共享技术,软件栈,配置和良好的开发习惯, 这些工具和交流的空间能让开发者们制做各种量身定制的Linux镜像.

|~~~热爱生活、努力学习的小伙汁~~~| 1万+

Yocto系列讲解[实战篇]86 - Amazon AWS移植和构建

amazon-kinesis-video-streams-media-interface移植

fulinux的博客 2751

yocto 超详细教程,看完必会搭建linux系统

Yocto:Yocto是这个开源项目的名称,该项目旨在帮助我们自定义Linux系统 Poky:Poky有两个含义。第一个含义是用来构建Linux的构建系统,值得注意的该Poky仅仅是一个概念,而非一个实体:它包含了 BitBake工具、编译工具链、BSP、诸多程序包或层,可以认为Poky即是Yocto的本质;此外Poky还有另外一层意思,使用Poky系统得到的默认参考 Linux 发行版也叫Poky(当然,我们可以对此发行版随意命名)。 很有用的yocto教程,看完包会

yocto 2018 年最新官方完整pdf文档

yocto 2018 年最新官方完整pdf文档 624页 内容非常详细

yocto工程开发手册(中文)

yocto工程开发手册(中文)

精通DC-DC变换器:Boost升压电路全解析

Boost升压变换器是一种将低直流电压转换为高直流电压的常用电路。其核心工作原理是通过电感储能:开关导通时电感充电,关断时电感与电源串联向负载供电。关键公式表明输出电压Vo=Vi/(1-D),占空比D越大,升压比越高。变换器工作时会产生电感电流纹波和输出电压纹波,需合理选择电感和电容参数。开关管和二极管需承受完整的输出电压,对元器件选型要求较高。理解这些原理是设计高效升压电源的基础。

2511_92918351的博客 3689

航天仿真必看:如何用SOFA库实现高精度GCRS-ITRS坐标转换?避坑指南

本文深入解析了航天仿真中高精度GCRS-ITRS坐标转换的关键技术,重点介绍了SOFA库在天球系与轨道系转换中的权威应用。通过对比传统方法的误差来源,详细阐述了SOFA库的转换算法优势、工程实现步骤及误差控制策略,为航天器轨道仿真提供毫米级精度的解决方案。

7h6j5k4l3的博客 845

3D识别建模 — 基于ReconstructMe和EAGLE EYES SCANNER的实现

3D实体识别建模,作为3D打印反向工程的一个重要环节,今天就让我们利用ReconstructMe和EAGLE EYES SCANNER来了解一下。 第一步、软件和硬件准备就绪 ReconstructMe下载并安装 http://reconstructme.net/?wpdmdl=160 EAGLE EYES SCANNER直接将相应USB插入电脑接口即OK,之后在    中点击搜索“设备管理...

qq_40013290的博客 876

SRS(简单实时视频服务) 笔记(5)- 视频录制

在SRS使用中实现视频录制功能。

irainsa的博客 1688

2025美赛C题奥运奖牌榜模型(附代码+全保姆教程)Models for Olympic Medal Tables

伟大教练”效应的测量方法定义奖牌变化率:−−​如果变化率显著为正,且超出历史平均增长率,则认为存在“伟大教练”效应。使用统计方法(如t检验)验证教练到来是否带来显著性差异。

博客 6359

多角度模板匹配的模板创建技巧

基于形状的模板匹配多角度创建技巧

manuoo的专栏 3395

零基础学习CANoe Panel(17)—— Panel CAPL Function

CANoe内置了几个CAPLFunction,允许我们在CAPL运行时动态的更改Panel控件的属性,比如打开某个panel,禁用某个控件,更改控件颜色等。

蚂蚁小兵 3490

【毕设实战】飞行器目标识别系统:基于YOLOv5的智能检测全流程教程,助你毕设脱颖而出

亲爱的同学,毕设是不是让你既期待创新又担心技术门槛?如果你的毕设方向是计算机视觉、智能检测,那这个绝对能成为你的“毕设王牌”。从数据准备到界面开发,我会把整个项目拆成“傻瓜式”步骤,让你能一步步做出属于自己的毕设成果。

know_F0727的博客 96

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 高通开发系列 - 双RIL之Linux支持双卡双待
下一篇: Yocto系列讲解[入门篇] 2 - 演示运行qemux86-64虚拟机
fulinux
fulinux 领域专家: 嵌入式与硬件开发技术领域 领域专家: 嵌入式与硬件开发技术领域
博客等级 码龄15年 4774粉丝 481原创
评论 156
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fulinux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值