기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요?

처음 글을 질문을 드려 죄송하게 생각합니다만, 달리 질문을 할 데가 없네요.


beaglebone 보드를 구입해 처음부터 공부를 하고 있습니다.

ti am3359 라는 cortex-a8 프로세서를 달고 있습니다.

ti에서 제공하는 am3359용 startware 라는 것을 받아 bootloader를 컴파일 해보고 있습니다.

startware에는 gcc, 코드콤포저, iar 환경을 위한 프로젝트 를 같이 제공해 주고 있습니다.


그런데 cygwin에서 arm-none-eabi-* (yagarto) 를 사용해 컴파일 하면


selected processor does not support requested special purpose register -- `msr cpsr_c,#MODE_UND|I_F_BIT'


라는 에러를 만납니다.


ARM사에서 제공하는 퀵 인스트럭션 카드를 보면 틀리지 않은 구문 같은데요.

이 문장이 ccs 에서는 잘 컴파일이 되어서 빌드가 됩니다.

ccs에서 사용하는 컴파일러는 ccs 설치할때 같이 설치된 것입니다.


그런데 재미나는 것은 iar에서는 저렇게 immediate 값을 쓰지 않고 구현이 되어있습니다.


<iar 용 소스>

         mrs     r0,cpsr                       ; Original PSR value

         bic     r0,r0,#MODE_MSK               ; Clear the mode bits

         orr     r0,r0,#MODE_SVC|I_F_BIT       ; Set Supervisor mode bits

         msr     cpsr_c,r0                     ; Change the mode

         ldr     sp,=SFE(SVC_STACK)            ; End of SVC_STACK


참고로,


<gcc 용 소스>

         LDR   r0, =_stack                     @ Read the stack address

         MSR   cpsr_c, #MODE_UND|I_F_BIT       @ switch to undef  mode

         MOV   sp,r0                           @ write the stack pointer

         SUB   r0, r0, #UND_STACK_SIZE         @ give stack space


<ccs용 소스>

         LDR   r0, _stackptr                     ; Read the stack address

         MSR   cpsr_c, #MODE_UND|I_F_BIT       ; switch to undef  mode

         MOV   sp,r0                           ; write the stack pointer

         SUB   r0, r0, #UND_STACK_SIZE         ; give stack space



gnu as 문서를 살펴봤지만, msr에 대한 단서는 못찾았습니다. 당연한가요? ㅜㅜ

arm 좀 어렵네요. 찾아봐야 할 문서의 양은 둘째치고 체계적으로 정리해나가기가 참 힘듭니다.


장황해서 다시 질문을 요약하겠습니다.


위 gcc용 소스에서 왜 다음과 같은 컴파일 에러가 날까요?


selected processor does not support requested special purpose register -- `msr cpsr_c,#MODE_UND|I_F_BIT'


답변 부탁드립니다.

감사합니다.


고도리

2012.08.30 00:04:26
*.140.70.27

gcc 버전의 문제이거나, gcc 옵션의 문제입니다.

 

즉, 해당 명령어는 선택된 cpu에는 지원하지 않는다는 것이거든요.

대부분 이런 경우는 툴체인 문제거나, 아니면 컴팔옵션 중 cpu 옵션 문제입니다.

쿨한넘

2012.08.30 00:27:21
*.37.136.147

답변 감사합니다.

말씀을 참고해서 테스트를 해봤는데,


-mcpu=cortex-a8 옵션을 빼면 컴파일이 잘 됩니다.


이 옵션을 빼고 빌드를 진행해도 괜찮을까요?


고도리

2012.08.30 03:45:32
*.200.239.210

큰 문제는 없을 겁니다만....


해당칩이 진짜 cortex-A8인지는 확인해봐야할 듯 합니다.

CP15관련 명령이라 저런 경우 문제가 생기면 대부분 실제 칩이 틀린 경우거든요...



쿨한넘

2012.08.30 21:24:05
*.37.136.147

감사합니다. 일단 CP15 를 잘 몰라서 (ㅜㅜ) 코드를 살펴보고 테스트를 해보겠습니다.

다시한번 감사드립니다.

고도리

2012.08.30 22:49:39
*.200.239.210

mrs 등의 명령은 co-processor 15번에 access할 때 주로 사용하는 명령어로 기억이 납니다. 해서 답글을 그렇게 단 것입니다.


보통 cp15 명령어가 안 먹는 경우는 진짜 cpu가 틀린 경우가 많거든요.

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
5548 Alsa 환경 구성중 alsa-util compile 시 에러발생에 대한 질문(조언요... [2] 로이1024 2012-03-16 1624
5547 origen 4412 board 의 android building error에 대한 조언요청 [2] 김경식 2013-09-28 1623
5546 S5PV310 카메라 모듈 [1] 정용석 2011-12-07 1621
5545 리눅스 선점형, 비선점형 차이... --;; [3] 이경준 2009-06-19 1620
» gcc 어셈블리 컴파일 에러 [5] 쿨한넘 2012-08-29 1620
5543 spec2006을 arm용으로 컴파일하고 있습니다. [4] 김영준 2013-12-11 1620
5542 sd_fusing tool [1] frog 2012-07-22 1619
5541 임베디드 보드에 udev가 동작하고 있는지 어떻게 확인할 수 있나요? [2] ice179 2014-03-19 1617
5540 sound 관련 문의 드립니다. [6] 리오살다 2013-04-12 1616
5539 overlay(HWComposer) 에 대해서... [2] 안심돈까스 2012-10-14 1614
5538 보드에 있는 카메라 모듈을 제어할려고 하는데요 [2] pedor 2013-09-04 1614
5537 sd 카드 체크 어떻게 하나요? ㅠㅠ [2] 딴따라 2013-01-09 1613
5536 임베디드 리눅스에 방화벽 구축 질문 라파엘르 2013-12-24 1613
5535 바이너리파일을 아스키파일로 변환하는걸 도와주세요 ... [8] 장석원 2006-09-09 1611
5534 V310 부팅시 커널 패닉 [1] 훌러덩 2011-08-22 1611
5533 MMC 관련문의 [2] 동이다 2013-06-22 1611
5532 ORIGEN 4412 보드 부팅 관련 건 file [5] 램퍼 2012-09-20 1610
5531 OPENGL-ES 를 사용해서 렌더링이 어떻게 처리되는지 궁금해서요 ?... 장석원 2010-03-26 1609
5530 scp 명령어 사용에 대한 질문하나 할게요! [1] 짜라빠빠 2013-04-10 1609
5529 센서 관련 질문 드립니다. [3] 강유 2013-10-03 1609

사용자 로그인