概述
yocto 是一个系统编译整合工具,可以将各种软件集成在一起并制作成hddimg, iso 等镜像。类似的工具比如openwrt
,用于路由器系统。
资源
yocto 的资源基本都在官网上,最主要的是看其官网的文档。有使用,开发等相关信息。
结构
yocto 的版本有自己的代号,比如在本文写成之前,版本号为2.2
,相应的代号为morty
。可以在官网 download下看到。以及其所支持的平台等。 官方提供的是一个名为poky
的源码,其它平台相关的会有专门的源码位置,需要整全到poky
中来编译,使用。
编译
目前编译针对 intel 的平台做介绍。 需要准备的几个源码。
git clone -b morty git://git.yoctoproject.org/poky.git
git clone -b morty git://git.yoctoproject.org/meta-intel
这里只需要这两个文件目录。
- 建议一个目录,用于编译,比如
yocto
- 将
poky
, 放于yocto
目录下,将meta-intel
放到yocto/poky
目录下 - 进入到
yocto
目录 - 执行
. ./poky/oe-init-build-env
- 如果最后加参数,会生成对应参数的目录名,如果没有加,默认使用
build
名称 - 执行4之后,会自动进入
build
目录。 - 执行
bitbake core-image-sato
即可进行编译
当然编译之前如果没有安装一些基础工具包,会提示错误,可以在官网找到需要安装的工具包有哪些。
本人在ubuntu 16.04
测试成功,在ubuntu 16.10
测试失败,centos 6.x
版本测试失败。
在build
目录下会生成一些文件,需要关注的是conf目录下的bblayer.conf
, local.conf
,在bblayer.conf
下面要将meta-intel
目录加入进去,加入到BBLAYERS
的变量后面,否则会找不到meta-intel
相关的东西。以后下载其它的meta-xx
的软件也可以按这种方法添加,meta-xx
有自己的目录规则,具体可能见官方文档。
local.conf
则是一些重要参数的配置。这里比较重要的一个参数是MACHINE
要设置成intel-corei7-64
,其它平台则有自己的设置方法。官方文档上也有说明这一点。此配置文件下有许多环境变量可以设置,在官方文档reference manual
的最后有对这些变量的用法的说明。可以查看,找到用法。
生成
生成的镜像会被放到 build/tmp/deploy
目录下。其中images
是镜像位置,rpm
是打包成rpm
包的那些软件,sdk
是在做编译链等工具时存放的位置。这些目录下的东西不要去手动删除,它并不会因为不存在而重新生成。
bitbake core-image-sato -c listtasks
可以列出对应编译目标对应可以执行的命令。core-image-sato
自然也可以换成对应的目标软件。如bitbake nginx -c clean
可以对nginx进行清理。默认命令为build
。
原理
原理部分理解不透,只能做一些简单说明。
yocto 的编译工具使用 python 来完成。对应meta下面都有对应的classes
目录,里面存放的是*.bb
文件,这些文件就是对应的编译规则。