Yocto构建LS1046ARDB根文件系统时libusb依赖冲突求助
LS1046ARDB Yocto根文件系统libusb依赖冲突解决
问题背景
为LS1046ARDB开发板构建Yocto根文件系统时,新增的依赖libusb的自定义配方编译正常,但根文件系统构建阶段出现libusb依赖冲突。已尝试在配方文件和local.conf中排除libusb,问题未解决。
错误日志(翻译后)
ERROR: ls-image-main-22.04.1-r0 do_rootfs: 无法调用dnf。命令 '/home/labuser/NEERAJ/ASK_1046/DISTRO/build_ls1046ardb/tmp/work/ls1046ardb-fsl-linux/ls-image-main/22.04.1-r0/recipe-sysroot-native/usr/bin/dnf -v --allowerasing --rpmverbosity=info -y -c /home/labuser/NEERAJ/ASK_1046/DISTRO/build_ls1046ardb/tmp/work/ls1046ardb-fsl-linux/ls-image-main/22.04.1-r0/rootfs/etc/dnf/dnf.conf --setopt=exit-on-err=false --setopt=reposdir=/home/labuser/NEERAJ/ASK_1046/DISTRO/build_ls1046ardb/tmp/work/ls1046ardb-fsl-linux/ls-image-main/22.04.1-r0/rootfs/etc/yum.repos.d --installroot=/home/labuser/NEERAJ/ASK_1046/DISTRO/build_ls1046ardb/tmp/work/ls1046ardb-fsl-linux/ls-image-main/22.04.1-r0/rootfs --setopt=logdir=/home/labuser/NEERAJ/ASK_1046/DISTRO/build_ls1046ardb/tmp/work/ls1046ardb-fsl-linux/ls-image-main/22.04.1-r0/temp --repofrompath=oe-repo,/home/labuser/NEERAJ/ASK_1046/DISTRO/build_ls1046ardb/tmp/work/ls1046ardb-fsl-linux/ls-image-main/22.04.1-r0/oe-rootfs-repo --nogpgcheck install autobridge blktrace can-utils cdx cmm cpufrequtils distrobootscr dpa-app fci fio i2c-tools iozone3 iperf2 iperf3 ipsec-demo ipsec-tools kernel-devicetree kernel-image kernel-modules libcli libpkcs11 linuxptp lmbench lmsensors-sensors makedevs mmc-utils netdata netperf openssl-engines packagegroup-fsl-tools-core packagegroup-fsl-tools-extended pciutils perf qcom rt-tests secure-obj secure-obj-module strongswan sysfsutils tcpdump ubuntu-main ubuntu-main-dbg ubuntu-main-dev ubuntu-main-doc udev-extraconf udev-rules-qoriq usbutils watchdog' 返回值1: 主配置在设置opt前没有exit-on-err属性。 DNF版本: 4.11.1 缓存目录: /home/labuser/NEERAJ/ASK_1046/DISTRO/build_ls1046ardb/tmp/work/ls1046ardb-fsl-linux/ls-image-main/22.04.1-r0/rootfs/var/cache/dnf 从/home/labuser/NEERAJ/ASK_1046/DISTRO/build_ls1046ardb/tmp/work/ls1046ardb-fsl-linux/ls-image-main/22.04.1-r0/oe-rootfs-repo添加oe-repo仓库 主配置在设置opt前没有exit-on-err属性。 用户代理: 回退到'libdnf': 无法检测操作系统或基础架构 仓库: 使用oe-repo的缓存 oe-repo: 使用2024年3月1日周五下午1:29:54 UTC的元数据。 上次元数据过期检查: 0:00:01前,在2024年3月1日周五下午1:29:55 UTC。 --> 开始依赖项解析 --> 依赖项解析完成 **错误: 问题: 包ubuntu-main-22.04.1-r0.aarch64与libusb-1.0-0-1.0.26-r0.aarch64提供的libusb-1.0-0冲突 - 包ubuntu-main-22.04.1-r0.aarch64废弃了libusb-1.0-0-1.0.26-r0.aarch64提供的libusb-1.0-0 - 包qcom-1.0-r0.ls1046ardb需要libusb-1.0.so.0()(64bit),但没有可用的提供者能被安装 - 冲突请求 (尝试添加'--skip-broken'跳过无法安装的包)** ERROR: 失败日志存储在: /home/labuser/NEERAJ/ASK_1046/DISTRO/build_ls1046ardb/tmp/work/ls1046ardb-fsl-linux/ls-image-main/22.04.1-r0/temp/log.do_rootfs.3213332 ERROR: 任务(/home/labuser/NEERAJ/ASK_1046/DISTRO/sources/meta-nxp-desktop/recipes-fsl/images/ls-image-main.bb:do_rootfs)执行失败,退出码'1' 注意: 任务汇总: 尝试执行4421个任务,其中4409个无需重新运行,1个失败。 总结: 1个任务失败: /home/labuser/NEERAJ/ASK_1046/DISTRO/sources/meta-nxp-desktop/recipes-fsl/images/ls-image-main.bb:do_rootfs 总结: 有5条警告信息。 总结: 有1条错误信息,返回非零退出码。
问题根源
ubuntu-main包通过Obsoletes和Conflicts规则,会替换系统中的libusb-1.0-0包qcom包依赖libusb-1.0.so.0库,但ubuntu-main替换后未提供该库的兼容版本,导致依赖链断裂
解决方案
方案1:调整ubuntu-main安装策略
如果ubuntu-main是必需组件,修改镜像配方ls-image-main.bb,排除其对libusb的冲突规则:
# 移除原ubuntu-main,改用不含libusb冲突的版本(若存在) IMAGE_INSTALL_remove = "ubuntu-main" IMAGE_INSTALL_append = "ubuntu-main-nolibusb" # 或者直接指定dnf安装时排除冲突项 ROOTFS_PKGMANAGE_EXTRA_ARGS += "--exclude libusb-1.0-0"
方案2:修复qcom包的依赖
修改qcom配方(或在local.conf中覆盖),使其依赖ubuntu-main提供的libusb兼容版本:
# 在qcom.bb或local.conf中添加 RDEPENDS:qcom = "${@bb.utils.contains('IMAGE_INSTALL', 'ubuntu-main', 'ubuntu-main', 'libusb-1.0-0', d)}"
方案3:强制保留libusb并忽略废弃规则
在local.conf中添加配置,让dnf忽略ubuntu-main对libusb的废弃声明:
EXTRA_IMAGE_FEATURES += "package-management" ROOTFS_POSTPROCESS_COMMAND += "force_libusb_install;" force_libusb_install() { ${ROOTFS_PKGMANAGE_CMD} --setopt=obsoletes=0 install libusb-1.0-0 }
方案4:移除ubuntu-main(非必需时)
如果ubuntu-main不是根文件系统必需的,直接从镜像中移除相关包:
# 在ls-image-main.bb或local.conf中添加 IMAGE_INSTALL_remove = "ubuntu-main ubuntu-main-dbg ubuntu-main-dev ubuntu-main-doc"
内容的提问来源于stack exchange,提问作者Sathya Nagaphani M
相关产品推荐
相关产品推荐

