2012-06-06 61 views
1

我在编译发现OMAPZoom.org在Android 2.6.35内核和我坚持我的想法是愚蠢的Makefile问题。Ç未定义的引用功能 - 编译的Android/Linux内核

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

产生以下错误(加上更多的是相关的):

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

驱动程序/视频/ OMAP2/dsscomp/device.c有以下#include指令:

#include <mach/tiler.h> 

我相信引用包含原型以下文件:

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

反过来,在tiler_set_buf_state定义:

drivers/media/video/tiler/tiler.c 

功能被正确使用的,报头被包括在内。这导致我认为定义没有被编译。该项目正在使用一个相当大的递归Makefile设置。

我真的不知道我还能放什么东西在这里,这将是有益的,但如果有东西,将是有用的问我。我希望有人能够推动我朝着正确的方向前进。

+1

.o文件中未定义的引用往往是由于缺少链接依赖项,而不是缺少的包含。 (虽然一个可能的例外是如果一个头文件实际上应该提供实现代码,而不是仅仅提供一个原型)你可以检查源代码中的特定行是否正在编译,方法是在那里放一个#error并验证这个停止构建,但它正在编译但未链接的可能性仍然存在 - 您可能需要查看为该构建阶段发布的完整命令。您也可以在.o文件中查找标识符。 –

+0

这是一个巧妙的诀窍,我将不得不把它留存以备将来使用。谢谢。 – CatShoes

回答

0

嗯,这是尴尬的:

有在该库包括两个(相关)分支:

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

第一个不工作与OMAP3,或至少与Zoom3(android_zoom3_defoncifg的电路板配置)。

来构建内核的Zoom3,您必须使用第二个(对Android的omap3-2.6.35)分支,否则你会得到吨构建错误的。一天中大部分时间都在重写来自第一个分支的“破碎”代码,因为我使用的是较旧的主板,因此认为这是不正确的。做了正确的分支结帐,它没有任何错误地建立。

对不起。希望这会对别人有帮助!

1

是什么驱动程序/媒体/视频/铺放/的Kconfig说?你确定所有的CFLAGS都设置正确吗?我为omap4平台构建了一个android,并且必须在我的makefile中传递这个变量:“TARGET_BOARD_PLATFORM = omap4”。我还没有完全追踪到哪里(我的系统也有一个复杂的Makefile)。但是,您应该确保 ARCH_OMAP4在makefile的某个位置正确设置。

在我的系统的Kconfig有:

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 
+0

我的Kconfig与您的顶部一致,但在帮助之前停止。这仅适用于OMAP4吗?我在OMAP3上也有这种印象。 OMAP3是我的目标。 – CatShoes

+0

确定这必须是我的内核自定义设置。 -DARCH_OMAP4是否在您的config/Makefile文件中设置? – ajpyles

+0

grep我的内核文件夹。 “DARCH_OMAP4”不在任何文件中。 – CatShoes