在Yocto上将驱动程序从静态移植到动态

时间:2019-02-04 11:32:59

标签: kernel yocto bitbake

我需要移植一个来自补丁程序的Linux设备驱动程序,并进行静态编译。我想将其作为动态模块。

MAX9286​​摄像机解串器的驱动程序代码是作为瑞萨R-Car ARM器件的补丁提供的。

https://github.com/CogentEmbedded/meta-rcar/blob/v3.9.0/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0030-Gen3-LVDS-cameras.patch

我用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中可能缺少了一些变量,或者在工作流程中缺少了一些步骤。

任何提示将不胜感激。

0 个答案:

没有答案