linux kernel module linker warnings: “*** Warning: <function> [<module>] undefined!” – any way to get rid of them?-Collection of common programming errors

Finally, I got it. Thanks to shodanex for putting me on the right track.

Update: Be very careful when applying this fix to builds for older versions of kernel, as there is a bug in Makefile.modpost file in older versions of the kernel which makes your build misbehave and build wrong targets when you specify KBUILD_EXTMOD option.

You have to specify the paths to the source of the modules you depend on in KBUILD_EXTMOD make parameter.

Say, you have a module foo that depends on symbols from module bar.

Source files for foo are in foo/module/ and source files for bar are in bar/module/

The make command in Makefile for foo probably looks like

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

(the exact line may differ in your project).

Change it to

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

(we added the KBUILD_EXTMOD=pwd/../bar/module \ line, where pwd/../bar/module is a path to sources of kernel module we depend on.

One would expect KBUILD_EXTRA_SYMBOLS parameter to work this way, however it’s KBUILD_EXTMOD.

Originally posted 2013-11-27 12:26:50.