Yocto:关于在 Yocto 构建中添加 bluez-alsa 的问题
Yocto: question on adding bluez-alsa in Yocto build
我是 Yocto
的新手,我为默认机器 (x86-qemu) 构建了 core-image-sato
。我有以下关于添加食谱的问题:
- 我想在构建中添加 bluez-alsa。我检查了 http://layers.openembedded.org/layerindex/branch/master/recipes/ 并得到了 bb 文件 (bluez-alsa_git.bb)。为了添加它,我创建了一个目录 (bluez-alsa) 并在其中创建了一个 bluez-alsa_git.bb 文件。这是添加新包的正确方法吗?
- 现在在添加 bluez-alsa(如上面步骤 1 中指定的)之后,我正在构建 core-image-sato,但由于 systemd 模块中的依赖项(我从 systemd 模块中的 bb 文件依赖项中看到)失败了).以下是错误:
ERROR: Nothing PROVIDES 'systemd' (but /home/srawat/tree/yocto/yocto_x86/poky/meta/recipes-connectivity/bluez-alsa/bluez-alsa.bb DEPENDS on or otherwise requires it)
systemd was skipped: missing required distro feature 'systemd' (not in DISTRO_FEATURES)
ERROR: Required build target 'bluez-alsa' has no buildable providers.
Missing or unbuildable dependency chain was: ['bluez-alsa', 'systemd']
#
现在包含"systemd"模块的方法是什么?或者
一般情况下,如何在图像中包含依赖包(谈论[=37=的现有包],没有新包)?
此外我还有更多现有的包要添加,将使用建议的方法添加它们。
提前致谢
最好包括提供配方的层,这可能有助于引入所需的直接和间接依赖关系,并且您还看到了缺少依赖关系的问题,但是故事的另一面,来源层可能对其他层有进一步的依赖性,这可能对添加单个配方需要什么提出了太多的要求。
所以在你的情况下,挑选菜谱似乎是一种更好的方法,因为源层有很多依赖,而且这个给定的菜谱只依赖于核心层。
然而,您遇到的问题是您的发行版策略不使用 systemd,但此配方假设 systemd 已启用。所以你有两种方法
- 通过在local.conf
中添加类似下面的内容来启用 systemd 发行版范围
DISTRO_FEATURES_append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""
- 从配方中删除对 systemd 的需求
改变
DEPENDS += "alsa-lib bluez5 systemd glib-2.0 sbc"
到
DEPENDS += "alsa-lib bluez5 glib-2.0 sbc"
但这意味着您不会有 enable/distable/start/stop 从这个包启动服务的存根。这是由层中的配方文件为 systemd 提供的
当使用 systemd 初始化系统时,你将开箱即用 see
如果需要,您可能必须编写自己的初始化脚本来启动它
你的项目
我是 Yocto
的新手,我为默认机器 (x86-qemu) 构建了 core-image-sato
。我有以下关于添加食谱的问题:
- 我想在构建中添加 bluez-alsa。我检查了 http://layers.openembedded.org/layerindex/branch/master/recipes/ 并得到了 bb 文件 (bluez-alsa_git.bb)。为了添加它,我创建了一个目录 (bluez-alsa) 并在其中创建了一个 bluez-alsa_git.bb 文件。这是添加新包的正确方法吗?
- 现在在添加 bluez-alsa(如上面步骤 1 中指定的)之后,我正在构建 core-image-sato,但由于 systemd 模块中的依赖项(我从 systemd 模块中的 bb 文件依赖项中看到)失败了).以下是错误:
ERROR: Nothing PROVIDES 'systemd' (but /home/srawat/tree/yocto/yocto_x86/poky/meta/recipes-connectivity/bluez-alsa/bluez-alsa.bb DEPENDS on or otherwise requires it)
systemd was skipped: missing required distro feature 'systemd' (not in DISTRO_FEATURES)
ERROR: Required build target 'bluez-alsa' has no buildable providers. Missing or unbuildable dependency chain was: ['bluez-alsa', 'systemd']
#
现在包含"systemd"模块的方法是什么?或者
一般情况下,如何在图像中包含依赖包(谈论[=37=的现有包],没有新包)?
此外我还有更多现有的包要添加,将使用建议的方法添加它们。
提前致谢
最好包括提供配方的层,这可能有助于引入所需的直接和间接依赖关系,并且您还看到了缺少依赖关系的问题,但是故事的另一面,来源层可能对其他层有进一步的依赖性,这可能对添加单个配方需要什么提出了太多的要求。
所以在你的情况下,挑选菜谱似乎是一种更好的方法,因为源层有很多依赖,而且这个给定的菜谱只依赖于核心层。
然而,您遇到的问题是您的发行版策略不使用 systemd,但此配方假设 systemd 已启用。所以你有两种方法
- 通过在local.conf 中添加类似下面的内容来启用 systemd 发行版范围
DISTRO_FEATURES_append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""
- 从配方中删除对 systemd 的需求
改变
DEPENDS += "alsa-lib bluez5 systemd glib-2.0 sbc"
到
DEPENDS += "alsa-lib bluez5 glib-2.0 sbc"
但这意味着您不会有 enable/distable/start/stop 从这个包启动服务的存根。这是由层中的配方文件为 systemd 提供的 当使用 systemd 初始化系统时,你将开箱即用 see
如果需要,您可能必须编写自己的初始化脚本来启动它 你的项目