我需要移植一个来自补丁程序的Linux设备驱动程序,并进行静态编译。我想将其作为动态模块。
MAX9286摄像机解串器的驱动程序代码是作为瑞萨R-Car ARM器件的补丁提供的。
我用devtool准备了所有已应用补丁的内核树,所以我准备好了设备驱动程序的最终版本为max9286.c。
该配方可以正常运行,并且.ko已安装到rootfs中,但是内核在加载驱动程序时遇到了问题,并显示了与动态链接有关的错误。
[ 5.469956] max9286: Unknown symbol of_remove_property (err 0)
这是我的驱动程序配方的树:
$ tree
.
├── files
│ ├── COPYING
│ ├── Makefile
│ ├── max9286.c
│ └── max9286.h
└── kernel-module-max9286_0.1.bb
1 directory, 6 files
这是食谱的实际外观:
$ cat kernel-module-max9286_0.1.bb
SUMMARY = "Driver for max9286 Deserializer + max96705 Serializer"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"
inherit module
SRC_URI = "file://Makefile \
file://max9286.h \
file://max9286.c \
file://COPYING \
"
S = "${WORKDIR}"
FILES_${PN} += "${base_libdir}"
KERNEL_MODULE_AUTOLOAD = "max9286"
Makefile的外观如下:
$ cat files/Makefile
obj-m := max9286.o
SRC := $(shell pwd)
all:
$(MAKE) -C $(KERNEL_SRC) M=$(SRC)
modules_install:
$(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install
clean:
rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c
rm -f Module.markers Module.symvers modules.order
rm -rf .tmp_versions Modules.symvers
这些是实际的驱动程序文件。由于它们太长,我正在使用debian的粘贴。
max9286.c:https://paste.debian.net/1064976/
max9286.h:https://paste.debian.net/1064977/
我需要驱动程序是可动态加载的。当前内核无法动态加载驱动程序,并显示错误max9286: Unknown symbol of_remove_property (err 0)
我尝试手动链接到drivers/of/base.o
(定义了of_remove_property
),这虽然有所帮助,但是却产生了一个稍有不同的错误(依赖地狱)。
在配方中可能缺少一些BitBake变量,在Makefile中可能缺少了一些变量,或者在工作流程中缺少了一些步骤。
任何提示将不胜感激。