왕초보방
글 수 20
2012.09.13 05:48:18 (*.155.24.48)
11001
호스트에서 C코드를 작성하고 컴파일해서 타겟에서 실행에 성공했습니다.
근데 어셈블러는 안되는군요. 제공하는 ToolChain에 있는 as로 어셈블을
시도했지만 잘 되지 않습니다.
우선 어셈블 코드는 다음과 같습니다.
template.s
.text
_start: .global _start
.global main
b main
main:
mov pc, lr
.end
어셈블러 코드는 아무것도 실행하지 않습니다. 아주 단순한 코드를 as로 어셈블을 했습니다.
arm-generic-linux-gnueabi-as -o template.o template.s
arm-generic-linux-gnueabi-ld -o template.elf template.o
그리고 타겟에 전송해서 실행하니 Segmenstation fault 라는 에러가 나오더군요.
as에서 옵션으로 -mcpu 가 빠져서 생긴 오류가 아닌가 생각되기도 하지만
구체적으로 무엇이 문제인지는 모르겠습니다.
제가 가지고 있는 보드는 G100-S3C6410 입니다.



해당하는 문제는 리눅스 머신에서 gcc 를 가지고 하셔도 동일합니다.
arm-generic-linux-gnueabi-gcc sample.c
와 같이 컴파일 하면 자동으로 초기화 코드가 함께 컴파일되어지게 되어 있습니다.
컴파일 하신 분은 .c 하나만으로 모든 코드를 작성했다고 생각하실지 모르지만 그렇지 않습니다.
crt1.c 라는 파일이 컴파일 되어 있는 crt1.o 라는 파일과 함께 링크되죠.
해당 파일은 OS 에서 해당 프로그램을 구동하기 위한 초기화와 로더등이
미리 준비되어 있는 것입니다.
만약 .S 파일하나만 가지고 구동시키시려면... 음... 그 모든 것을 해주셔야 합니다.
어떤 테스트를 진행하려고 하시는지는 모르겠으나
어셈블러 코드가 필요하다면 C 에서 함수호출이 가능하고,
main 을 .S 로 작성하는 경우는 OS 없이 펌웨어 레벨에서 실행시키는 경우가 아니면 잘 사용하지 않습니다.