안녕하세요.
어찌하다 Telechips TCC8801(Cortex-A8 호환)이 들어있는 안드로이드 셋탑이 손에 들어왔습니다.
(http://xellojunil.tistory.com/84 요런 녀석입니다.)
그런데 개발사는 없어졌고, 안드로이드 진저브레드가 올라가 있고, 할수있는건 별로 없고 해서
리눅스를 올리고 외장하드 달아서 써볼까 하다가 ICS로 판올림 해보려고 커널 컴파일을 해보려는데 자꾸 에러가 나네요.
위의 사이트를 참고해서
$ git clone git://github.com/cnxsoft/telechips-linux.git
일단 telechips에서 공개한 kernel-3.0.8 소스를 다운로드하고
$ make ARCH=arm tcc880x_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j2 uImage
명령으로 컴파일 하는데
init/do_mounts_initrd.o: In function `return_address':
/home/nasadmin/telechips-linux/arch/arm/include/asm/ftrace.h:51: multiple definition of `return_address'
init/do_mounts.o:/home/nasadmin/telechips-linux/arch/arm/include/asm/ftrace.h:51: first defined here
scripts/Makefile.build:427: recipe for target 'init/mounts.o' failed
make[1]: *** [init/mounts.o] Error 1
Makefile:946: recipe for target 'init' failed
make: *** [init] Error 2
make: *** Waiting for unfinished jobs....
CC arch/arm/kernel/ptrace.o
CC arch/arm/kernel/return_address.o
CC arch/arm/kernel/setup.o
arch/arm/kernel/return_address.c:62:2: warning: #warning "TODO: return_address should use unwind tables" [-Wcpp]
#warning "TODO: return_address should use unwind tables"
^
arch/arm/kernel/return_address.c:65:7: error: redefinition of ‘return_address’
void *return_address(unsigned int level)
^
In file included from include/linux/ftrace.h:20:0,
from arch/arm/kernel/return_address.c:12:
/home/nasadmin/telechips-linux/arch/arm/include/asm/ftrace.h:48:21: note: previous definition of ‘return_address’ was here
extern inline void *return_address(unsigned int level)
^
scripts/Makefile.build:305: recipe for target 'arch/arm/kernel/return_address.o' failed
make[1]: *** [arch/arm/kernel/return_address.o] Error 1
make[1]: *** Waiting for unfinished jobs....
Makefile:946: recipe for target 'arch/arm/kernel' failed
make: *** [arch/arm/kernel] Error 2
이런 메시지를 뿜고 진전이 없네요 ㅠㅠ
시간있을때 이쪽 공부좀 해둘걸 그랬습니다.
문제는 return_address.c 의 62, 65번째 라인과 ftrace.h 20번째 라인을 봐도 크게 문제 없어보이는데
진행이 안되네요.
혹시 관련분야의 전문가 계시면 도움 부탁드릴께요.
걍 집어치우고 라즈베리파이로 갈까봐요 ㅠㅠ
============================
추가
ftrace.h 파일의 해당부분은
#if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND)
/*
* return_address uses walk_stackframe to do it's work. If both
* CONFIG_FRAME_POINTER=y and CONFIG_ARM_UNWIND=y walk_stackframe uses unwind
* information. For this to work in the function tracer many functions would
* have to be marked with __notrace. So for now just depend on
* !CONFIG_ARM_UNWIND.
*/
void *return_address(unsigned int);
#else
extern inline void *return_address(unsigned int level)
{
return NULL;
}
#endif
이렇게 되어 있고
return_address.c 는
void *return_address(unsigned int level)
{
struct return_address_data data;
struct stackframe frame;
register unsigned long current_sp asm ("sp");
data.level = level + 1;
frame.fp = (unsigned long)__builtin_frame_address(0);
frame.sp = current_sp;
frame.lr = (unsigned long)__builtin_return_address(0);
frame.pc = (unsigned long)return_address;
walk_stackframe(&frame, save_return_addr, &data);
if (!data.level)
return data.addr;
else
return NULL;
}
#else /* if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND) */
#if defined(CONFIG_ARM_UNWIND)
#warning "TODO: return_address should use unwind tables"
#endif
void *return_address(unsigned int level)
{
return NULL;
}
#endif /* if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND) / else */
이렇게 되어 있네요.
CONFIG_FRAME_POINTER는 설정 부분이 없고 CONFIG_ARM_UNWIND=y 로 되어 있어서 무조건
#if defined(CONFIG_ARM_UNWIND)
#warning "TODO: return_address should use unwind tables"
#endif
이부분에 걸리는 것 같은데 해당부분의 기능이 무엇인지도 모르겠습니다. ㅠㅠ
make menuconfig µé¾î°¡¼Å¼ / ´©¸£¸é °Ë»ö ³ª¿É´Ï´Ù. unwind ÀÔ·ÂÇؼ °Ë»öÇϽðí bool tristate µî ¿É¼Ç ²ø¼ö ÀÖ´Â ¿É¼ÇÀ̸é ã¾Æ°¡¼ ²¨º¸¼¼¿ä.
(°Ë»ö ¾ÈµÇ¸é grep À̳ª ack µî À¸·Î ARM_UNWIND ·Î °Ë»ö)
ÀÌÁ¾ Ç÷§Æû¿¡ ¸ÅÀÏ°°ÀÌ Æ÷ÆÃÇϽô ºÐµé Á¤¸» ´ë´ÜÇϽŠ°Í °°³×¿ä.