CatShoes
CatShoes

Reputation: 3733

c undefined reference to function - Compiling android/linux kernel

I am compiling the Android 2.6.35 kernel found on OMAPZoom.org and I am stuck with what I think is a silly Makefile problem.

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

yields the following error (plus more that are related):

drivers/built-in.o: In function `dsscomp_createcomp':
drivers/video/omap2/dsscomp/device.c:175: undefined reference to `tiler_set_buf_state'

drivers/video/omap2/dsscomp/device.c has the following #include directive:

#include <mach/tiler.h>

which I believe references the following file containing the prototype:

arch/arm/mach-omap2/include/mach/tiler.h

In turn, tiler_set_buf_state is defined in:

drivers/media/video/tiler/tiler.c

The function is being used correctly, the header is included. This leads me to think the definition is not being compiled. This project is using a rather large recursive Makefile setup.

I'm not really sure what more I can put in here that will be helpful, but if there is something that would be useful ask me. I was hoping that someone could give me a push in the right direction.

Upvotes: 1

Views: 2263

Answers (2)

CatShoes
CatShoes

Reputation: 3733

Well this is embarrassing:

There are two (relevant) branches in that repository:

p-android-omap-2.6.35
p-android-omap3-2.6.35

The first one does not work with OMAP3, or at least with the Zoom3 (board config of android_zoom3_defoncifg).

To build the kernel for the Zoom3, you must use the second (p-android-omap3-2.6.35) branch or you will get tons of build errors. Wasted most of a day re-writing "broken" code from the first branch thinking it was incorrect since I'm using an older board. Did a checkout on the correct branch and it built without any errors.

Sorry. Hopefully this will be helpful for someone else!

Upvotes: 0

ajpyles
ajpyles

Reputation: 628

What does drivers/media/video/tiler/Kconfig say? Are you sure that all of CFLAGS are set correctly? I've built an android for the omap4 platform and had to pass in this variable in my makefile : "TARGET_BOARD_PLATFORM=omap4". I haven't exactly traced where that goes.( My system too has a complicated Makefile). But you should probably make sure that ARCH_OMAP4 is set correctly somewhere in your makefile.

On my system Kconfig has:

config TILER_OMAP
    tristate "OMAP TILER support"
    default y
    depends on ARCH_OMAP4
help
       TILER driver for OMAP based boards.

config DUCATI_BUFFER_PROTECTION
    tristate "OMAP DUCATI input buffer protection"
    default y
    depends on TILER_OMAP
help
       Reserve 8MB memory for input buffer protection

Upvotes: 1

Related Questions