有没有任何好的说明说明如何在yocto构建中实现蓝牙。
我已经将蓝牙添加到machine.conf中的机器变量中,并将bluez添加到位于构建目录中的local.conf中的local.conf中。在构建新映像之后,由于没有满足ConditionPathIsDirectory=/sys/class/蓝牙的条件,蓝牙将不会启动,这是正确的,因为我的系统中不存在该位置。
我是约克托的新手,所以任何的指导都是非常感谢的。
编辑
因此,/conf/bblayers具有以下内容:
BBLAYERS ?= " \
${BSPDIR}/poky/meta \
${BSPDIR}/poky/meta-poky \
${BSPDIR}/poky/meta-yocto-bsp \
${BSPDIR}/meta-atmel \
${BSPDIR}/meta-openembedded/meta-oe \
${BSPDIR}/meta-openembedded/meta-networking \
${BSPDIR}/meta-openembedded/meta-python \
${BSPDIR}/meta-openembedded/meta-multimedia \
${BSPDIR}/meta-swupdate \
${BSPDIR}/meta-custom \
${BSPDIR}/meta-openembedded/meta-initramfs \local.conf包含:
CORE_IMAGE_EXTRA_INSTALL += "\
bluez5 \
rpm \
valgrind \
"
DISTRO_FEATURES_append = " systemd bluetooth"
DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"
VIRTUAL-RUNTIME_init_manager = "systemd"
VURTUAL-RUNTIME_initscripts = "systemd-compat-units"我的自定义层中的.inc文件包含:
#IMAGE_FEATURES += "ssh-server-openssh package-management"
IMAGE_INSTALL = "\
packagegroup-core-boot \
packagegroup-core-full-cmdline \
packagegroup-base-bluetooth \
kernel-modules \
libgpiod \
ntp \
sqlite3 \
openssl \
mtd-utils \
${CORE_IMAGE_EXTRA_INSTALL} \
"
inherit core-image计算机conf文件包含:
MACHINE_FEATURES = "apm ext2 ext3 pcmcia usbhost usbgadget"正在运行
bitbake -e packagegroup-base | grep ^ADD_BT返回
ADD_BT="packagegroup-base-bluetooth"bitbake -e <image-name> | grep ^IMAGE_INSTALL=返回
IMAGE_INSTALL=" packagegroup-core-boot packagegroup-core-full-cmdline packagegroup-base-bluetooth kernel-modules libgpiod ntp sqlite3 openssl mtd-utils apg-st-databases bluez5 rpm valgrind "bitbake -e packagegroup-base-extended | grep ^RDEPENDS_packagegroup-base-extended=返回
RDEPENDS_packagegroup-base-extended=" packagegroup-base packagegroup-base-wifi packagegroup-base-bluetooth "发布于 2022-03-17 17:03:07
首先,MACHINE专用于有一个值,即您的板的配置文件,您不能在其中添加蓝牙。
Yocto有一个自动蓝牙功能,可以处理将蓝牙添加到您的构建中。但它只适用于有builtin蓝牙模块的板。
有关更多信息,请查看官方的Yocto 这里中的机器功能。
现在让我解释一下蓝牙是如何集成的:
基本上,您只需要一些内核配置和bluez5实用程序。
如果将以下行添加到local.conf或自定义计算机文件中:
DISTRO_FEATURES_append = " bluetooth"如果您构建基于core-image类(如core-image-minimal )的映像,它将生效,因为它包含如下所示的packagegroup-base-bluetooth:
SUMMARY_packagegroup-base-bluetooth = "Bluetooth support"
RDEPENDS_packagegroup-base-bluetooth = "\
bluez5 \
"
RRECOMMENDS_packagegroup-base-bluetooth = "\
kernel-module-bluetooth \
kernel-module-l2cap \
kernel-module-rfcomm \
kernel-module-hci-vhci \
kernel-module-bnep \
kernel-module-hidp \
kernel-module-hci-uart \
kernel-module-sco \
${@bb.utils.contains('COMBINED_FEATURES', 'usbhost', 'kernel-module-hci-usb', '',d)} \
${@bb.utils.contains('COMBINED_FEATURES', 'pcmcia', 'kernel-module-bluetooth3c-cs', '',d)} \
${@bb.utils.contains('COMBINED_FEATURES', 'pcmcia', 'kernel-module-bluecard-cs', '',d)} \
${@bb.utils.contains('COMBINED_FEATURES', 'pcmcia', 'kernel-module-bluetoothuart-cs', '',d)} \
${@bb.utils.contains('COMBINED_FEATURES', 'pcmcia', 'kernel-module-dtl1-cs', '',d)} \
"它只在两个条件下添加packagegroup-base-bluetooth:
bluetooth在DISTRO_FEATRUES中而不是在MACHINE_FEATURES中,则在MACHINE_FEATURES中为(pcmcia、pci或usbhost)之一bluetooth在COMBINED_FEATURES。有关COMBINED_FEATURES的更多信息,请查看此链接。
所以,你只需要把其中一个条件变成现实。
您可以深入了解更多细节,请查看:
poky/meta/classes/core-image.bbclasspoky/meta/recipes-core/packagegroups/packagegroup-base.bb注意事项
例如,如果蓝牙模块有专用的内核驱动程序,则需要通过片段文件在内核配置中激活它。
或者为它创建一个模块配方。
编辑
为了增加蓝牙,只需:
DISTRO_FEATURES_append = " bluetooth"在此之后,您可以检查是否添加了蓝牙包。详情如下:
packagegroup-base-extended总是添加到基于core-image.bbclass的图像中,下面是它的内容:
RDEPENDS_packagegroup-base-extended = "\
packagegroup-base \
${ADD_WIFI} \
${ADD_BT} \
${ADD_3G} \
${ADD_NFC} \
"看到ADD_BT变量了吗?默认情况下,它是空的,只有当第一个条件为真时,它才会填充packagegroup-base-bluetooth,下面是菜谱中的详细信息:
if "bluetooth" in distro_features and not "bluetooth" in machine_features and ("pcmcia" in machine_features or "pci" in machine_features or "usbhost" in machine_features):
d.setVar("ADD_BT", "packagegroup-base-bluetooth")现在,要检查是否添加了它,请运行:
bitbake -e packagegroup-base | grep ^ADD_BT您应该看到:ADD_BT="packagegroup-base-bluetooth"
此外,您还可以检查packagegroup-base-extended是否添加到您的图像中:
bitbake -e <your_image> | grep ^IMAGE_INSTALL=此外,您还可以检查packagegroup-base-extended是否已经打包了蓝牙包:
bitbake -e packagegroup-base-extended | grep ^RDEPENDS_packagegroup-base-extended=EDIT2
您的配置看起来很好,特别是当packagegroup-base-bluetooth随IMAGE_INSTALL一起提供时。
无论如何,我有一些评论你需要考虑:
local.conf
bluez5中删除CORE_IMAGE_EXTRA_INSTALLDISTRO_FEATURES_append = " systemd bluetooth"
DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"
VIRTUAL-RUNTIME_init_manager = "systemd"
VURTUAL-RUNTIME_initscripts = "systemd-compat-units"通过以下方式:
INIT_MANAGER = "systemd"
DISTRO_FEATURES_append = " bluetooth"将inherit core-image放在IMAGE_INSTALL之前,因为IMAGE_INSTALL of core-image不会生效,因为它是?=。所以:
inherit core-image
IMAGE_INSTALL += "\
packagegroup-core-full-cmdline \
kernel-modules \
libgpiod \
ntp \
sqlite3 \
openssl \
mtd-utils \
"现在,提到bluetooth的唯一部分是:
DISTRO_FEATURES_append = " bluetooth"现在,再次检查变量测试。
发布于 2022-03-22 16:46:08
这并不像添加bluetooth和DISTRO_FEATURE那么简单。添加这一点只会将systemd服务和其他用户空间工具添加到构建中。实际上,您真正需要的是支持蓝牙的Linux内核(即向Linux添加必要的驱动程序和配置)。它可以通过通过CONFIG_BT或直接在配置文件上启用menuconfig来完成。此外,您可能希望为正在使用的特定蓝牙硬件包括内核驱动程序/插件。
要使/sys/class/bluetooth存在,内核模块bluetooth.ko,只有当它真正找到一个工作的蓝牙硬件设备时,才由systemd自动加载。
我建议您首先在Linux内核上添加对蓝牙的支持,重新编译和刷新。然后,如果您的BT硬件能够启动,那么所有的用户空间工具都应该开始工作。
这是一个很好的资源,可以帮助您:https://wiki.archlinux.org/title/bluetooth#Troubleshooting
https://stackoverflow.com/questions/71515834
复制相似问题