Yocto ,是一个开源社区。它通过提供模版、工具和方法帮助开发者创建基于linux内核的定制系统,支持ARM, PPC, MIPS, x86 (32 & 64 bit)硬件体系架构。
Yocto Project™是一个开源的协作软件,提供模板、工具和方法帮你创建定制的 Linux 系统和嵌入式产品,而无需关心硬件体系。适合嵌入式Linux开发人员使用。极大地简化你的开发过程,因为你不用再从头裁剪一个完整的Linux发布版本,后者通常包括许多你并不需要的软件。
Poky有两个含义,第一个含义是用来构建Linux的构建系统,值得注意的该Poky仅仅是一个概念,而非一个实体:它包含了 BitBake工具、编译工具链、BSP、诸多程序包或层,可以认为Poky即是Yocto的本质;此外Poky还有另外一层意思,使用Poky系统得到的默认参考 Linux 发行版也叫Poky(当然,我们可以对此发行版随意命名)。
Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI) [1] 是为学习计算机编程教育而设计),只有信用卡大小的微型电脑,其系统基于Linux。
如果想快速使用编译好的系统镜像,可以点击下载。
安装到SD卡的说明在README。
推荐使用18.04或20.04 Ubuntu 64位服务器进行构建。
至少需要安装以下软件包:
sudo apt-get install build-essential
sudo apt-get install chrpath
sudo apt-get install diffstat
sudo apt-get install gawk
sudo apt-get install libncurses5-dev
sudo apt-get install python3-distutils
sudo apt-get install texinfo
所有版本的Ubuntu,你应该通过在shell中运行这个命令来将默认的Ubuntu shell从dash改为bash
sudo dpkg-reconfigure dash
对于所有上游存储库,使用[dunfell]分支。
首先主要的Yocto项目poky层
~$ git clone -b dunfell git://git.yoctoproject.org/poky.git poky-dunfell
然后依赖层在它下面:
~$ cd poky-dunfell
~/poky-dunfell$ git clone -b dunfell git://git.openembedded.org/meta-openembedded
~/poky-dunfell$ git clone -b dunfell https://github.com/meta-qt5/meta-qt5
~/poky-dunfell$ git clone -b dunfell git://git.yoctoproject.org/meta-raspberrypi
~/poky-dunfell$ git clone -b dunfell git://git.yoctoproject.org/meta-security.git
除了定期更新之外,这些存储库应该不需要修改,并且可以在不同的项目或不同的开发板中重用。
jumpnow的公共元层改变一些上游包默认值和添加一些自定义配方。
~/poky-dunfell$ git clone -b dunfell https://github.com/jumpnow/meta-jumpnow
在克隆之前,为meta-rpi存储库创建一个单独的子目录。这是您将进行自定义的地方。
~$ mkdir ~/rpi
~$ cd ~/rpi
~/rpi$ git clone -b dunfell git://github.com/jumpnow/meta-rpi
设置构建生产目录,推荐根据不同的项目或开发板选择一个生成目录,这样可以快速地在项目之间切换。对于这个示例,把构建目录和meta-rpi放在同一层(~/rpi/)。
有两种方式创建构建目录:
~$ mkdir -p ~/rpi/build/conf
~$ source ~/poky-dunfell/oe-init-build-env ~/rpi/build
在meta-rpi/conf目录中有一些示例配置文件。
将它们复制到build/conf目录(删除’ -sample ')
~$ cd ~/rpi
~/rpi$ cp meta-rpi/conf/local.conf.sample build/conf/local.conf
~/rpi$ cp meta-rpi/conf/bblayers.conf.sample build/conf/bblayers.conf
如果你使用oe-init-build-env脚本来创建构建目录,它会在build/conf目录中生成一些通用的配置文件。
警告:在Yocto配置文件中定义目录路径时不要使用’ ~ '字符。
在~/rpi/build/conf/bblayers.conf文件中,如果修改了前面说明中的任何路径,将${HOME}替换为系统上的meta-layer存储库的适当路径。
警告:不要在你的bblayer .conf中包含meta-yocto-bsp。Yocto BSP对树莓派的支持库是meta-raspberrypi。
如果完全按照上述路径配置的话则不需要修改,如下即可:
BBLAYERS ?= " \
${HOME}/poky-dunfell/meta \
${HOME}/poky-dunfell/meta-poky \
${HOME}/poky-dunfell/meta-openembedded/meta-oe \
${HOME}/poky-dunfell/meta-openembedded/meta-multimedia \
${HOME}/poky-dunfell/meta-openembedded/meta-networking \
${HOME}/poky-dunfell/meta-openembedded/meta-perl \
${HOME}/poky-dunfell/meta-openembedded/meta-python \
${HOME}/poky-dunfell/meta-qt5 \
${HOME}/poky-dunfell/meta-raspberrypi \
${HOME}/poky-dunfell/meta-security \
${HOME}/poky-dunfell/meta-jumpnow \
${HOME}/rpi/meta-rpi \
"
一般情况下,~/rpi/build/conf/bblayers.conf需要自定义的配置项有:
除了MACHINE配置项外,其他所有默认值都可以正常工作。
机器配置文件。如果设置MACHINE =“raspberrypi3”,则OpenEmbedded构建系统会在此目录中查找raspberrypi3.conf文件。如果您要为Yocto项目添加新机器的支持,请查看此目录meta-raspberrypi/conf/machine。
可供选择的机器配置有:
一次只能为一种类型的机器构建。
这是临时构建文件和最终构建二进制文件输出的地方。预期至少使用50GB。
默认位置在build目录下,在本例中为~/rpi/build/tmp。
如果指定一个替代位置,请确保运行构建的用户可对该目录进行写操作。
下载的源文件将存储在这里。你可以在配置和构建之间共享它,所以建议是在项目目录之外为它创建一个通用位置。确保构建的用户对目录具有写权限。
默认位置在构建目录~/rpi/build/downloads中。
这是另一个Yocto构建目录,它可以变得非常大,大于8GB。我经常把它放在我的主目录之外的其他地方。
默认位置在构建目录~/rpi/build/sstate-cache中。
默认情况下只有一个登录用户,那就是root。
local.conf文件中的这两行代码将默认密码设置为:jumpnowtek
INHERIT += "extrausers"
EXTRA_USERS_PARAMS = "usermod -P jumpnowtek root; "
这两行代码强制在第一次登录时更改密码
INHERIT += "chageusers"
CHAGE_USERS_PARAMS = "chage -d0 root; "
如果您不希望登录时更改密码,可以将它们注释掉。
如果您根本不需要密码(比如开发时),注释这四行并取消注释这一行
EXTRA_IMAGE_FEATURES = "debug-tweaks"
#INHERIT += "extrausers"
#EXTRA_USERS_PARAMS = "usermod -P jumpnowtek root; "
#INHERIT += "chageusers"
#CHAGE_USERS_PARAMS = "chage -d0 root; "
登录后可以随时添加或更改密码。
您需要将Yocto环境源到您的shell中,然后才能使用bitbake。oe-init-build-env不会覆盖您定制的conf文件。
~$ source poky-dunfell/oe-init-build-env ~/rpi/build
### Shell environment set up for builds. ###
You can now run 'bitbake '
Common targets are:
core-image-minimal
core-image-sato
meta-toolchain
meta-toolchain-sdk
adt-installer
meta-ide-support
You can also run generated qemu images with a command like 'runqemu qemux86'
~/rpi/build$
注意:重启电脑、重新打开控制台的时候,都需要执行一次准备构建环境,否则下方命令无法执行(bitbake: command not found)。
要构建控制台镜像console-image,请运行以下命令:
~/rpi/build$ bitbake console-image
由于构建镜像需要先下载源码再编译,这是一个漫长的过程,一般建议用VPN代理进行构建。也可以先下载代码,准备完成后再进行编译:
bitbake console-image --runall=fatch
备注:这是一个使用代理下载的示例:
source poky-dunfell/oe-init-build-env rpi/build
export FETCHCMD_wget="/usr/bin/env /usr/bin/tsocks wget -t 2 -T 30 --passive-ftp --no-check-certificate"
export BB_ENV_EXTRAWHITE="FETCHCMD_wget"
bitbake console-image --runall=fetch
可能偶尔会遇到与包相关的构建错误,这些包要么无法下载,要么有时构建顺序混乱。简单的解决方案是清理失败的包并再次重新运行构建。
例如,我遇到内存不足导致boost编译失败,我将运行这个单独构建:
~/rpi/build$ bitbake -c cleansstate boost
~/rpi/build$ bitbake boost
然后继续完整的构建:
~/rpi/build$ bitbake console-image
直到下次构建时,镜像文件才会从TMPDIR删除。
在构建完成后,可以在**/deploy/images/$MACHINE中找到引导加载程序、内核和rootfs映像文件,其中MACHINE来自你的local.conf。
To be continue…