yocto使用

Yocto:Yocto是这个开源项目的名称,该项目旨在帮助我们自定义Linux系统

  • Poky:Poky有两个含义。第一个含义是用来构建Linux的构建系统,值得注意的该Poky仅仅是一个概念,而非一个实体:它包含了 BitBake工具、编译工具链、BSP、诸多程序包或层,可以认为Poky即是Yocto的本质;此外Poky还有另外一层意思,使用Poky系统得到的默认参考 Linux 发行版也叫Poky(当然,我们可以对此发行版随意命名)。Poky的两个含义千万不能混淆
  • List item

Metadata:元数据集,所谓元数据集就是发行版内各基本元素的描述与来源
Recipes:.bb/.bbappend文件,配方文件,描述了从哪获取软件源码,如何配置,如何编译。bbappend和bb的区别主要在于bbappend是基于bb的,功能是对相应的bb文件作补充和覆盖,有点类似于“重写”的概念
Class:.bbclass文件
Configuration:.conf文件,即配置文件,我们可以用它来改变构建方式
Layers:即各种meta-xxx目录,将Metadata按层进行分类,有助于项目的维护
Bitbake:一个任务执行引擎,用来解析并执行Metadata
Output:即各种输出image

总结:假如用烹饪一桌酒席来形容构建发行版,则Yocto就是饭店名,Poky就是厨房(以及提供作为参考的菜的搭配套餐),Metadata就是烹饪资源(.bb/.bbappend表示配方/配方上的贴士,.conf表示厨房里的管事的小组长),Layers就是菜谱的分类(如川菜谱、粤菜谱),Bitbake就是厨师,Output就是得到的一桌酒席

构建指导

yocto下载:

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

qemu安装:

sudo apt-get install qemu

在Ubuntu上安装必备软件:

sudo apt-get install sed wget subversion git-core coreutils \
unzip texi2html texinfo libsdl1.2-dev docbook-utils fop gawk \
python-pysqlite2 diffstat make gcc build-essential xsltproc \
g++ desktop-file-utils chrpath libgl1-mesa-dev libglu1-mesa-dev \
autoconf automake groff libtool xterm libxml-parser-perl

进入 poky 目录,然后运行下面的命令为 Yocto 开发环境设置(设置/导出)一些环境变量:

source oe-init-build-env

在运行 open embedded (oe) 的构建环境脚本之后,终端里的路径会自动切换到 build 目录,以便进行之后行发行版的的配置和构建,这里修改的是conf/local.conf文件,选择目标架构:
MACHINE ?= "qemumips64
在local.conf 中取消下面参数的注释符号:

DL_DIR ?= "${TOPDIR}/downloads"
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
TMPDIR ?= "${TOPDIR}/tmp"
PACKAGE_CLASSES ?= "package_rpm"
SDKMACHINE ?= "i686"
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"

现在运行下面的 bitbake 工具命令开始为选定的目标机器下载和编译软件包。(注意要在普通用户目录下,root用户会报错)

bitbake core-image-minimal

为目标机器类型 qemux86-64 编译好的新镜像位于 build/tmp/deploy/images/qemux86-64,通过runqemu qemux86-64命令启动该镜像,用户名为root,密码为空,运行截图如下:

yocto使用_第1张图片

下载meta-img图层:

sudo git clone https://github.com/MIPS/meta-img.git

添加图层:

bitbake-layers add-layer ../meta-img

然后执行:

出现错误:
yocto使用_第2张图片经分析,可能是编译内核的版本的问题。

http://downloads.yoctoproject.org/releases/yocto/yocto-2.2/poky-morty-16.0.0.tar.bz2

依赖

git://git.openembedded.org/bitbake
git://git.openembedded.org/openembedded-core
https://github.com/openembedded/openembedded-core.git

http://downloads.yoctoproject.org/releases/yocto/yocto-2.4.3/poky-rocko-18.0.3.tar.bz2

添加自己的layer:

cat > meta/conf/machine/include/tune-mips64r2el.inc << "EOF"
DEFAULTTUNE ?= "mips64r2el"

require conf/machine/include/tune-mips64.inc

TUNEVALID[mips64r2el] = "Enable mips64r2el specific processor optimizations"
TUNECONFLICTS[mips64r2] = "n64 n32"
TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "mips32r2", " -march=mips32r2", "", d)}"

AVAILTUNES += "mips32r2 mips32r2el"

TUNE_FEATURES_tune-mips32r2 = "${TUNE_FEATURES_tune-mips} mips32r2"
MIPSPKGSFX_VARIANT_tune-mips32r2 = "mips32r2"
PACKAGE_EXTRA_ARCHS_tune-mips32r2 = "mips mips32 mips32r2"

TUNE_FEATURES_tune-mips32r2el = "${TUNE_FEATURES_tune-mipsel} mips32r2"
MIPSPKGSFX_VARIANT_tune-mips32r2el = "mips32r2el"
PACKAGE_EXTRA_ARCHS_tune-mips32r2el = "mipsel mips32el mips32r2el"
EOF



mkdir conf/machine
cat > conf/machine/loongson.conf << "EOF"
#@TYPE: Machine
#@NAME: loongson
#@DESCRIPTION: MIPS Creator loongson

require conf/machine/include/tune-mips64r2.inc

DEFAULTTUNE = "mips64r2el"
MACHINE_FEATURES = "serial"
SERIAL_CONSOLES = "115200;ttyS0 115200;ttyS4"
IMAGE_FSTYPES ?= "tar.bz2"
EOF

参考文献:https://elinux.org/How_to_make_a_yocto_rootfs_for_MIPS_CI20

使用meta-img的layer

>1.首先要保证poky分支和meta-img分支的版本相同:
在poky目录下:
git checkout morty
在meta-img目录下:
git checkout morty

>2.添加meta-img:
source oe-init-build-env  
bitbake-layers add-layer ../meta-img

>3.修改build/conf/local.conf文件:
MACHINE ?= "qemumips64r2el"
DL_DIR ?= "${TOPDIR}/downloads"
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
TMPDIR ?= "${TOPDIR}/tmp"
PACKAGE_CLASSES ?= "package_rpm"
SDKMACHINE ?= "i686"
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"

>4.生成镜像文件
最小文件系统:bitbake core-image-minimal
带GUI的文件系统:bitbake core-image-sato

yocto内核单独编译

1、重新配置内核配置项。

$ bitbake linux-yocto -c menuconfig

2、查看修改后的内核配置项。

$ bitbake linux-yocto -c diffconfig

3、编译内核源代码。

$ bitbake linux-yocto -c compile -f

4、部署编译好的内核源代码。

$ bitbake linux-yocto -c deploy

5、执行yocto后续的安装和打包工作。

$ bitbake linux-yocto 

6、重新执行整个项目的编译工作。此步骤针对上一步对linux内核的修改对整个系统的重新制作。

$ bitbake yocto-image-qt5

执行完毕后,可以在tmp/deploy/image/ale6/目录下看到最新的uImage和根文件系统压缩包。

你可能感兴趣的:(技术)