предупреждения компоновщика модуля ядра Linux: “***, Предупреждающий: <функция> неопределенный [<модуль>]!” - какой-либо способ избавиться от них?

В моем случае проблема не была решена путем обновления butterknife

с: «com.jakewharton: butterknife: 8.4.0» на: «com.jakewharton: butterknife: 8.8.1»

Я попробовал @BindView внутри класса адаптера и не имел успеха. Как только я использовал .findViewById (R.id.message_time), компиляция была успешно завершена.

20
задан Gary 9 March 2009 в 10:19
поделиться

5 ответов

Наконец, я получил его. Благодаря shodanex для помещения меня на правильном пути.

Обновление: Быть очень осторожным при применении этой фиксации к сборкам для более старых версий ядра, как существует ошибка в [1 116] файл Makefile.modpost в более старых версиях ядра, которое заставляет сборку неправильно себя вести и создать неправильные цели, когда Вы определяете опция KBUILD_EXTMOD.

необходимо определить пути к источнику модулей, от которых Вы зависите в [1 118], KBUILD_EXTMOD делает параметр.

Говорят, у Вас есть модуль нечто , который зависит от символов от модуля панель .

Исходные файлы для [1 121] нечто находятся в [1 122], нечто/модули / и исходные файлы для панели находятся в [1 123] панель/модуль /

сделать команда в [1 124] Make-файл для [1 125], нечто , вероятно, похоже

make ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE -C $LINUX_DIR \
    M=`pwd`/module \
    modules

(точная строка может отличаться по Вашему проекту).

Изменение он к [1 112]

make ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE -C $LINUX_DIR \
    M=`pwd`/module \
    KBUILD_EXTMOD=`pwd`/../bar/module \
    modules

(мы добавили KBUILD_EXTMOD = pwd/../bar/module \строка, где pwd/../bar/module путь к источникам модуля ядра, мы зависим от.

можно было бы ожидать параметр KBUILD_EXTRA_SYMBOLS прокладывать себе путь, однако это KBUILD_EXTMOD.

9
ответ дан 30 November 2019 в 00:40
поделиться

Нет они не. Wheter Вы создаете свой код в дереве или из дерева, это сообщение, не должен быть отображен. Я думаю, что необходимо зафиксировать Make-файл. Вот make-файл в качестве примера. Не прекрасный, но используемый для работы (пока 2.6.26, не попробовал его с тех пор):

ifneq ($(KERNELRELEASE),)
# We were called by kbuild

obj-m += mymodule.o 
mymodule-objs := mymodule_usb.o a.o b.o c.o

else  # We were called from command line

KDIR := /lib/modules/$(shell uname -r)/build
PWD  := $(shell pwd)

default:
    @echo '    Building FOO drivers for 2.6 kernel.'
    @echo '    PLEASE IGNORE THE "Overriding SUBDIRS" WARNING'
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

install:
    ./do_install.sh *.ko

endif  # End kbuild check

clean:
    rm -f -r *.o *.ko .*cmd .tmp* core *.i

Для дальнейшей документации, можно проверить дерево ядра, процесс kbuild , зарегистрировал

3
ответ дан 30 November 2019 в 00:40
поделиться

Мне нужно адаптироваться к вашему дереву. В нашем источнике мы создали SYMBOLSDIR, который является путем ко всем модулям

SYMBOLSDIR = 'some path'

make (как в примере выше) $ (KERNELDIR) MODVERDIR = $ (SYMBOLSDIR) modules

0
ответ дан 30 November 2019 в 00:40
поделиться

Используйте KBUILD_EXTRA_SYMBOLS, как показано ниже: KBUILD_EXTRA_SYMBOLS = 'ваш путь к модулю' / Module.symvers

16
ответ дан 30 November 2019 в 00:40
поделиться

В связи с описанным выше методом использования KBUILD_EXTMOD и вопросом о том, в каких версиях ядра он работает:

  • andycjw указал, что он не работает для его в 2.6.12
  • У меня это не работало в 2.6.15 (сломал сборку моего модуля)
  • Просматривая коммиты ядра, я вижу ряд изменений в Makefile.modpost, которые кажутся связанными с 2.6. 26 и 2.6.28, поэтому я ожидаю, что один из них является пределом.
1
ответ дан 30 November 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: