Table of Contents

Nucleus 를 EDGE 라는 IDE Tool 을 이용해서 디버깅하는 방법에 대해서 설명하고 있다.
현재 연구실에서 구입한 Nucleus 는 RTOS 의 소스 파일을 구입한 것이 아니라 바이너리 파일을 구입한 상태다.
기본적인 Nucleus 소스에서 타겟보드(SMDK2410) 에 맞게 포팅해서 컴파일한 바이너리 파일(file, net, plus)을 제공했다.
디버깅을 하기 위해서는 기본적인 호스트에 여러가지 프로그램을 설치해야 한다.
필요한 것은 크게 다음과 같다.

  1. EDGE MAJIC-LX (JTAG Debugger)
  2. EPI Development Tools
  3. EDGE Developer Suite
  4. License USB Ethernet,license.dat
  5. Target Board (SMDK2410)
  6. Nucleus 바이너리 파일

설치 순서는 2 → 1 → 3 → 4 → 5 → 6 이다.

About Nucleus

원래는 RTOS 를 직접 개발하던, accelerated technology 에서 최근들어 RTOS 을 포함한, 개발툴을 개발하기 시작했다.
GNU 컴파일러환경을 무상으로 지원해준다. 하지만, ARM 계열은 지원대상에 포함되지 않는다. 시뮬레이션을 할 수 있는 simtest 와 각 시점마다 상황을 체크할 수 있는 profiler 는 따로 구입해야 한다. 현재로서는 사용할 수 없다는 얘기다.
flash 에 write 하기 위해 binary 파일을 만드는 방법은 fromelf 명령어를 이용해서 변환해야 한다.
또한 UML 을 사용한 모델링 개발과 UI 미들웨어를 새롭게 개발했다.

환경 설정

먼저 EPI Development Tools 을 설치한다. 여기서 JTAG Debugger 와 호스트는 크로스 케이블로 연결한다.
majic_install.pdf 을 참조해야 한다.
설치도중에 라이센스 키를 입력하라고 나온다. 여기서는 'hunVYeP@ML@HskUGVpv9Yj##X' 를 입력한다. EPI Development Tools 설치가 끝나고 JTAG Debugger 를 설정하는 창이 뜬다.
여기서 호스트와 JTAG Debugger 를 크로스 케이블로 연결하고 전원을 켠다. 나의 경우, JTAG Debugger 와 연결하는 Ethernet 인터페이스는 '192.168.0.1' 로 설정하고 JTAG Debugger 는 '192.168.0.2' 로 설정한다. 설정 후에 도스창을 열어서

>ping 192.168.0.2

로 테스트해서 제대로 응답이 오면 성공이다.
설치가 끝나면, '시작 → 프로그램 → EPI Tools - EDTA 2.3b → MAJIC Setup Wizard' 를 선택한다. 이후 부터는 첨부된 pdf 파일의 '환경 설정' 부분을 참고하기 바란다.

이번에는 EDGE Developer Suite 을 설치할 차례다. 총 2 장의 CD 로 구성되어 있고 별 무리없이 설치할 수 있다.
EDGE Developer Suite 을 제대로 사용하기 위해서는 라이센스 파일이 필요하다. 파일은 license.dat 에 있다.
license.dat 을 'C:\mgc\embedded\license' 아래에 복사한다.
License USB Ethernet 을 USB 포트에 꼽는다. 이때 드라이버 파일이 필요하다.
net8150usb.cab 에서 다운로드 한다. 압축을 풀어서 설치하면 된다.
이제 설치한 EDGE 를 실행하고, 'Help → License Information' 을 선택한다.

Feature Status
EDGE Debugger : ARM 386 days
EDGE Debugger : Windows 386 days

위와 비슷하게 나오면 된다. 이제 Target Board 를 JTAG Debugger 과 연결하고 본격적인 디버깅을 해보자!

디버깅

연구실에서 Nucleus 를 구입할 때, 컴파일러에 대한 라이센스는 구입하지 않았기 때문에 RealView 의 ADS 컴파일러를 사용해서 컴파일해야 한다.
EDGE 에서는 환경설정에서 ADS 컴파일러를 링크를 걸어줌으로써 사용 가능하다. 하지만, RealView ADS 컴파일러의 경우, 라이센스 서버가 필요하기 때문에 현재로써는 사용할 수가 없다. 즉, 컴파일을 할 수가 없다. 지금 해볼 수 있는 것은 오브젝트 파일을 보드에 올려보는 정도이다.

Nucleus 바이너리 파일을 C:\source 아래에 복사한다. 디렉토리 전체(S3C2410_PLUS_NET_FILE_SD_RVCT22_ObjectType)로 복사한다.
JTAG Debugger 를 이용해서 타겟 보드에 올리는 방법은 다음과 같다.

  1. EDGE 에서 Export 메뉴를 이용해서 프로젝트 파일을 로드한다.
  2. 'Run → Connect and Load Image → ARM(Samsung, SMDK2410X) → Load Project Output(총 3개의 바이너리파일이 있음)에서 올릴 파일 선택 → MAJIC 선택 → Kernel awareness 에서 Nucleus 선택'
  3. 로딩이 끝나면, Source 파일의 위치를 묻는 창이 뜬다. 여기서 현재 RTOS 의 부팅 소스 파일이 없기 때문에 취소를 누른다.
  4. 처음에 어셈블러 코드가 나오는 데, 여기서 왼쪽의 Navigator 의 소스 파일을 선택해서 특정 라인에 breakpoint 를 잡는다.
  5. 'Step Return' 버튼을 누르면, breakpoint 에서 멈춘다.

이제 본격적인 디버깅을 시작해보자!

컴파일

현재 구입한 Nucleus 바이너리 파일이 Realview 2.2 로 컴파일된 것이라서, 여기서는 Realview 컴파일러를 이용한 컴파일 방법에 대해서 설명하겠다.
사족을 달자면 Realview 의 경우, 실행시에 라이센스 서버에 접속하여 라이센스를 받아와야 실행이 된다. 하지만, 이것이 MAC 인증 방식이라 IP 대역이 다른 곳에서는 인증이 불가능하다. 현재 라이센스 서버가 820 호에 있는 관계로 컴파일을 하려면 부득이 하게 직접 와야 한다.

환경 구축

앞에서 프로그램 설치는 이미 마쳤다고 가정하고 설명하겠다.
먼저 컴파일할 파일이 필요하다. Nucleus CD 의 통채로 C:\source 라는 디렉토리에 복사한다. 솔직히 우리가 필요한 파일은 demo 디렉토리이다. 하지만 편의상 몽땅 복사하도록 한다.
Nucleus 에서 제공하는 IDE 툴인 EDGE 를 사용할 것이기 때문에 컴파일 환경에 대해서 설정이 필요하다. 참고로 여기서 설명하는 EDGE 의 버전은 1.3.1 이다.

  1. 먼저 EDGE 를 실행한다.
  2. 'Window → Preference → EDGE' 를 선택한다. 여기서 우리가 설정할 부분은 Bulider 이다.
  3. Builder 에서 Available Tools 에서 사용할 아키텍처와 컴파일러를 설정한다. 여기서는 'ARM → RealView Compilation Tools' 을 선택한다.
  4. Version 2.1, 2.2.1, 3.0 이 지원되는 데, 여기서는 2.2.1 을 선택한다. 복수 선택을 해도 상관없다.
  5. 'Builder → Tools Configuration' 을 선택한다. 여기서는 앞에서 설정한 컴파일러에 대한 환경변수를 설정하도록 한다.
  6. 'RealView Compilation Tools 2.2.1' 을 선택하고 'Runtime Script RealView Compilation Tools 2.2.1' 의 변수를 아래와 같이 수정한다.
변수명
TOOLS HOME C:\Program Files\ARM
ARMROOT %TOOLS_HOME%
RVCT22INC %ARMROOT%\RVCT\Data\2.2\349\include\windows
RVCT22LIB %ARMROOT%\RVCT\Data\2.2\349\lib
PATH %ARMROOT%\RVCT\Programs\2.2\349\win_32-pentium;%PATH%

위와 같이 설정했다면, 'Apply → OK' 버튼을 누른다. 앞에서 EDGE Tool 에 대한 설정을 했기 때문에 이번에는 컴파일할 프로젝트에 대해서 설정을 해주어야 한다.

EDGE 를 실행하고, 프로젝트를 만들기 위해서는 'Open Perspctive' 버튼을 누르고, 'EDGE Projects (default)' 을 선택한다. Navigator 창에서 마우스 오른쪽 버튼을 눌러서, Import 를 선택하고, 'Existing Projects into Workspace' 를 선택한다. 'Select root directory' 에 컴파일하려고 하는 파일의 경로를 선택한다. 여기에서는 'C:\source\S3C2410_PLUS_NET_FILE_SD_RVCT22_ObjectType' 를 선택한다.
Next 를 선택하면, 'file_demo, net_demo, plus_demo' 가 나타난다.
이 후에 'One or more projects in the workspace are using an older version of a toolset. Would you like to upgrade these projects to the latest available toolset?' 이라는 대화상자가 나타난다. 여기서는 반드시 'No' 를 선택한다. 이제 Navigator 에 총 3개의 프로젝트가 생성되었다.

각각의 프로젝트를 컴파일하기 전에 컴파일 환경을 설정하기 위해, 각 프로젝트를 선택하고 마우스 오른쪽 버튼을 누르고 'Properties' 를 선택한다. 여기서 'Build Configurations' 을 선택한다. 여기서 Edit 를 선택해서 'RealView Compilation Tools 2.2.1' 을 선택한다.

시스템 변수에 다음을 추가해야 한다.

변수명
LM_LICENSE_FILE C:\mgc\embedded\license\license.dat;8224@RTCC_LICENSE_SE

이제 컴파일하기 위한 모든 준비가 끝났다. 'Project → Clean' 을 선택하고, 'Project → Build Project' 를 선택해서 컴파일한다.
제대로 컴파일이 된다면, 성공이다.

ADS 1.2 의 경우

RealView 2.2.1 의 경우, 라이센스 인증을 받아야 하는 번거로움 때문에, ADS 1.2 로 컴파일된 nucleus 바이너리 파일을 받았다.
기존의 RealView 2.2.1 에서 ADS 1.2 기반으로 옵션을 변경해주어야 한다. 이에 대한 방법은 위에서 설명한 것과 다르지 않으니, 참고해서 변경해주면 된다.

팁 들

부팅가능한 바이너리 파일을 생성하기 위해서는 'Properties → Libraries' 를 선택해서 'plus, plus_specific, serial' 을 추가해야 한다.
base_address 를 지정하기 위해서는 컴파일 시에 옵션을 통해 지정할 수 있다.

컴파일 시에 기존의 라이브러리가 삭제되고, 도중에 에러가 발생하는 경우

이 경우에는 ATKorea 에서 준 바이너리 및 소스파일들의 문제이다. 그쪽에서는 전체 소스코드를 가지고 빌드를 하기 때문에, 컴파일 설정 역시 전체 소스코드를 참조하도록 되어있다.
ATKorea 측에서 자신들의 컴파일 설정이 담긴 바이너리 파일을 그대로 나에게 넘겨준다면, 위와 같은 문제가 발생한다. 컴파일 시, 전체 소스코드가 없기 때문이다.
이럴때는 문제를 즉각 ATKorea 측에 알려야 한다. 만일 바로 조치가 취해지지 않을 경우에는 지금 부터 설명할 부분을 참고해서 내가 직접 작업을 해줘야 한다. -_-;

먼저 내가 필요한 프로젝트는 net_demo, file_demo, plus_demo 이다. 이것들을 컴파일할 때, 참조하는 라이브러리를 다시 설정해주고 의존성을 가지는 프로젝트들을 선택해제 시켜주면 된다.

  1. file_demo 프로젝트를 선택하고, 'Properties' 를 선택한다.
  2. 'Project References' 를 선택하고, 오른쪽에 체크된 것들을 모두 지운다.
  3. 'Libraries' 를 선택하면, 오른쪽에 비활성화된 라이브러리들이 있을 것이다. 라이브러리들의 항목을 잘 기억하기 바란다. 이제 곧 이 라이브러리들을 다시 추가해주어야 하기 때문이다.
  4. 'Include output of referenced projects during link' 를 선택 해제시키면, 모두 지워질 것이다.
  5. 'Add' 를 눌러서, 직접 라이브러리를 추가해준다. 이 때 주의할 것은 소스코드가 들어 있는 경로의 lib 디렉토리 아래에 있는 라이브러리 파일을 추가시켜야 한다는 것이다.
  6. 모두 추가시켰다면, 'OK' 를 선택하고 빠져나온다.
  7. 이와 같은 방법으로 net_demo, plus_demo 도 해주면 된다. 이제 직접 컴파일 해보자!!

Flash 를 올리는 방법

추가할 것들

  1. Flash 를 올리는 방법