[완료] Cross Compile 환경 문제 입니다. 해결 방법이 없을까요?

nyxanox의 이미지

안녕하세요.
매번 질문만 하고 있는 리눅스 초보입니다.
이번엔 Cross Compile 환경 문제 때문에 고생하고 있습니다.

우선 제가 수행한 일은...
(1) toolchain을 /opt/toochain에 설치
(2) 타겟 리눅스 커널 버전 2.6.18을 /usr/src/linux에 설치
(3) Makefile을 아래와 같이 작성

CROSS_COMPILE = /opt/toolchain/bin/arm-linux-
CC = $(CROSS_COMPILE)gcc
 
MODULE_OBJS = test.o
EXTRA_CFLAGS += -DEXPORT_SYMTAB
PWD = $(shell pwd)
MODULE = test
KDIR = /usr/src/linux
 
obj-m := $(MODULE_OBJS)
 
default:
        make -C $(KDIR) M=$(PWD) modules
 
$(MODULE).o: $(MODULE_OBJS)
        $(LD) $(LD_RFLAG) -r -o $@ $(MODULE_OBJS)
 
clean:
        make -C $(KDIR) M=$(PWD) clean

(4) make하여 컴파일

위와 같은 과정대로 수행했고... 다음과 같은 에러를 만날 수 있었습니다.

root@desktop:~/test# make
make -C /usr/src/linux M=/root/test modules
make[1]: Entering directory `/usr/src/linux-2.6.28.10'
  CC [M]  /root/test/test.o
cc1: error: invalid option `32'
cc1: error: invalid option `regparm=3'
cc1: error: invalid option `preferred-stack-boundary=2'
cc1: error: invalid option `no-sse'
cc1: error: invalid option `no-mmx'
cc1: error: invalid option `no-sse2'
cc1: error: invalid option `no-3dnow'
/root/test/test.c:1: error: bad value (i686) for -mtune= switch
/root/test/test.c:1: error: bad value (i586) for -march= switch
Assembler messages:
Error: unknown architecture `i586'
 
Error: unrecognized option -march=i586
make[2]: *** [/root/test/test.o] Error 1
make[1]: *** [_module_/root/test] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.28.10'
make: *** [default] Error 2

*참고사항: toolchain이 제대로 설정된 것은 gcc --version으로 확인했습니다.
다른 컴퓨터에서는 제대로 컴파일이 되는 것을 확인 하였습니다. 따라서 소스에는 문제가 없는 듯 합니다.

왜 이럴까요? 답변 좀 부탁드립니다.

cwryu의 이미지

/usr/src 밑에 있는 커널을 x86으로 설정했으니, 컴파일은 arm으로 하는데 x86 플래그가 들어가서 그렇습니다.

make V=1

하면 커맨드라인이 보입니다.

gasiri의 이미지

아래의 내용으로 미루어 보아..
현재 컴파일 하고자 할때 참조한 Architecture랑 toolchain 에 사용하는 architecture 랑
달라서 발생하는 것 같습니다.
사용자 계정의 환경변수에 Architecture 가 다르게 정의 되었거나
아님 다른 어딘 가에서 toolchain 이랑 다른 architecture 가 정의되어서
컴파일시 참조되고 있는 듯합니다.
아무튼 Architecture 를 확인해보세요..

rror: unknown architecture `i586'
nyxanox의 이미지

안녕하세요. cwryu님, gasiri님 답변 감사합니다.

제가 한가지 빠트린 것이 있어서 제대로 make되지 않았습니다.

타겟 시스템의 커널을 컴파일 하지 않아서 발생된 문제였습니다.

커널 2.6.18을 컴파일하고 나니 제대로 동작하네요.

감사합니다.

Good luck, dandy kang!