Yocto创建自定义的layer和image
yocto创建自定义的layer和image
本篇文章为基于raspberrypi 4B单板的yocto实战系列的第三篇文章,建议按顺序阅读:
一、yocto 编译raspberrypi 4B并启动
二、yocto 集成ros2(基于raspberrypi 4B)
背景介绍
在前面2篇实战系列文章中我们在yocto中集成了ros机器人操作系统,并且在image中安装了一些特定的包和组件:
############################ Add by tao #######################################
IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
SDIMG_ROOTFS_TYPE="ext4.xz"
## enable uart
ENABLE_UART="1"
## packages
IMAGE_INSTALL:append = " openssh-sftp-server sudo python3 python3-pip rpi-gpio raspi-gpio"
IMAGE_FEATURES:append = " ssh-server-openssh"
## add ros package
IMAGE_INSTALL:append = " ros-core turtlesim "
## systemd settings
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"
########################### End by tao ########################################
有个问题,如果后续我们调整了代码的位置,或者需要分享我的工程给别人,每次都需要这么繁琐的操作么,而且local.conf和bblayers.conf文件是自动生成的,怎么能够保证我的修改不丢失呢,这里就到了本章的重点内容,我们可以创建属于我们自己的meta layer,这样以后就可以像添加meta-qt5和meta-ros一样方便,话不多说,直接开始我们的改造工程。
创建layer
如果切换终端或者开关机后请记得执行初始化的指令哦:
source poky-kirkstone/oe-init-build-env rpi-build
进入到poky-kirkstone文件夹下执行如下命令创建我们的layer :meta-rpi-robot
bitbake-layers create-layer meta-rpi-robot
可以看到自动创建了meta-rpi-robot文件夹,并且自动生成了几个文件:
可以看到自动生成了一个conf/layer.conf,里面内容如下:
关于里面的具体变量的含义我们暂时不做详细介绍,先学会用后续在学原理和详细内容.
我们修改一下里面的几个变量:
# 设置layer的优先级到10,数字越大优先级越低
BBFILE_PRIORITY_meta-rpi-robot = "10"
# 设置我们layer的依赖layer,我们暂时依赖meta-qt5 和 meta-ros
LAYERDEPENDS_meta-rpi-robot = "qt5-layer \
ros2-humble-layer \
"
添加image bb文件
在我们的meta-rpi-robot文件下面创建一个recipes-core/images文件夹,并在recipes-core/images文件夹下面创建一个rpi-robot-image.bb文件
mkdir -p recipes-core/images
touch recipes-core/images/rpi-robot-image.bb
将如下内容添加到rpi-robot-image.bb文件中:
DESCRIPTION = "core-image-base for rpi robot"
LICENSE = "MIT"
#require recipes-core/images/core-image-base.bb
inherit core-image
IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
SDIMG_ROOTFS_TYPE="ext4.xz"
# enable uart
ENABLE_UART="1"
IMAGE_FEATURES += "ssh-server-openssh"
IMAGE_INSTALL +=" \
openssh-sftp-server \
sudo \
python3 \
python3-pip \
rpi-gpio \
raspi-gpio \
ros-core \
turtlesim \
"
# systemd settings
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"
下面还需要将创建的layer添加到我们的构建系统:
编译
上面的步骤创建完成以后我们就可以把原来local.conf里面我们添加的那一段Add by tao的内容全部删除啦,后面我们编译就可以使用如下命令来编译我们自定义的image了:
bitbake rpi-robot-image
可以看到在tmp/deploy/images/raspberrypi4-64/文件夹下面有了我们自己的rpi-robot-image的镜像啦,至此开启我们系统定制的第一步!
后续meta-rpi-robot的所有系统定制都将提交到这个gtihub仓库上,欢迎一起创作rpi-robot!
meta-rpi-robot