EISC 코드를 맥에 컴파일 하기
맥을 쓰는 사람의 귀찮은 점은 항상 이런거다.. 뭐든지 맥으로 컴파일하기를 만들거나 찾아야 한다는 점이다.
1) 일단 EISC 코드를 가지고 온다.
ADC홈피에서 자료실에서 uCLinux 페이지에서 다운로드 받은 뒤에 적당한 폴더에 압축을 푼다.
2) eisc용 로컬 폴더를 만든다.
/Users/kevinIm/Documents/Projects/EISC/eisclocal
3) 이 폴더를 패스에 등록한다.
export PATH=$PATH:/Users/kevinIm/Documents/Projects/EISC/eisclocal
4) MAKE File에서 COMPILER_PREFIX의 폴더를 새로 만든 폴더로 등록을 한다.
5) make를 한다.
오류 1) gettext가 필요하단다.
You must install 'gettext' on your build machine
Fink로 확인해보자
fink list get
Information about 2543 packages read in 0 seconds.
gengetopt 2.21-1001 Generates getopt_long functions
getopt-long-pm586 1:2.34.b3-12 Extended processing of command line options
p getopt-long-pm588 [virtual package]
getoptbin 1.1.4-2 GNU version of getopt(1)
i gettext 0.10.40-125 Message localization support
i ........
뭔가 나오는데 gettext 가 있다. 이넘을 설치한다.
음 그런데 설치가 되어 있다. 생각해보니 당연한거다.. 맥인데..
그럼 Makefile에서 뭔가 잘못된거다..
요거 저거 보니까..
TARGETS:=host-sed
이 있다. EISC 측에서는 이걸 쓰나 뭔가 정의가 잘못 된것 같다. 아마 리눅스 타겟 만들면서 구분할려고 한것 같다. 일단 나는 리눅스 만들일이 없으므로 무시하구...
TARGETS:=sed
으로 수정해서 다시 컴파일한다. 이번에는 한참 잘 진행한다.
오류 2) 컴파일하다가 오류가 난다.
/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c
/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c: In function ‘linux_gt_pch_use_address’:
/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c:192: error: ‘MAP_ANONYMOUS’ undeclared (first use in this function)
/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c:192: error: (Each undeclared identifier is reported only once
/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c:192: error: for each function it appears in.)
make[2]: *** [host-linux.o] Error 1
make[1]: *** [all-gcc] Error 2
make: *** [/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829-initial/.compiled] Error 2
GUNDAMMACPRO:AE32000C_gcc-3.4.5-v2.6.4 kevinIm$
잘 보시면..
‘MAP_ANONYMOUS 가 정의가 안되어 있다고 에러가 난다.
Host를 리눅스로 설정해놓고 컴파일해서 그렇단다. 슬픈 맥 사용자의 운명인듯..
이것은 /dev/zero를 가리키기 위한 값이다. 일종의 템프 값인데 Linux나 BSD계열은 가지고 있고 OSX계열은 이것을 가리키기 위해서
MAP_ANON을 사용한다.
이것으로 대치하기로 한다.
테스트를 위해서 (잘 되면 그냥 넘어가자.. 맥용 EISC 배포 시스템을 만들것도 아니니까..)
코드는 아래처럼 간단하게 고친다.
#ifndef __GUNDAM__
# define __GUNDAM__
#endif
#ifndef __GUNDAM__
addr = mmap (base, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
#else
addr = mmap (base, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
#endif
아래와 같이 수정한 뒤에 컴파일하면 .. 음 잘넘어가는군..
오류 3) 역시 컴파일하다가 오류..
이번에 좀 넘어가다가 다시 오류가 난다. 음...
libgcc2.c:2:unknown section type: @progbits
컴파일러의 오류로 보여진다.
일단 에러난 부분을 짤라서 디스어셈블 해본다.
어셈블러 등을 못찾는 에러다 이럴수가.. Make 하면 어셈블러도 설치되는게 아니었단 말인가 ?
후덜덜..
여기까지 하고.. 보니.. 이넘이.. GCC만 배포하는것 같네요 쩝...
항상 S/W툴은 텅빈 PC에 한번 설치해보고 나서.. 배포해야 합니다.
안그러면 자신의 환경에 있지만 유저의 환경에는 없는 프로그램이 반드시 1개 이상 나옵니다.
저같은 맥 유저는 더 슬퍼집니다.
컴파일러는 소스로.. 어셈블러는 CYGWIN으로 배포하니.. 음.. 어쩔까요.. 이것을. .
다시 기다려야 할듯.. 빨랑 EISC 사이트가 오픈되어야 하는데..
다시 포팅 시도는 ASM소스를 배포하면 그떄 시도해 보겠습니다. 지금은 그냥 PASS.....
'Embedded' 카테고리의 다른 글
LVDS Owner’s Manual [3] (0) | 2009.05.16 |
---|---|
LVDS Owner’s Manual [2] (0) | 2009.05.15 |
LVDS Owner’s Manual [1] (0) | 2009.05.14 |
인텔 컴파일러 최적화 기능 테스트 (0) | 2009.03.23 |
2008년 10가지 Embedded Design 컬럼 (0) | 2009.01.03 |