Realview Debugger 를 일단락 짓기 위해 만들어졌다. 그동안의 몇가지 실험을 통해 얻은 결론을 이 문서를 통해 정리해보고자 한다.
차후에 또다시 Realview Debugger 를 사용하게 된다면, 이 문서를 참고하면 좋을 것이다. 관련 문서들과 내용이 중복될 수 있으니, 이점 유의하기 바란다.
REAL VIEW 는
ARM 사에 나온 디버거 툴이다. 현재는 크게 Muti-ICE 와 Realview-ICE 로 나뉘어져 있는데, Muti-ICE 의 경우, ARM 을 비롯한 다른 아키텍처(X-SCALE)에서도 사용이 가능한 반면, Realview-ICE 는 ARM 아키텍처에서만 사용이 가능하다.
또한 S/W 와 H/W 패키지로 나누어져 있으며, 다음과 같다.
S/W | Realview Debugger, ADX Debugger, CodeWarrior |
H/W | Realview-ICE, Realview-ICE 펌웨어 프로그램 |
사용 목적
VPOS 라고 하는 연구실에 자체적으로 만든 RTOS 를 Realview-ICE 와 Realview Debugger 를 이용해서, 디버깅을 하는 것이었다.
여기서 유의할 것은 VPOS 의 경우, gcc 2.95 로 컴파일한 elf 포맷의 오브젝트 파일의 형태로 존재한다.
결국, 이 파일을 Realview Debugger 에서 사용가능하게 만들면 되는 것이다.
몇가지 실험
앞에서 언급한 목적을 달성하기 위해 몇가지 실험을 시도했었다.
그게 두가지로 나눌 수 있겠다.
- 리눅스 상의 크로스 컴파일러에서 컴파일 했을 경우
- 윈도우 상의 크로스 컴파일러에서 컴파일 했을 경우
리눅스 상의 크로스 컴파일러에서 컴파일 했을 경우
현재 리눅스 기반의 rtong 서버에서 arm-linux-gcc 를 이용해서 컴파일을 했다. 컴파일 결과, elf 포맷의 오브젝트 파일이 생성되었다.
참고로 여기서 사용한 arm-linux-gcc 는 리눅스 상에서 직접 소스를 빌드해서 만든 것이다.
윈도우 상의 크로스 컴파일러에서 컴파일 했을 경우
Cygwin 에서 GNU ARM 이라는 툴 체인을 사용해서 컴파일을 했다. http://gnuarm.com/ 에서 받을 수 있다. GNU ARM 의 경우, 현재 GCC 버전이 최소 3.3 이상이기 때문에 VPOS 컴파일시 에러가 발생했다. 그래서 여기서는 간단하게 HELLO 프로그램을 이용해서 컴파일 했다. 참고로 Cygwin 과 GNU ARM 의 설치 방법은 http://www.techiz.com/spboard/board.cgi?id=nut 를 참고하기 바란다.
#arm-elf-gcc hello.c ----- 1 #gcc -gdwarf-2 hello.c ----- 2
위와 같이 두가지 방법으로 오브젝트 파일을 만들어 냈다.
실험 결과
먼저 결론 부터 얘기하자면, 두 가지 실험 모두에서 실패했다. 리눅스에서의 컴파일과 윈도우에서의 컴파일 방법 1 의 경우에는 Realview Debugger 자체에서 읽어들이지 못했다.
윈도우에서의 컴파일 방법 2 의 경우에는 Realview Debugger 에서 읽어들이는 데는 성공했다. 하지만, HELLO 프로그램에서 printf() 함수에서 'STEP' 명령을 실행했을 때, 해당 함수의 라이브러리를 찾지 못했다.
Realview Debugger 를 이용해서 디버깅을 하기 위해서는 특정한 포맷의 오브젝트 파일이 필요하다.(.axj, .elf, .out, .dex)
물론, Realview 에서 제공하는 크로스 컴파일러을 이용해서 컴파일을 하면, 위에서 언급한 오브젝트 파일이 만들어져서, 디버깅이 가능하다.
하지만, 문제는 Realview 에서 제공한 컴파일러를 사용하지 않은 다른 컴파일러(gcc 등)를 이용해서 만든 오브젝트 파일은 Realview Debugger 에서 사용이 불가능하다.
사용하기 위해서는 Realview Debugger 에서 해당 컴파일러의 라이브러리를 제공해야 하는 것이다.
예를 들어, 리눅스 상에서 task 를 실행하는 프로그램을 컴파일했다고 하면, 컴파일시에는 리눅스에서 해당 라이브러리가 링크되어 있기 때문에 아무런 문제없이 컴파일이 된다. 실행역시 같은 이유로 문제없이 동작한다.
하지만, 오브젝트 파일을 Realview Debugger 로 실행하면, 가장 먼저 발생하는 문제가 리눅스에서 제공했던 해당 라이브러리가 링크되어 있느냐이다.
ARM 한국 공식 대리점인 휴인스에 문의한 결과, 현재 Realview Debugger 에서는 몇몇 상용 RTOS 만을 지원한다고 한다.
이것은 현재 Realview Debugger 의 플러그인 형태로 해당 RTOS 의 라이브러리가 추가된다고 한다.
결론
Realview Debugger 의 모든 기능을 충분히 숙지하지 못했기 때문에, 이런 상태에서 결론을 내린다는 것은 아직 섣부르다고 생각한다. 하지만, Realview Debugger 에만 시간을 투자할 수 없기 때문이다.
이것은 순전히 필자의 생각을 위주로 쓴 것이기 때문에 100% 맞다고 볼 수는 없겠지만, 앞에서 살펴본 몇가지 실험을 통해 알게된 것들을 바탕으로 결론을 내리고자 한다.
앞부분에서 언급했던, 사용 목적만을 봤을 때는 현재 Realview Debugger 로 VPOS 를 디버깅하는 것은 불가능하다. 반드시 Debugger 자체에서 지원이 되어야 한다. 나아가서 쓰레드 기반의 실시간 디버깅을 위해서는 Debugger 뿐만 아니라, H/W Chip 또한 이에 대응되어야 한다.
지금 현재로서는 Realview Debugger 의 사용이 매우 한정적이지만, 사용 조건을 만족한다면, 매우 강력한 디버거라고 생각한다.
언젠가 Realview Debugger 의 기능을 100% 활용할 기회를 기대해 본다.