카테고리 없음2012. 12. 29. 22:47

gcc를 arm 개발 툴로 결정하고 나서, 이에 알맞은 환경을 찾아보았다.


먼저 에뮬레이터. 선택의 여지가 별로 없다. Segger의 J-Link Edu 다. 가격이 저렴하고 지원이 좋다. 많이 저렴한 openOCD 기반의 FT2232 Jtag 에뮬레이터를 사용해도 되겠지만, 이게 좀 느리고 귀찮은 점이 있다. Olimex의 ARM-USB-OCD-H 가 얼마나 빠른지는 모르겠지만, 이 가격이면 차라리 J-Link Edu가 좋다.


http://www.segger.com/index.html

https://www.olimex.com/


그리고 IDE. 일단 Rowley의 CrossWorks for ARM 이 있다. 상업용으로 사용하지 않는 사람은 저렴하게 이용할 수 있고, personal 라이센스 이기 때문에, 사용하는 컴퓨터 마다 설치할 수 있다. 윈도우, 맥, 그리고 리눅스에서 이용할 수 있어 편리하다. J-Link 뿐만 아니라, ST Link V2도 지원하고 openOCD FT2232 기반 에뮬레이터도 지원한다. gcc 암 컴파일러와 암 시뮬레이터도 포함되어 있다! 역시 상용.

Eclipse + CDT 환경도 좋다. 좀 느리지만, 오픈소스의 힘은 대단해서 여기저기 지원찾기가 수월하다. 단 시뮬레이터는 어떻게 사용해야하는지 모르겠다. 어디 있긴 한가? 암 컴파일러도 따로 설치해야 한다.


http://www.rowley.co.uk/

http://eclipse.org/


그리고 암 컴파일러. 정확히는 크로스 컴파일러라고 해야하나. 우분투에서는 소프트웨어 센터에서 찾아 설치하면 되지만, 윈도우즈나 맥은 좀 곤란하다. 윈도우용은 코드소서리 툴을 사용하고, 맥은 yagarto 를 사용하기로 한다. 또한 'GNU Tools for ARM Embedded Processors' 라는 사이트도 제공한다. 문제는 어떤 프로젝트는 어느 툴로 빌드가 되는데, 다른 툴로 빌드가 실패하곤 한다. 지식이 짧은 나로서는 알다가도 모를 일이다. 오픈 소스이 단점이 아닌가 싶기도 한데...

윈도우즈의 경우, yagarto 컴파일러를 사용하지 않는다 하더라고, yagarto tool를 설치하고 패스를 잡아주면, make를 사용할 수 있어 편리하다.

소서리 코드벤치 라이트 버젼을 설치하면, 컴파일러 뿐 아니라 pdf 도큐멘트도 설치된다. 좋다.


http://www.yagarto.de/

http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

https://launchpad.net/gcc-arm-embedded



1. ARM 컴파일러 설치

윈도우즈에선 소서리 코드벤치의 컴파일러를, 맥에서는 yagarto 를 설치했다. 윈도우즈의 경우 yagaro tool도 설치를 했다. 'GNU Tools for ARM Embedded Processors' 는 소스와 빌드 방법 문서도 제공되니 나중에 한번 해보는 것도 괜찮겠다. 코드벤치도 소스를 제공하니 할 수만 있다면, 맥에서 빌드하여 사용하면 좋겠다.


2. Segger J-Link Software 설치

홈페이지에서 J-Link의 시리얼을 입력하면 다운로드 받을 수 있다. 설치하고 아래와 같이 GDB Server를 실행했다. 실행하면서 J-Link의 펌웨어 업데이트를 기특하게 스스로 했다.



LN44B0X의 삼성 s3c44b0x 에 연결했다.



3. Eclipse 설치

현재 juno 버젼이고 64비트 버젼을 설치했다. 정확히는 다운로드 페이지에서 'Eclipse IDE for C/C++ Developers'를 다운로드하여 설치하였다.



'Help -> Install New Software...' 를 선택하고, 팝업창에서 적절한 사이트를 선택하고, GDB hardware로 검색해서 설치한다.


===================== update =======================

다른 방법. (http://www.yagarto.org , 지금은 http://www.emb4fun.de/archive/eclipse/index.html 에 있다)

그냥 스탠다드 버젼을 받아 설치한다.

설치하고 Help -> Install New Software... 를 선택한다.


그리고 표시된 Add... 를 선택.

이어지는 화면에서 아래와 같이 설정.



위의 Location은 eclipse 사이트의 project, CDT에서 발견할 수 있다.


지금 eclipse 버젼은 Kepler (4.3) 이란다.


진행하면 아래와 같이 화면이 나오고, 표시된 것 처럼 네가지 패키지를 선택하여 설치한다.

  • C/C++ Development Tools
  • C/C++ GCC Cross Compiler Support
  • C/C++ GDB Hardware Debugging
  • C99 LR Parser


==================================================


4. 테스트

이 이후는 yagarto 사이트의 매뉴얼을 참조로 내 상황에 맞게 정리한다.


'Building Bare-Metal ARM Systems with GNU'라는 글에서 사용된 'Blinky'를 사용하여 테스트 한다. 'c_blinky1.zip'을 다운로드하여 적당한 곳에 압축을 푼다. 이 예제는 Atmel사의 AT91SAM7S-EK보드의 ATSAM7S256 프로세서를 타겟으로 작성되었지만, 테스트를 위해 메모리 맵을 S3C44b0x용으로 바꾸어 사용해본다.

eclipse에서 'File -> New -> C Project' 를 선택한다.



프로젝트 명은 'Blinky'로 하였고, project type은 사진과 같이 Makefile project -> Empty project를 선택하고 Toolchains는 Other Toolchain을 선택한다.

새로운 프로젝트가 생성되면, 'Project -> Build Automatically'를 체트 해제 한다.

'File -> Import'를 선택하고 팝업이 나오면, General -> File System 을 선택한다.



다음으로, 아까 다운로드하여 압축을 풀어놓은 c_blinky 디렉토리를 선택하고, 아래와 같이 파일들을 선택한다.



blinky.ld 파일을 열고, MEMORY섹션의 메모리 설정을 S3C44B0X에 맞춰 아래와 같이 바꾼다.



Makefile을 열고 암 컴파일러 경로와 기타(환경에 맞게 경로의 \ 를 / 로 변경) 여러가지를 바꾼다.



'Project -> Properties' 선택하고 아래와 같이 C/C++ Build -> Setting 에서 GNU Elf Parser를 선택한다.



빌드를 해보면 이래저래 에러가 많다. 일단 Blinky 프로젝트에 dbg 라는 폴더를 추가한다. '-nostartfiles' 옵션을 Makefile의 LINKFLAGS 옵션에 추가한다. start.s 코드중에 __libc_init_array 루틴 콜 부분을 삭제한다. 여기까지 하면 빌드는 된다. Makefile 의 RM = erase를 rm으로 고치고, clean 부분을 적당하게 고친다.

빌드를 마쳤으면 이제 J-Link와 타겟을 이용한 디버깅을 시작한다.

아래 그림과 같이 Debug Configurations를 선택한다.




GDB Hardware Dubgging에 새로운 세션을 하나 추가하고, 아래 그림과 같이 옵션을 맞춘다.





Startup탭의 Initialization Commands에는 아래와 같이 입력한다.


#
# This config file was tested with J-Link GDB Server v4.10i
#

# connect to the J-Link gdb server
target remote localhost:2331

# Set gdb server to little endian
monitor endian little

# Set JTAG speed to 30 kHz
monitor speed 30

# Reset the target
monitor reset 1
monitor sleep 100

# Setup target, remap
# monitor writeu16 0xA0000050 = 0x01c2
# monitor writeu16 0xA0000050

# Set JTAG speed in 8000 khz
monitor speed 8000

#load
#break main
#continue




Debug를 클릭한다. 아래와 비슷하게 나오면 일단 된거다. step 으로 실행을 해가면서 상태를 본다. 레지스터를 살펴 제대로 타겟에 연결이 되었는지 확인한다.



----------------------------------------------------------------------------------------------------------

윈도우즈보다 화면반응이 느리다. USB의 입출력이 느려서 그럴지도 모르겠다. USB-to-Serial 하드웨어를 이용해 시리얼 포트 터미널을 실행한 경우도 무척 느렸던 기억이 있다.

컴파일러 버젼마다 디폴트 옵션이 달라지는 것 같다. 4.6.x 버젼의 경우 -nostartfiles 옵션을 주지 않아도, __libc_init_array 루틴을 콜해도 별 문제가 없었다. 그런데 코드벤치의 경우 4.7.x 라도 컴파일이 그냥 된다. 옵션을 제대로 파악해서 버젼에 상관없이 빌드가 되게끔 하는게...

Posted by 쿨한넘