음...왠만하면 쪽팔려서...질문 안할라고 했는데....당췌 몰라서...
모르면 물어보라는 예전 울 사수의 가르침을 떠올리며...질문 드립니다...
초보의 질문이니 X랄 같은 질문이더라도 너그러이 용서하시길....
----------------------------------------------------------------
우선 제가 u-boot 1.1.4를 smdk2410 설정에 따라 분석하고 있는데, c-routine
부분에서 막히는 부분이 있습니다..
board.c의 start_armboot()에, 다음의 부분이 있는데...
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr)
{
if ((*init_fnc_ptr)() != 0)
{
hang ();
}
}
요런 부분이 나오는데...뭐 for문 돌아가는거야 함수 포인터 이용해서 배열 안에
있는 함수 하나씩 불러 실행하는 거라는 거...쉽게 알 수 있는데...
init_sequence 라는 배열에 선언된 몇몇 함수 (cpu_init, board_init, dram_init)
가 불려지는 부분에 의문이 들더군요...
일단, 이 세개 함수(cpu_init, board_init, dram_init)의 prototype이 선언된 파
일이 u-boot-arm.h 인데...이 u-boot-arm.h 파일을 include 하는 파일은
common.h 밖에 없고, 이 넘이 다음과 같이 조건부 컴파일로 묶여 있었습니다.
#ifdef CONFIG_ARM
# include <asm/mach-types.h>
# include <asm/setup.h>
# include <asm/u-boot-arm.h> /* ARM version to be fixed! */
#endif /* CONFIG_ARM */
그런데 제가 정말로 의문이 드는 것은 u-boot 전체 디렉토리를 암만 뒤져도
CONFIG_ARM 이라는 매크로는 없더라는 겁니다...당황스럽더군요...
AESOP에서 제공하는 u-boot 소스(컴파일이 되어 있는 소스 같더군요..)를 봐도
CONFIG_ARM 매크로는 없다군요...
혹시나 해서 다른 리눅스 서버에서 for문 부분하고 함수포인터 배열만 비슷하게
모사해서 프로그램 짜고, TEST를 해봤는데 prototype 없으면 당근 컴파일
안되더군요...긍께...저는 test할 때, gcc -o 옵션으로 바로 실행파일 뽑아보는
걸로 컴파일을 걸어봤는데 에러나더군요.
뭐 다른 부분도 걸리는 게 많아서 makefile 부터 다시 차근차근 분석을 했는데...
mkconfig 파일까지 분석 하니라고 뚤어져라 봤습니다만...다른 의문사항은 대부분
풀리는데, 이상하게 이 u-boot-arm.h 파일의 include 부분은 해결의 실마리를
찾지 못했습니다...
그래서, '고도리'님이 쓰신 u-boot 자료의 c-routine 부분을 차분하게 읽어 보았
으나, 제눈에는 답이 안보이더군요...
"뭐 실제 컴파일 하면 되겠지.." 이러고 다음 부분으로 넘어가도 되기는 한데...
넘어가려고 다음 부분 보면...꼭...머리 속에 이 문제가 걸려서...
쫌 뭐랄까...대변보고 난 뒤에 다 안 닦고 화장실 나온 느낌이랄까....
빚 안 갚고 빚쟁이 한테 쫓기는 기분이랄까........ㅡ,.ㅡ;;
쓰고 보니 넋두리가 되버렸네요....ㅡㅡ;.....이거 때문에 맘 고생이 싶해서...ㅜㅜ
고수분들의 답변을 부탁드립니다....
PLATFORM_CPPFLAGS += -DCONFIG_ARM -D__ARM__
내용이 이렇게 되어 있습니다.
define의 경우 header에서 하는 경우도 있지만, 컴파일 옵션으로
처리하는 경우도 있습니다...^^
그럼...