"소프트웨어 개발자의 하드웨어 개발기"의 첫 글을 씁니다. 하드웨어 개발에 대한 지식도 무식이 전부이고, 관련해 받은 교육이라고는 고등학교 물리시간에 배운 것이 전부인지라, 모든게 까마득합니다만, 어설프게나마 기록으로 남겨보려 합니다. 누군가에게는 도움이 될지도 모르죠...

임베디드 시스템을 위한 MPU보드라는 걸 구할 수 있더군요. 각종 마이크로프로세서와 그에 연결한 메모리와 플래쉬, I/O모듈등을 함께 자그마한 시스템 보드를 묶어서 파는데다, 가격도 저렴하고, 기본적인 시스템이 갖춰져 있어서, 소프트웨어만 얹으면 간단한 임베디드 시스템을 만들 수 있게 말이죠. 학창시절에 관심을 두려할 때는, 다 따로 사서 만들어야하는 줄 알았습니다. 

CPU 벤더도 다양하고 모델도 다양하지만, 일단 ARM쪽을 알아봤습니다. 임베디드 하면 ARM프로세서가 먼저 떠오르더라구요. 많이 쓰이는 이유가 있겠지 싶었습니다. 국내 모 디바이스 쇼핑몰에서 찾아보니, ARM의 마이크로프로세서를 사용한 임베디드 개발보드가 여러개 보였습니다. 그중에는 ARM v7아키넥쳐 기반의 것이 가장 많은 것 같았고, 나름 신형인 ARM Cortex M3 아키텍쳐의 임베디드 개발보드가 눈에 띄었습니다. 

소프트웨어도 그렇지만, 좀 새로운거 쓰려고보면 이런저런 환경이 걸리는 것들이 많아서, 편하게 가려면 "많이 쓰이는" 녀석을 택하는게 최선이죠. 하지만, 뭔가 좀 새로 하려다 보면 아무래도, 신기술(?)에 끌려서, 고생을 사서하곤 합니다. 어차피 목표결과물을 내기 위한 여유시간도 많이 있겠다, 과감히 Cortex M3보드를 선택했습니다. 

그렇게 구매한 MPU보드는, Texas Instruments사가 인수한 루니너리 마이크로사의 LM3S8962를 가져다 만든 위드로봇의 myCortex-LM8962입니다. (텍사스 인스트루먼트는 어디서 들었는지 꽤 낯익은 회사명이었습니다) 이 개발 보드는 PWM제어 모듈도 포함되어 있어서 제가 원하는 목표결과물에 쉽게 접근할 수 있지 않을까 기대해봅니다.  



위의 보드의 은색 육면체가 이더넷 포트입니다. 보드 전체가 자그마하 하죠. 

저 보드에 전원공급이며, 신호선 연결은 어떻게 할지도 막막하지만, 일단 소프트웨어를 어떻게 얹을지가 막막합니다. 좀 찾아보니, 저 보드에 소프트웨어를 설치하는 방법은 여러가지가 있지만, 위드로봇사에서 판매하는 Stellaris-JTAG 보드를 사용해서 개발&설치하는 방법이 잘 나와있었습니다. (JTAG이 뭔지도 처음 들어보는 용어입니다. ㅠ.ㅠ 대충 이해한 바로는, 임베디드 하드웨어의 소프트웨어 설치나 디버깅에 사용되는 표준 인터페이스쯤 되나봅니다.) 우선 하드웨어 디버깅이 된다는 말에, 해당 보드도 같이 구매했습니다.




역시 비슷하게 작은 크기의 보드입니다. 저기의 USB포트를 PC와 연결하고, JTAG인터페이스를 개발보드에 연결하면, PC로부터 소프트웨어를 설치하고, 디버깅도 할 수 있습니다. 매뉴얼에 개발 방법이 잘 나와있습니다만, 한가지 아쉬운 점이 있었습니다. 각종 소프트웨어 드라이버나 개발 방법이 Windows기준으로 되어있다는겁니다. 이거 하겠다고, VM띄워서 개발하기도 깝깝하고, 그냥 맥에서 개발하는 방법이 없을까 찾아봤습니다. 이래저래 해보니, 다행히 Mac OS X에서도 개발이 가능하더군요. 

1. 하드웨어 연결

위의 두 하드웨어를 연결해서 MacBook Pro에 연결하면 다음과 같이 USB하드웨어가 잡힙니다. 


별다른 추가작업 없이 "Stellaris Evaluation Board"라고 잡혀줍니다. 고맙기 그지 없습니다. 

2. 컴파일러

OS X에서 사용할 수 있는 무료 ARM 크로스 컴파일러는 GNUARM과, yagarto가 있습니다. 이 중, Cortex M3를 지원하는 컴파일러는 yagarto뿐입니다. 바이너리를 받아서 /usr/local/yagarto에 설치했습니다.

3. OCD (On-Chip Debugger) 

JTAG인터페이스를 통해서 디버깅을 할때 쓰는 디버거입니다. 역시 무료버전으로 OpenOCD라는 소프트웨어가 있습니다. 이 소프트웨어는 OS X버전이 따로 있어서 별 문제없이 설치 가능합니다. 이 프로그램이 GDB와 연동해서 하드웨어에 소프트웨어를 얹을 수 있고, 얹은 소프트웨어를 디버깅할 수 있게도 해줍니다. openocd-ftd2xx로 USB에 잡힌 Stellaris Evaluation Board와 연결해서 작업할 수 있습니다. 따로 드라이버를 깔면 Virtual COM Port도 잡을 수 있을 것 같은데, 해당 드라이버가 아직 OS X Leopard까지만 지원하는 것 같습니다. (Snow Leopard 개발판을 먼저 쓰고 있는게 이럴때도 걸림돌이 되어주는군요) 일단 저는 Virtual COM Port가 필요없는 상황입니다.

OpenOCD가 최신버전이 0.2.0인데, 명령어가 조금 달라서, 매뉴얼을 보고 좀 손봐야할 부분이 있습니다. OpenOCD가 설치된 디렉토리를 뒤져보면  lm3s8962.cfg도 구할 수 있고, 인터페이스 설정파일도 찾아서 그대로 쓸 수 있습니다.


4. 통합개발환경 (IDE)

상용제품으로 CrossWorks for ARM이라는 아주 훌륭해보이는 제품이 있었습니다만, 개인버전이 $150입니다. 시험판을 써보고, 실제로 구매할까도 생각했습니다만, 시험판 라이센스를 구하는데 실패했습니다. 라이센스 담당자가 두번째 보낸 메일을 무시하더군요. 제가 앞으로 임베디드 소프트웨어 개발을 전문적으로 할 것도 아니고, 그냥 무료판 구해다 하는데 결정적 도움을 주었습니다.

결국 오래전에 떠났던 이클립스 (Eclipse)판으로 돌아왔습니다. 오래전 자바 개발할 때 쓰던 환경인데, 이렇게 임베디드용 C개발을 위해 돌아도다니, 참 모를 일입니다. 어쨌건 새로 설치해보니 Cocoa인터페이스로 재무장한 이클립스, 아주 더 멋져진 모습입니다.

Eclipse CDT환경을 설치하고, Zylin사의 Embedded CDT 플러그인을 추가로 설치합니다. 이 플러그인이 OpenOCD와 GDB프로토콜로 통신해서 이클립스 환경에서 디버깅을 할 수 있습니다. 



5. 연동 성공!

이런 구성으로 연결해서 간단한 예제를 컴파일하고, 얹어보고, 디버깅하는데 성공했습니다. 다른 구성 방법도 많이 있겠지만, 일단 OS X에서 개발 가능하다는데에 크게 만족스럽습니다.

이렇게 설정은 그럭저럭 해결한 거 같습니다. 이제 그럼, 얹을 소프트웨어를 개발해 봐야겠습니다. 



Posted by hatemogi 트랙백 0 : 댓글 14

티스토리 툴바