You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BitBake中oe_runmake编译Rockchip板TP-Link内核驱动失败原因

问题背景

尝试为Rockchip开发板(Radxa Zero 3W)编译TP-Link TU09 USB WiFi模块的内核模块,已准备好本地驱动源码,使用的BitBake配方如下:

DESCRIPTION = "Kernel module for compiling TP-Link T9UH USB dongle"

# Licenses are not handled here
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = ""

# Prepare recipe to handle a non-standard driver as part of the build
SRC_URI = "file://${TOPDIR}/../T9UH_Driver/src.tar.xz;protocol=file"

# We don't need to track versions for now
SRCREV = "${AUTOREV}"

# Set the work directory that gets cleared out on a make failure
CLEANBROKEN = "1"
S = "${WORKDIR}/src"

# Set the extra flags needed flag
EXTRA_OEMAKE += "CONFIG_PLATFORM_ROCKCHIP=y \
                 CONFIG_PLATFORM_I386_PC=n \
                 CONFIG_PLATFORM_ANDROID_X86=n"
                 
# Build as a *.ko module
inherit module

# Do the standard compilation (make)
do_compile() {
    oe_runmake -C ${S}
}

# Ensure the kernel module is copied to the correct directory once it's compiled and built
do_install() {
    install -d ${D}/lib/modules/${KERNEL_VERSION}/extra
    install -m 0755 ${S}/8814au.ko ${D}/lib/modules/${KERNEL_VERSION}/extra
}

# Add the module to the kernel modules package
FILES_${PN} = "${base_libdir}/modules/${KERNEL_VERSION}/extra/*.ko"

# Add module to the dependencies to ensure it's installed correctly
RDEPENDS_${PN} = "kernel-module-${KERNEL_VERSION}"

# Specify the module dependencies
MODULE_DEPENDS = "cfg80211"

COMPATIBLE_MACHINE = "${MACHINE}"

执行bitbake -k t9uh-driver-radxa触发编译后,log.docompile出现如下错误:

DEBUG: Executing shell function do_compile
NOTE: make -j 8 CONFIG_PLATFORM_ROCKCHIP=y CONFIG_PLATFORM_I386_PC=n CONFIG_PLATFORM_ANDROID_X86=n KERNEL_SRC=/home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work-shared/radxa-zero-3w/kernel-source -C /home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/src
make: Entering directory '/home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/src'
make ARCH=arm64 CROSS_COMPILE=aarch64-poky-linux- -C  M=/home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/src  modules
make[1]: Entering directory '/home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/src'
make[1]: Leaving directory '/home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/src'
make[1]: *** M=/home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/src: No such file or directory.  Stop.
make: *** [Makefile:1714: modules] Error 2
make: Leaving directory '/home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/src'
ERROR: oe_runmake failed
WARNING: /home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/temp/run.do_compile.4132099:173 exit 1 from 'exit 1'
WARNING: Backtrace (BB generated script): 
    #1: bbfatal_log, /home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/temp/run.do_compile.4132099, line 173
    #2: die, /home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/temp/run.do_compile.4132099, line 157
    #3: oe_runmake, /home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/temp/run.do_compile.4132099, line 152
    #4: do_compile, /home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/temp/run.do_compile.4132099, line 147
    #5: main, /home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/temp/run.do_compile.4132099, line 186

已确认驱动源码存在于/home/mydev/Radxa_Zero_3W/build-radxa-zero-3w/tmp/work/radxa_zero_3w-poky-linux/t9uh-driver-radxa/1.0/src目录,配方文件位于/home/mydev/Radxa_Zero_3W/,编译却立即失败。


问题根源

从错误日志可见,子make命令的-C参数后为空值,未指定内核源码目录:

make ARCH=arm64 CROSS_COMPILE=aarch64-poky-linux- -C  M=/home/.../src  modules

这是因为自定义的do_compile函数覆盖了module继承类的默认编译逻辑,而module类原本会自动传入内核源码路径作为-C的参数。


修复方案

方案1:移除自定义do_compile函数(推荐)

module继承类已封装标准的内核模块编译流程,无需手动编写do_compile。直接删除配方中的以下代码段:

do_compile() {
    oe_runmake -C ${S}
}

删除后,BitBake会自动使用module类的默认逻辑,正确传递内核源码路径及其他编译参数。

方案2:手动指定内核源码路径(不推荐)

若必须保留自定义do_compile,需在oe_runmake中明确传入内核源码目录:

do_compile() {
    oe_runmake -C "${STAGING_KERNEL_DIR}" M="${S}"
}

其中${STAGING_KERNEL_DIR}是OpenEmbedded提供的内核源码 staging 目录变量,会自动指向正确路径。


额外优化建议

  • 将RDEPENDS_${PN} = "kernel-module-${KERNEL_VERSION}"改为RDEPENDS_${PN} = "kernel-image",无需依赖具体内核版本号,适配性更强。
  • 确认驱动Makefile中的CONFIG_PLATFORM_ROCKCHIP配置是否适配Radxa Zero 3W的arm64架构。

内容的提问来源于stack exchange,提问作者Walter Christie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:02:31