====== REAL VIEW ICE 를 이용한 디버깅 ======
REAL VIEW ICE 를 이용해서 SMDK2410 보드에서의 디버깅하는 과정을 설명한다.
REAL VIEW ICE 는 크게 두가지 모드의 디버깅을 지원한다.
- Simulator Mode
- Board Mode
Simulator Mode 는 말 그대로 가상으로 디버깅 해 볼 수 있다. 하지만, 가상이기 때문에 여러가지 제약이 따른다.
제약사항
- 하드웨어 쪽 엑세스가 불가능하다.
- 단지 가상 메모리에 올라가있는 주소 어드레스의 값만 수정할 수 있다.
Board Mode 는 직접 REAL VIEW ICE 를 통해서 타겟보드에 접속해서 디버깅 할 수 있는 모드다. 앞서 설명한 Simulator Mode 와 다른점이라면, 접근할 수 있는 영역이 더 넓어졌다고 할 수 있다.
제약사항
- 타겟보드의 Chip 에 따라 지원이 안될 수 있다. (ex : PXA255)
- 타겟보드의 부트 코드가 필요하다(부트로더가 아니다 최소한의 CPU 와 RAM 을 초기화 시킬 명령들이 필요하다).
====== Board Mode ======
앞에서는 이론적인 사항들만 나열했다면, 여기서는 이론을 바탕으로한 실제 실습을 해볼 것이다.
RVDS 를 설치하면, 몇가지 관련 프로그램들이 설치되는데, 그중에서 프로그램 작성은 코드 워리어 에서 하고 디버깅은 Real View ICE 에서 할 것이다.
- 프로젝트를 만들고, 간단한 소스파일을 만든다. 'Debug Settings' 라는 항목을 보면, 'RO Base' 라는 항목이 있다. 여기서 '0x30000000' 를 입력한다.
- 컴파일 후에 'F5' 누른다. 그러면, 자동으로 Real View ICE 가 실행된다.
- Connection 창이 뜨면, RealView-ICE -> ARM920T 의 네모박스를 체크하지 않고, 마우스 왼쪽 버튼으로 선택만 한 다음, 마우스 오른쪽 버튼으로 Properties 를 선택한다.
- Properties 창에서 CONNECTION=RealView-ICE -> Advanced_Information -> Default -> ARM_config -> Top memory 에 '0x34000000' 값을 적는다.
- 그리고 나서 File 탭의 Save and Close 를 선택한다.
- 다시 Connection 창에서 RealView-ICE -> ARM920T 의 네모박스를 체크해서 보드에 접속한다.
- 보드 부팅 초기화 명령을 내려야 하는데, 내용은 아래와 같다.
setreg @cpsr=0xd3
// "Disable the Watch Dog Timer"
setmem /32 0x53000000=0x00000000
// "PLL Setup"
setmem /32 0x4C000004=((0x70<<12)+(0x4<<4)+0x2)
setmem /32 0x4C000008=((0x58<<12)+(0x4<<4)+0x2)
// "Memory Controller Setup"
setmem /32 0x48000000=0x22000000
setmem /32 0x48000004=((0<<13)+(0<<11)+(7<<8)+(0<<6)+(0<<4)+(0<<2)+0)
setmem /32 0x48000008=((0<<13)+(0<<11)+(7<<8)+(0<<6)+(0<<4)+(0<<2)+0)
setmem /32 0x4800000c=((0<<13)+(0<<11)+(7<<8)+(0<<6)+(0<<4)+(0<<2)+0)
setmem /32 0x48000010=((0<<13)+(0<<11)+(7<<8)+(0<<6)+(0<<4)+(0<<2)+0)
setmem /32 0x48000014=((0<<13)+(0<<11)+(7<<8)+(0<<6)+(0<<4)+(0<<2)+0)
setmem /32 0x48000018=((0<<13)+(0<<11)+(7<<8)+(0<<6)+(0<<4)+(0<<2)+0)
setmem /32 0x4800001c=((3<<15)+(0<<2)+1)
setmem /32 0x48000020=((3<<15)+(0<<2)+1)
setmem /32 0x48000024=((1<<23)+(0<<22)+(0<<20)+(1<<18)+(2<<16)+1113)
setmem /32 0x48000028=0x00000031
setmem /32 0x4800002c=0x00000020
다음의 명령어로 읽어들인다.
stop> include c:\a.inc # 참고로 a.inc 파일은 C:\ 에 있다고 가정한다