내가 DAC5000 을 7710 기반의 DACS7000 으로 포팅하면서 알게된 것들을 정리했다.
나중에라도 혹시 이와 비슷한 작업을 하게될 때, 많은 도움이 될 것이라 생각한다.

작업 환경

DAC5000 은 '2005년 7월 16일자 버전'을 기준으로 했다.
7710 관련 소스코드는 '7710HD_v1.0.0 Snap REFERENCE SOFTWARE' 를 사용했다.

전체적인 포팅방향은 같은 이름의 함수나 같은 기능을 하는 루틴의 경우, 7710 코드를 따랐다.

작업 순서

포팅할 디렉토리 DACS7000 이름으로 디렉토리를 만든다. 이제부터가 중요하다. DACS7000 디렉토리안에는 다음과 같이 구성되어야 한다.

이름 근원 설명
config 7710ref 타겟보드 부팅에 필요한 .cfg 파일들
include 7710ref 헤더 파일들
lib 7710ref 라이브러리 파일(stapi_stpti4.lib), 7710ref\src 컴파일하면 생성
make DACS5000 컴파일시 환경 설정
src DACS5000 소스 코드들
makefile DACS5000 컴파일시 옵션 지정

여기서 수정해야 할 것은 경로 수정이다. 수정했다면, 이제 본격적으로 컴파일해보자!! 만일 컴파일을 하기전에 에러가 났다면, 분명 그것은 make 디렉토리 문제이다.
make 디렉토리 문제의 경우, 대부분 경로나 세팅이 기존의(DAC5000) 것이라서 그럴 것이다.
울트라에디터를 이용해서, '5000' 이나 '5517' 이나 'mb382' 로 검색한다. 이들을 각각 'DACS7000' 이나 '7710' 이나 'mb391' 로 수정한다. 만일 그래도 make 에서 에러가 난다면,
'sysconf.mak' 과 'toolset.mak' 를 7710ref 로 부터 복사한다.

가장 흔한 에러가 define 에러이다. 이런 것들은 대개의 경우, 7710ref 소스 코드를 서로 비교하면서, 7710 쪽으로 맞춰주면 된다.
이때 DAC5000 에는 있었는 데, 7710ref 에서는 없었다면, 주석처리해야 한다. 이의 반대 경우라면, 새로이 추가시켜야 한다.
또한 흔한 에러중에 헤더파일(.h)에 대한 것이다. 이것은 거의 대부분, 7020 관련 헤더파일을 include 하거나 할때 발생한다. 또한 H/W 에 의존적인 sti7710.h 나 mb391.h 같은 경우에는 stdevice.h 파일을 include 시키면 된다.

Stmerge 와 Stpti 를 제외하고 포팅한 현재까지 새롭게 DACS7000 에 복사한 헤더 파일들은 다음과 같다.

7710 → DACS7000 app_data.h
5517 → DACS7000 stcfg.h, stintmr.h, stpwm.h, sttsmux.h, eeprom.c(세마포어 루틴 주석처리)

직접 작업한 결과, 컴파일에러를 잡는 일은 그리 오랜 시간이 걸리지 않았다.
마지막으로 컴파일한 Makefile 을 살펴보자!!

#----------------------------------------------------------------------
APP_NAME := top
HEX_NAME := arena
#----------------------------------------------------------------------
ARENA_ROOT = C:/STM/DACS7000
ARENA_USER_CONFIG = C:/STM/DACS7000/config
#ARENA_CONFIG = $(ARENA_USER_CONFIG)
ARENA_INCLUDE = C:/STM/DACS7000/include
ROOT = C:/STM/DACS7000/
ARENA_MAKE = $(ROOT)make
 
ARENA_EXPORTS = $(ROOT)lib
ARENA_TARGET_PATH = $(ROOT)config/platform
 
ARENA_MAKE_VERSION := 2
SUPPRESS_CLEAN_ALL := 1
 
ifdef IN_OBJECT_DIR
 
include $(ARENA_MAKE)/generic.mak
 
TARGETS := $(APP_NAME).lku
 
INCLUDE_PATH = $(ROOT)include/arena_inc
SRC_DIR = C:/STM/DACS7000/src
UI_DIR = $(SRC_DIR)/ui
CM_DIR = $(SRC_DIR)/cm
COMMON_DIR = $(SRC_DIR)/common
AUD_DIR = $(SRC_DIR)/av
PSIP_DIR = $(SRC_DIR)/psip
NIM_DIR = $(SRC_DIR)/nim
FLASH_DIR = $(SRC_DIR)/flash
DEVICE_DIR = $(SRC_DIR)/device
OAL = $(SRC_DIR)/osal
DV = $(SRC_DIR)/dv_ddec2
LIB_DIR = C:/STM/DACS7000/lib
TUNER = $(SRC_DIR)/tuner
INTERFACE = $(SRC_DIR)/interface
 
# include for loadpfr
EX_INCLUDE = C:/stm/5517ref/src/stgfx/src/olf 
CM_INCLUDE = $(SRC_DIR)cm/include
 
#----------------------------------------------------------------------
# include path for shared objects
 
INCLUDES += -I$(SRC_DIR)/system
#INCLUDES += -I$(SRC_DIR)/system/5517
INCLUDES += -I$(ARENA_USER_CONFIG)/chip
INCLUDES += -I$(ARENA_USER_CONFIG)/board
INCLUDES += -I$(APP_DIR)
INCLUDES += -I$(NIM_DIR)
INCLUDES += -I$(UI_DIR)
INCLUDES += -I$(UI_DIR)/osd
INCLUDES += -I$(UI_DIR)/definition
INCLUDES += -I$(CM_DIR)
INCLUDES += -I$(CM_DIR)/include
INCLUDES += -I$(AUD_DIR)
INCLUDES += -I$(PSIP_DIR)
INCLUDES += -I$(FLASH_DIR)
INCLUDES += -I$(DEVICE_DIR)
INCLUDES += -I$(TUNER)
INCLUDES += -I$(COMMON_DIR)
INCLUDES += -I$(COMMON_DIR)/key
INCLUDES += -I$(COMMON_DIR)/keydef
#INCLUDES += -I$(EX_INCLUDE)
INCLUDES += -I$(CM_INCLUDE)
INCLUDES += -I$(INTERFACE)
#----------------------------------------------------------------------
# set virtual paths to objects (as path from top application ./objs/ST20 subdirectory)
vpath %.c %.h $(SRC_DIR)/ui
vpath %.c %.h $(SRC_DIR)/system
vpath %.c %.h $(SRC_DIR)/system/dvb
vpath %.c %.h $(SRC_DIR)/system/5517
vpath %.c %.h $(NIM_DIR)
vpath %.c %.h $(UI_DIR)
vpath %.c %.h $(UI_DIR)/osd
vpath %.c %.h $(UI_DIR)/definition
vpath %.c %.h $(CM_DIR)
vpath %.c %.h $(SRC_DIR)/av
vpath %.c %.h $(PSIP_DIR)
vpath %.c %.h $(FLASH_DIR)
vpath %.c %.h $(DEVICE_DIR)
vpath %.c %.h $(TUNER)
vpath %.c %.h $(COMMON_DIR)
vpath %.c %.h $(COMMON_DIR)/key
vpath %.c %.h $(INTERFACE)
vpath %.h $(CM_DIR)/include
vpath %.lib   $(LIB_DIR)
#----------------------------------------------------------------------
# objects to be built
 
ST20_OBJS := main.tco boot.tco pio.tco evt.tco errors.tco avmem.tco \
             uart.tco tbx.tco i2c.tco sections.tco cfg.tco pwm.tco layer.tco vmix.tco \
   	      denc.tco vtg.tco initfuncs.tco blit.tco tt_gutil.tco tt_tool.tco debug.tco event.tco dma.tco
   	   #   app_setup.tco tt_aud.tco tt_layer.tco tt_api.tco tt_blit.tco tt_vmix.tco tt_gutil.tco tt_tsmux.tco stblast.lib clkrv.tco 7020boot.tco 7020ddr.tco \
   	   clk_gen.tco vin.tco
 
# extern object to be built for AUD
ST20_OBJS += vid.tco aud.tco clkrv.tco
	    #tsmux.tco
 
# Transport specific selection
#ST20_OBJS += $(DVD_TRANSPORT).tco transport.tco
 
# Service specific.
ST20_OBJS += service.tco 
 
# application objects to be built
#ST20_OBJS += callprog.tco		
 
ifdef ENABLE_TRACE
  ST20_OBJS += trace.tco
  CFLAGS += -DENABLE_TRACE
endif
 
# built for UI 
ST20_OBJS += osd_init.tco uiApi.tco uiUtil.tco vidutils.tco ui_nvm.tco ui_system.tco ui.tco chEdit.tco chInfo.tco graphics.tco unicodeProc.tco clock.tco uiPopup.tco uiChannel.tco
 
# common objects to be built
ST20_OBJS += sysInit.tco keyBoard.tco timer.tco
 
# extern object to be built for CM
ST20_OBJS += cmInterface.tco cmChange.tco \
	cmDBmanage.tco cmNvm.tco cmScan.tco
 
# extern object to be built for Psip
ST20_OBJS += psip_api.tco psi_Main.tco psip_table.tco psip_filtersetup.tco psip_signalwait.tco \
			 parsePAT.tco parsePMT.tco \
			 parseTVCT.tco parseCVCT.tco parseMGT.tco parseEIT.tco parseETT.tco	\
			 parseSTT.tco parseRRT.tco parseMSS.tco psip_parsing.tco hangulUtil.tco descTest1.tco
 
# extern object to be built for NimDrv
ST20_OBJS += nim3125.tco nimST.tco nimInterface.tco nimLib.tco tuner.tco
 
# extern object to be built for FLASH
#ST20_OBJS += getertxt.tco flash_main.tco tt_flash.tco 
 
# extern object to be built for POD
 
# extern object to be built for DEVICE
ST20_OBJS += eprom.tco avControlApi.tco avi.tco tsmuxapi.tco
 
 
# extern object to be built for Tuner
ST20_OBJS += lgtunerDlg.tco
 
# extern object to be built for interface
ST20_OBJS += interface.tco interFunc.tco
 
#----------------------------------------------------------------------
# Produce a map file
 
ST20_LKFLAGS = -M $(APP_NAME).map 
ST20_LKFLAGS = -M $(HEX_NAME).map 
#----------------------------------------------------------------------
# Debug reporting to UART, console (unset or NONE) or both (DEBUG: printf's to CONSOLE, STTBX_Print to UART)
#CFLAGS += -DSTVTG_VSYNC_WITHOUT_VIDEO
#CFLAGS += -DTV_ASPECT_RATIO=STGXOBJ_ASPECT_$(DVD_TV_OUTPUT)
 
CFLAGS += -DSTTBX_PRINT -DSTTBX_REPORT
 
ifeq "$(DVD_IO)" "UART" 
 CFLAGS += -DREPORT_TO_UART 
else
  ifeq "$(DVD_IO)" "DEBUG" 
   CFLAGS += -DREPORT_TO_UART -DREPORT_TO_CONSOLE
  else 
   CFLAGS += -DREPORT_TO_CONSOLE DVD_RUNARGS="-log $(APP_NAME).log"
  endif
endif
 
# for simulation 
#CFLAGS += -DTESTFUN
#----------------------------------------------------------------------
 
# for DEBUG
# CFLAGS += -DARENA_DEBUG
#----------------------------------------------------------------------
 
CFLAGS += $(OPTIONAL_CFLAGS)
 
#----------------------------------------------------------------------
# Build targets
 
include $(ARENA_MAKE)/defrules.mak
 
 
ST20_LIB := stapi_stpti4.lib 
 
 
#make lku file (debugging)
$(APP_NAME)_INIT := board_init
 
$(ST20_TARGETS): $(ST20_OBJS) $(ST20_LIB)
	$(ECHO) Building $@
	$(LINK_EXECUTABLE) 
 
 
#make hex file
$(HEX_NAME)_INIT := board_init_hex
$(HEX_NAME)_LKFLAGS := -romimage -o $(HEX_NAME).hex
$(HEX_NAME).hex: initfuncs.tco $(ST20_OBJS) $(ST20_LIB)
	$(ECHO) Building $@
	$(LINK_EXECUTABLE)
#----------------------------------------------------------------------
 
clean:
ifeq "$(ARCHITECTURE)" "ST20"
	-$(RM) *$(OBJ_SUFFIX)
	-$(RM) *$(LIB_SUFFIX)
	-$(RM) *$(EXE_SUFFIX)
	-$(RM) *.dbg
	-$(RM) *.map
	-$(RM) *.hex
	-$(RM) *.bin
	-$(RM) *.log
endif
 
#----------------------------------------------------------------------
 
else
	include c:/stm/DACS7000/make/builddir.mak
 
	#test with output logged to a file
runlog: 
	$(MAKE) run DVD_RUNARGS="-log $(APP_NAME).log"
 
%.hex: check_object_dir
	$(MAKE_AT_TARGET)
 
 
endif
 
 
#EOF ------------------------------------------------------------------

앞의 작업보다 더 어렵다. 한번에 착~ 하고 돌아가면 좋겠지만, 현실은 그렇게 만만하지 않다. 나의 경우 총 5 ~ 6 번 부팅 및 초기 드라이버 세팅에서 에러가 발생했다.
'avmem.c, clkrv.c, aud.c, vid.c, vtg.c' 등이 그것이다. 거의 대부분의 에러가 초기화시 필요한 구조체의 잘못된 입력값이었다. 그 중 가장 골치 아팠던 것은 vid.c 였다. FDMA 를 초기화 시켜야 제대로 초기화 되었다.

  • computer/digitalarena/dac5000_을_dacs7000_으로_포팅하기.txt
  • Last modified: 3 years ago
  • by likewind