STLB 란

내가 자발적으로 처음으로 시작한 프로젝트이다. 'ST LINUX BOX' 의 약자로서, 현재 개발하고 있는 DAC5000 소스를 리눅스에 포팅하는 것을 목표로 시작했다.

프로젝트 설명

가장 먼저, 내가 해야 할일은 기존의 프로그램이 어떤 방식으로 동작하는지, 어떻게 컴파일되는지 이해하는 것이다.
크게 프로젝트의 순서는 다음과 같다.

  1. DAC5000 소스의 프로그램 수정 및 이해
  2. 미정

다른 아키텍처에 포팅하기 위해서는 최대한 현재의 ST 코드를 사용하지 않아야 한다.
그래서 기존의 DAC5000 에서 대부분의 파일들을 삭제한 후에 내가 직접 만든 소스코드를 넣기로 했다.
현재 디렉토리의 구조는 다음과 같다. 참고로 c:\stm\ 경로 아래에 있다.

디렉토리 설명
5517ref 단순히 ST 라이브러리를 만들기 위해 존재하는 디렉토리
DAC5000 부팅 소스 코드를 위해 필요
ST20R1.9.6 컴파일러와 ST 시스템 콜을 위해 필요
STLB 메인 디렉토리

STLB 은 다음의 디렉토리로 구성되어 있다.

디렉토리 설명
config 부팅시 필요한.cfg 파일
include 각 디바이스별 include 파일
lib 5517ref 에서 만든 라이브러리 파일
make gmake 설정 파일
obj 소스 파일을 컴파일하면 생성되는 오브젝트 파일
src 각 모듈별 소스 파일
그외 환경 설정을 위한 .bat 파일

문제점 및 해결

처음 DAC5000 에서 /src 아래의 모든 파일을 지우고, 새롭게 내가 만든 main.c 파일을 작성했다. 물론 이 때, 컴파일을 위해서는 몇가지 선행되어야 할 작업들이 몇개 있다.

  1. setup.bat , st20.bat 파일 수정
  2. makefile 수정

나는 특히 makefile 수정에서 에러가 많았다. 주의해야 할 부분은 컴파일할 파일들을 나열하는 부분에서

ifdef ENABLE_TRACE
  ST20_OBJS += trace.tco
  CFLAGS += -DENABLE_TRACE
endif

이 부분은 남겨둬야 한다는 것이다. 아직 정확한 원인을 모르겠지만, 지우면 .lku 파일을 만들지 못했다.

hello world 프로그램

내가 가장 먼저 했던 것은 바로 hello world 프로그램이었다. 예상대로 도스 프롬프트에 hello world 가 찍혔다.
타겟보드를 초기화하는 아무런 루틴도 넣지 않고, 단지 hello world 를 넣었는데도 말이다. 아마도 JTAG 이 실제 프로그램이 올라가기 전까지의 루틴을 자동으로 수행해주기 때문인 것 같다.

그러고 보면, 일반적으로 부팅을 수행하는 루틴 자체는 두 번 수행하는 것 같다.

  1. JTAG 으로 기본적인 하드웨어 세팅과 SDRAM 을 체크한다.
  2. DAC5000 의 main() 에서 부팅 루틴을 수행한다.

물론 위 두가지 일이 거의 같다고 보진 않는다. 하지만, JTAG 이 프로그램이 타겟보드에 올라가서 실행할 수 있는 최소한의 단계까지는 만들어준다는 것만큼은 확실하게 알 수 있다.

하지만, 후에 내가 main.c 에 좀더 복잡한 것들을 구현하려 할 때, 컴파일 과정에서 에러를 냈다. 에러의 내용은 부팅할 때의 부팅 파티션을 제대로 지정해주지 않았다는 것이었다. 앞의 내용을 단적으로 보여주는 예다.

  • computer/digitalarena/stlb.txt
  • Last modified: 3 years ago
  • by likewind