Портирование драйвера из статического в динамический на Yocto - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужно портировать драйвер устройства Linux, который поставляется из патча и компилируется статически.Я хочу использовать его в качестве динамического модуля.

Код драйвера для десериализатора камеры MAX9286 ​​предоставляется в виде исправления для устройства Renesas 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, или, возможно, в рабочем процессе отсутствуют некоторые шаги.

Любые советыБуду очень признателен.

...