Мне нужно портировать драйвер устройства 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, или, возможно, в рабочем процессе отсутствуют некоторые шаги.
Любые советыБуду очень признателен.