2012-06-06 107 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