REAL VIEW ICE 를 이용해서 SMDK2410 보드에서의 디버깅하는 과정을 설명한다.
REAL VIEW ICE 는 크게 두가지 모드의 디버깅을 지원한다.

  1. Simulator Mode
  2. Board Mode

Simulator Mode 는 말 그대로 가상으로 디버깅 해 볼 수 있다. 하지만, 가상이기 때문에 여러가지 제약이 따른다.

제약사항

  1. 하드웨어 쪽 엑세스가 불가능하다.
  2. 단지 가상 메모리에 올라가있는 주소 어드레스의 값만 수정할 수 있다.

Board Mode 는 직접 REAL VIEW ICE 를 통해서 타겟보드에 접속해서 디버깅 할 수 있는 모드다. 앞서 설명한 Simulator Mode 와 다른점이라면, 접근할 수 있는 영역이 더 넓어졌다고 할 수 있다.

제약사항

  1. 타겟보드의 Chip 에 따라 지원이 안될 수 있다. (ex : PXA255)
  2. 타겟보드의 부트 코드가 필요하다(부트로더가 아니다 최소한의 CPU 와 RAM 을 초기화 시킬 명령들이 필요하다).

Board Mode

앞에서는 이론적인 사항들만 나열했다면, 여기서는 이론을 바탕으로한 실제 실습을 해볼 것이다.
RVDS 를 설치하면, 몇가지 관련 프로그램들이 설치되는데, 그중에서 프로그램 작성은 코드 워리어 에서 하고 디버깅은 Real View ICE 에서 할 것이다.

  1. 프로젝트를 만들고, 간단한 소스파일을 만든다. 'Debug Settings' 라는 항목을 보면, 'RO Base' 라는 항목이 있다. 여기서 '0x30000000' 를 입력한다.
  2. 컴파일 후에 'F5' 누른다. 그러면, 자동으로 Real View ICE 가 실행된다.
  3. Connection 창이 뜨면, RealView-ICE → ARM920T 의 네모박스를 체크하지 않고, 마우스 왼쪽 버튼으로 선택만 한 다음, 마우스 오른쪽 버튼으로 Properties 를 선택한다.
  4. Properties 창에서 CONNECTION=RealView-ICE → Advanced_Information → Default → ARM_config → Top memory 에 '0x34000000' 값을 적는다.
  5. 그리고 나서 File 탭의 Save and Close 를 선택한다.
  6. 다시 Connection 창에서 RealView-ICE → ARM920T 의 네모박스를 체크해서 보드에 접속한다.
  7. 보드 부팅 초기화 명령을 내려야 하는데, 내용은 아래와 같다.
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:\ 에 있다고 가정한다

  1. axf 파일을 로딩시킨다.

디버깅

이제 본격적으로 디버깅을 하면 된다.

Key Point

여기서는 ARM9 2410 Chip 보드를 기반으로 설명했지만, 다른 Chip 보드를 디버깅해야 한다면 어떻게 해야 할까?
이 때, 고려해야 할 것은 다음과 같다.

  1. 메모리영역과 주소(처음과 끝)
  2. 보드 초기화 명령어(.inc)

메모리영역과 주소의 경우, 앞의 설명에서 각각 오브젝트 이미지의 base address 와 top memory 값이 된다.
보드 초기화 명령어의 경우, axj 파일을 RAM 에 올리기 전에 보드를 초기화해야 하기 때문에 반드시 필요하다.
여기에 대해서 덧붙이자면, ARM9 2410 데이터 시트의 메모리맵을 보면, 64M SDRAM 의 경우, bank6 과 bank7 을 사용한다.

BANK6 0x30000000 ~ 0x33ffffff
BANK7 0x34000000 ~ 0x37ffffff

각 주소 영역은 표와 같다. 그래서 REAL VIEW ICE 의 경우, bank6 에 axj 이미지를 올린다.

  • computer/rtcclab/real_view_ice_를_이용한_디버깅.txt
  • Last modified: 3 years ago
  • by likewind