Yocto - 添加树内核模块
Yocto - adding out of tree kernel module
我想在我的 Yocto 项目中添加一个 wifi 树外内核模块。我在 Open Embedded Layer Index 上找到了一个包含我需要的驱动程序的层 (https://layers.openembedded.org/layerindex/branch/master/layer/meta-rtlwifi/)。我无法构建图像,因为我从 bitbake
:
收到以下错误
install: cannot stat
'build/tmp/work/<machine_dir>/rtl8821cu/5.8.1.2-git-r0/git/8821cu.ko': No
such file or directory WARNING: exit code 1 from a shell command.
这个文件应该是由 Makefile 创建的,但是 make
没有生成错误。
驱动程序配方如下:
SUMMARY = "RTL8821CU kernel driver (wifi)"
DESCRIPTION = "RTL8821CU kernel driver"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRCREV = "2dace83e5f4cada52bbe3930b864c3eb82390b1f"
SRC_URI = "git://github.com/spriteguard/rtl8821CU;protocol=https "
S = "${WORKDIR}/git"
PV = "5.8.1.2-git"
DEPENDS = "virtual/kernel"
inherit module
#This is the only line added by me to this recipe because sh wasn't able to find `bc`
EXTRA_OEMAKE += "-I${S}/usr/bin' "
EXTRA_OEMAKE += "ARCH=${ARCH}"
EXTRA_OEMAKE += "KSRC=${STAGING_KERNEL_BUILDDIR}"
MODULES_INSTALL_TARGET="install"
do_install () {
install -d ${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/net/wireless
install -m 0644 ${B}/8821cu.ko ${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/net/wireless/rtl8821cu.ko
}
FILES_${PN} += "${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/net/wireless/rtl8821cu.ko"
RPROVIDES_${PN} += "kernel-module-${PN}-${KERNEL_VERSION}"
我尝试添加以下任务:
do_compile () {
oe_runmake
}
但这并没有改变什么。我需要在这个食谱中添加一行:EXTRA_OEMAKE += "-I${S}/usr/bin' "
因为 sh
找不到 bc
。也许 bitbake
没有再看到一个 file/library?
当我在我的 PC 上克隆存储库时 运行 make
,创建了文件 *.ko。在 Yocto 中创建此模块会导致什么问题?我使用的是官方层和配方,所以我想它应该可以工作。
您必须更换 SRCREV。因为据我所知,上述配方的 SRCREV 使用的是旧版本。您可以检查“git 日志”并选择最新的提交。
我成功地使用了 master 分支和 bitbake。
我想在我的 Yocto 项目中添加一个 wifi 树外内核模块。我在 Open Embedded Layer Index 上找到了一个包含我需要的驱动程序的层 (https://layers.openembedded.org/layerindex/branch/master/layer/meta-rtlwifi/)。我无法构建图像,因为我从 bitbake
:
install: cannot stat 'build/tmp/work/<machine_dir>/rtl8821cu/5.8.1.2-git-r0/git/8821cu.ko': No such file or directory WARNING: exit code 1 from a shell command.
这个文件应该是由 Makefile 创建的,但是 make
没有生成错误。
驱动程序配方如下:
SUMMARY = "RTL8821CU kernel driver (wifi)"
DESCRIPTION = "RTL8821CU kernel driver"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRCREV = "2dace83e5f4cada52bbe3930b864c3eb82390b1f"
SRC_URI = "git://github.com/spriteguard/rtl8821CU;protocol=https "
S = "${WORKDIR}/git"
PV = "5.8.1.2-git"
DEPENDS = "virtual/kernel"
inherit module
#This is the only line added by me to this recipe because sh wasn't able to find `bc`
EXTRA_OEMAKE += "-I${S}/usr/bin' "
EXTRA_OEMAKE += "ARCH=${ARCH}"
EXTRA_OEMAKE += "KSRC=${STAGING_KERNEL_BUILDDIR}"
MODULES_INSTALL_TARGET="install"
do_install () {
install -d ${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/net/wireless
install -m 0644 ${B}/8821cu.ko ${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/net/wireless/rtl8821cu.ko
}
FILES_${PN} += "${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/net/wireless/rtl8821cu.ko"
RPROVIDES_${PN} += "kernel-module-${PN}-${KERNEL_VERSION}"
我尝试添加以下任务:
do_compile () {
oe_runmake
}
但这并没有改变什么。我需要在这个食谱中添加一行:EXTRA_OEMAKE += "-I${S}/usr/bin' "
因为 sh
找不到 bc
。也许 bitbake
没有再看到一个 file/library?
当我在我的 PC 上克隆存储库时 运行 make
,创建了文件 *.ko。在 Yocto 中创建此模块会导致什么问题?我使用的是官方层和配方,所以我想它应该可以工作。
您必须更换 SRCREV。因为据我所知,上述配方的 SRCREV 使用的是旧版本。您可以检查“git 日志”并选择最新的提交。 我成功地使用了 master 分支和 bitbake。