Yocto Kirkstone构建STM32MP1时出现of_find_mipi_dsi_device_by_node未定义引用错误
问题:STM32MP1开发板Yocto Kirkstone构建内核时出现链接错误
环境信息
- 硬件:STM32MP1开发板(型号:emsbc-argon)
- Yocto版本:Kirkstone(DISTRO_CODENAME="kirkstone")
- 构建配置:
Build Configuration: BB_VERSION = "2.0.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "universal" TARGET_SYS = "arm-emt_eglfs-linux-gnueabi" MACHINE = "emsbc-argon" DISTRO = "emt-eglfs" DISTRO_VERSION = "1.3" TUNE_FEATURES = "arm vfp cortexa7 neon vfpv4 thumb callconvention-hard" TARGET_FPU = "hard" DISTRO_CODENAME = "kirkstone" ACCEPT_EULA_emsbc-argon = "1" GCCVERSION = "11.%" PREFERRED_PROVIDER_virtual/kernel = "linux-stm32mp-argon" meta-emtrion-emsbc-argon = "HEAD:7c4912ff0cecc10281ca52a18402d0a29d9ad6ec" meta-emtrion = "HEAD:254f385f1d5b8deb0723a0dc4fdb996dd64661b1" meta = "HEAD:f7766da462905ec67bf549d46b8017be36cd5b2a" meta-oe meta-initramfs meta-multimedia meta-python meta-networking meta-webserver meta-filesystems meta-perl = "HEAD:05dcac98473402d87e0af73bbc2c5a6a840abe93" meta-qt5 = "HEAD:5b71df60e523423b9df6793de9387f87a149ac42" meta-st-stm32mp = "HEAD:ca501bd7dbe023682903ceedddaacd940b0898f4" meta-st-openstlinux = "HEAD:cb736b403d0fef2a02390695613b6b4bb13ca1b7" meta-gnome meta-xfce = "HEAD:05dcac98473402d87e0af73bbc2c5a6a840abe93"
错误信息
构建自定义配方m4examples.bb时出现以下内核链接错误:
ld: drivers/input/touchscreen/edt-ft5x06.o: in function `edt_ft5x06_ts_probe': | edt-ft5x06.c:(.text+0x15a4): undefined reference to `of_find_mipi_dsi_device_by_node' | make[1]: *** [/home/hico/work/emtrion-beta-test/build-argon/tmp-glibc/work-shared/emsbc-argon/kernel-source/Makefile:1080: vmlinux] Error 1 | make: *** [/home/hico/work/emtrion-beta-test/build-argon/tmp-glibc/work-shared/emsbc-argon/kernel-source/Makefile:179: sub-make] Error 2 | ERROR: oe_runmake failed
解决思路
1. 启用内核MIPI DSI相关配置
of_find_mipi_dsi_device_by_node是MIPI DSI子系统的API,需确保内核配置中开启对应选项:
- 执行
bitbake -c menuconfig virtual/kernel进入内核配置界面 - 找到并启用
CONFIG_DRM_MIPI_DSI(路径:Device Drivers > Graphics support > DRM support > MIPI DSI support) - 若edt-ft5x06驱动依赖其他MIPI相关模块,同步开启对应配置
2. 检查驱动编译配置
- 确认edt-ft5x06驱动的Makefile中包含正确编译规则,如
obj-$(CONFIG_TOUCHSCREEN_EDT_FT5X06) += edt-ft5x06.o - 检查驱动源码是否包含必要头文件:
#include <drm/mipi_dsi.h>,确保API声明被正确引入
3. 校验内核源码一致性
- 确认
linux-stm32mp-argon内核版本与meta层(如meta-st-stm32mp)版本匹配,避免因API变更导致函数缺失 - 若有自定义内核补丁,检查是否误删了MIPI DSI子系统的函数实现代码
4. 排除自定义配方干扰
- 检查
m4examples.bb是否修改了内核编译参数(如CFLAGS/LDFLAGS)或内核配置,这类修改可能破坏链接流程 - 尝试单独构建内核:执行
bitbake virtual/kernel -c clean && bitbake virtual/kernel,若仍报错则问题与配方无关,需聚焦内核本身排查
内容的提问来源于stack exchange,提问作者radium88
相关产品推荐
相关产品推荐

