目标
我想将Linux内核源代码中的触摸屏驱动程序添加到我的Yocto镜像中(此链接将带您到goodix.c)。基本上我需要将其添加为内核模块。
解决方案
我按照Yocto Mega手册中的合并树外模块部分进行操作。其中,我以他们的示例内核模块配方为基础,称之为hello-mod。
- 在配方文件
goodix-9271_0.1.bb
中:RPROVIDES_${PN} = "kernel-module-goodix"
- 在
layer.conf
中:MACHINE_EXTRA_RDEPENDS += "kernel-module-goodix"
问题
我的构建过程在do_rootfs
中一直失败,并显示以下错误:
Error:
Problem: package packagegroup-base-1.0-r83.imx6ul_var_dart requires packagegroup-machine-base, but none of the providers can be installed
- package packagegroup-base-extended-1.0-r83.imx6ul_var_dart requires packagegroup-base, but none of the providers can be installed
- package packagegroup-machine-base-1.0-r83.imx6ul_var_dart requires kernel-module-goodix, but none of the providers can be installed
- conflicting requests
- nothing provides kernel-module-goodix-5.4.3-imx6ul+gb40ccfdb73ea needed by goodix-9271-0.1-r0.imx6ul_var_dart
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
在阅读了这一部分的文档后,我无法理解的是为什么会出现这个错误。我尝试调整配方名称(删除内核模块前缀等),但似乎没有任何作用。到底是哪里出了问题呢?
来源
inherit module logging
# Driver for Goodix touchscreens
SUMMARY = "Generic driver for Goodix touchscreens"
DESCRIPTION = "Support for Goodix 1151, 5663, 5688, 917S, 9286, 911, 9271, 9110, 927, 928, 912, 9147, and 967 touchscreens"
# License
LICENSE = "GPL-2.0"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
# Compatibility
COMPATIBLE_MACHINE = "(imx)"
# Package name
RPROVIDES_${PN} = "kernel-module-goodix"
# Source
S = "${WORKDIR}"
SRC_URI = "file://Makefile \
file://goodix.c"
# Functions
do_install() {
bbwarn "Installing Goodix kernel module ..."
bbwarn "KERNEL_SRC = ${KERNEL_SRC}"
bbwarn "KERNEL_VERSION = ${KERNEL_VERSION}"
bbwarn "WORKDIR = ${WORKDIR}"
cd ${S}
xz goodix.ko
install --verbose -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/input/touchscreen
install --verbose -m 0644 goodix.ko.xz ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/input/touchscreen
}
# Reference included files
FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/input/touchscreen/*"
编辑
- 这个错误基本上是说没有提供
kernel-module-goodix-5.3.4-imx6ul+gb40ccfdb73ea
。然而我并没有用那种方式命名我的包。所以为什么它要在那里寻找具有后缀5.3.4-imx6ul+gb40ccfdb73ea
的东西呢?
编辑(解决方案)
对于任何不满意已接受答案的读者,请注意,我的原始配方出了问题,因为我没有将我的实际配方命名为"kernel-module-<name>.bb"
。这实际上是所需的。
RPROVIDES_${PN} +=
而不是=
吗? - Barnabas Busa