三、Yocto创建自定义的layer和image(基于raspberrypi 4B)

发布于:2024-03-19 ⋅ 阅读:(166) ⋅ 点赞:(0)

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的镜像啦,至此开启我们系统定制的第一步!
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

微信公众号

今日签到

点亮在社区的每一天
去签到