7710 프로그램을 컴파일하는 방법을 기술하고 있다.
예전의 DACS1000(SD), DAC5000(HD) 에서는 ST 의 라이브러리인 STR1.96 을 사용했었다. 쓰는 동안 별 탈이 없었기 때문에… -_-;
그런데, 7710 으로 올라오면서 기존의 STR1.96 으로 컴파일이 안된다. 아직 정확한 원인을 알 수 없지만 말이다.
기존의 사용하던 5517ref 소스 대신에 7710ref 프로그램이 나왔다. ref 라고하는 것은 레퍼런스 코드라고 생각하면 된다. 즉 라이브러리가 생성되는 코드이다.
7710ref 디렉토리를 볼 것 같으면 다음과 같다.
- bin : 컴파일 환경설정을 위한 .bat 파일들
- config : 부팅을 위한 .cfg 파일들
- docs : 각 모듈별 문서들이 .pdf 형식으로 나뉘어져 있다
- include : include 파일들
- lib : src 디렉토리를 컴파일하면, 각 모듈별로 .lib 파일이 생성된다
- make : 컴파일을 위한 각 옵션을 조절할 수 있는 make 설정파일이 있다
- singappl : 싱가포르 프로그램으로 예전 brick 소스에 가깝다
- src : 각 모듈별 파일들
- testapp : 각 테스트 프로그램들
준비운동하기
ST20R2.1.2 설치
컴파일을 위해서는 ST20R2.1.2 를 설치해야 한다. 서버의 '프로젝트 → sw → HD → 진행중프로젝트 → 7710' 아래에 가면, 인스톨(.exe)파일이 있으니 설치하면 된다. 설치후에는 c:\STM\ST20R2.1.2 에 설치된다.
기준이 되는 디렉토리는 c:\STM 이다.
여기에 앞에서 압축을 푼 7710ref 를 복사한다. 또한 가장 중요한 프로그램인 DACS7000 을 복사한다.
그러면, STM 디렉토리에는
- 7710ref : 7710 기본 라이브러리를 생성하는 소스 프로그램 (5517ref 와 같다고 봄)
- DACS7000 : 메인 소스 프로그램
- ST20R2.1.2 : ST OS 라이브러리(정상적인 컴파일을 위해 반드시 필요)
있다.
ST20.bat 파일을 7710ref\bin 으로 복사
ST20R2.1.2\bin 아래에 ST20.bat 파일을 7710ref\bin 아래에 복사한다.
setup.bat 파일 수정
환경설정을 위해서 7710ref\bin 아래에 있는 setup.bat 파일을 다음과 같이 수정한다.
@echo off rem Perform the following steps when modifying this file to setup the build rem environment: rem 1. Set the following variable to point to the top level of the 7710 tree. rem NOTE: Use forward slashes and do not include a trailing slash. set STi7710ROOT=C:/stm/7710ref <<------ 경로에 맞게 수정 rem 2. Set the following variable to point to the location of your own rem targets.cfg file. rem NOTE: Use forward slashes and do not include a trailing slash. rem NOTE: This is the location of the targets.cfg shipped with the release rem which has no targets defined. If you provide your own, remember rem to delete the targets.cfg from this location. set DVD_TARGET_PATH=%STi7710ROOT%/config/platform rem 3. Add the location of the 7710 bin directory to the front of your rem path. rem NOTE: Use backward slashes and do not include a trailing slash. set PATH=%STi7710ROOT%/bin;%PATH% echo Using 7710 root: %STi7710ROOT% set DVD_MAKE=%STi7710ROOT%/make set DVD_ROOT=%STi7710ROOT%/src set DVD_EXPORTS=%STi7710ROOT%/lib rem See the release notes for descripton of these build options set DVD_TRANSPORT=stpti4 set DVD_PLATFORM=mb391 set DVD_SERVICE=DVB set DVD_FRONTEND=7710 set DVD_BACKEND=7710 set DVD_DEPENDS=yes rem tuner driver settings for 299, 360, 297/297J tuners set DVD_STTUNER_USE_SAT=YES set DVD_STTUNER_USE_TER=YES set DVD_STTUNER_USE_CAB=YES set DVD_STTUNER_BUILD_299=YES set DVD_STTUNER_BUILD_DUAL299STEM=YES set DVD_STTUNER_BUILD_360=YES set DVD_STTUNER_DRV_CAB_EXTTUNERS=YES set DVD_STTUNER_DRV_CAB_STV0297=YES set DVD_STTUNER_DRV_CAB_STV0297J=YES set DVD_STTUNER_BLOCK_SYNC_MODE_SELECT=YES rem enable audio wa set ST_7710_CUT1_WORKAROUND=1 rem set the following for 299/6K NIM tuner set TESTAPP_TUNER_TYPE=STTUNER_TUNER_STB6000 rem video memory injection settings set TESTAPP_VID_INJECTION=MEMORY set TESTAPP_VID_FILENAME=susie.m1v rem set TESTAPP_TSIN_CONFIG=TSIN0_NORMAL (OR) TESTAPP_TSIN_CONFIG=TSIN1_NORMAL rem If this variable is not set, TSMERGER will operate in bypass mode. Affects all tests using tsmerger. set TESTAPP_TSIN_CONFIG=TSIN1_NORMAL rem set epld for stem mode to use db499, not set if db580 nim will be used set TESTAPP_EPLD_DB499=1 rem set DEBUG to 1 as default to support boot from flash / will be investigated later. set DEBUG=1 rem set TESTAPP_SWITCH_HD_MODES=1 rem If this variable is set, HD format will be periodically switched between 1080I, 720P & 480P in testapp1 rem Otherwise, output will be set to TESTAPP_HD_FORMAT format set DVD_APPLIC=TESTTOOL set DVD_REF=%STi7710ROOT%/testapps/testapp1 set DVD_IO=UART <<------ 추가 goto Done echo This setup.bat file must be edited to reflect the installation location echo in order to work. Please read the instructions in the setup.bat file. echo This script is being run as: echo %0% :Done
위에서 주석이 달린 부분을 수정해주면 된다.
컴파일 하기
DACS7000을 컴파일해보자. 프롬프트 창을 열고, 다음과 같이 입력한다.
>cd \ >cd stm\7710ref\bin >setup.bat >st20.bat >cd .. >cd .. >cd DACS7000 >gmake
위와 같이 컴파일하면 된다.
7710ref 라이브러리 만들기
>cd \ >cd stm\7710ref\bin >setup.bat >st20.bat >cd .. >cd src >gmake clean >gmake
컴파일이 성공적으로 끝났다면, lib 디렉토리 아래에 stapi_stpti4.lib 파일이 생성되었을 것이다.(파일 이름이 바뀌었다!!) 이 파일을 DACS7000\lib 아래에 복사한다.
몇 가지 염두할 점들
2005. 10. 21 현재, 7710 CUT 3.1 에 맞춰 나온 S/W 가 7710M6minus.zip 이다. 몇가지 수정사항이 가해져야 한다.
BSI FTP 에서 다운로드한 stvtg 디렉토리와 tsmerge.c 파일을 복사해야 한다.
- BSI FTP 사이트에서 7710M6minus.zip, stvtg.zip, tsmerge.c 다운로드 받는다.
- 7710M6minus.zip 압축을 푼다. 풀면, 7710ref-SNAP2005.10.071-DVB.zip 파일이 나온다.
- 7710ref-SNAP2005.10.071-DVB.zip 압축을 풀면, 7710ref 가 나온다.
- 앞에서 받은 stvtg.zip 을 풀어서, 7710ref/src 아래에 복사한다. 이때 이전 디렉토리는 이름을 바꾼다.(stvtg.old)
- temerge.c 역시 7710ref/testapps/shared/7710 아래에 복사한다. 이전 파일은 이름을 바꾼다.
라이브러리를 만드는 과정에서 아래와 같은 에러가 발생할 것이다.
---- Building stvtg.lib ---- Compiling C:\stm\7710ref\src\stvtg\src/vtg_drv.c st20cc C:\stm\7710ref\src\stvtg\src/vtg_drv.c -D STVTG_VOS -D STVTG_USE_CLKRV -D STCLKRV_NO_PTI -D BE_7710 -DSTSYS_NO_PRAGMA -DPROCESSOR_C1 -DSTPTI_D VB_SUPPORT -DSTVTG_TASK_PRIORITY_IT_PROCESSING=15 -DSTVTG_CLK_HDMI -DSTVTG_HDMI -finl-timeslice -c1 -c -O2 -Dmb391 -DST_7710 -DARCHITECTURE_ST20 -DST _OS20 -IC:\stm\7710ref\src\stvtg\src/hal -IC:\stm\7710ref\src\stvtg\src -IC:\stm\7710ref\src\stvtg\src/hal -IC:\stm\7710ref\src\stvtg\src/hal/denc -IC:\stm\7710ref\src\stvtg\src/hal/omega2 -IC:/stm/7710ref/include -IC:/stm/7710ref/src/stvtg -IC:/stm/7710ref/config/chip -IC:/stm/7710ref/config/boa rd -IC:/stm/7710ref/config/platform -o vtg_drv.tco Error-st20icc-C:\stm\7710ref\src\stvtg\src\vtg_drv.c(119)- Undeclared name, inventing 'extern int STVTG_TIMING_MODE_1152I50000_48000' Serious-st20icc-C:\stm\7710ref\src\stvtg\src\vtg_drv.c(119)- Illegal in static integral type initialiser: non constant 'STVTG_TIMING_MODE_1152I50000_4 8000' st20cc: Error: in attempting to run st20icc gmake[5]: *** [vtg_drv.tco] Error 1 gmake[5]: Leaving directory `C:/stm/7710ref/src/stvtg/src/objs/ST20' gmake[4]: *** [default] Error 2 gmake[4]: Leaving directory `C:/stm/7710ref/src/stvtg/src' gmake[3]: *** [C:\stm\7710ref\src\stvtg/src/objs/ST20/stvtg.lib] Error 2 gmake[3]: Leaving directory `C:/stm/7710ref/src/stvtg/objs/ST20' gmake[2]: *** [default] Error 2 gmake[2]: Leaving directory `C:/stm/7710ref/src/stvtg' gmake[1]: *** [stvtg.lib] Error 2 gmake[1]: Leaving directory `C:/STM/7710ref/src/objs/ST20' gmake: *** [default] Error 2
헤더파일에 define 이 안되어서 발생하는 에러이다. 이럴 때는 include/stvtg.h 파일에 다음과 같이 추가하면 된다.
typedef enum STVTG_TimingMode_e { STVTG_TIMING_MODE_SLAVE, STVTG_TIMING_MODE_480I60000_13514, /* NTSC 60Hz */ STVTG_TIMING_MODE_480P60000_27027, /* ATSC 60P */ STVTG_TIMING_MODE_480P30000_13514, /* ATSC 30P */ STVTG_TIMING_MODE_480P24000_10811, /* ATSC 24P */ STVTG_TIMING_MODE_480I59940_13500, /* NTSC, PAL M */ STVTG_TIMING_MODE_480P59940_27000, /* ATSC 60P/1.001 */ STVTG_TIMING_MODE_480P29970_13500, /* ATSC 30P/1.001 */ STVTG_TIMING_MODE_480P23976_10800, /* ATSC 24P/1.001 */ STVTG_TIMING_MODE_480I60000_12285, /* NTSC 60Hz square */ STVTG_TIMING_MODE_480P60000_24570, /* ATSC 60P square */ STVTG_TIMING_MODE_480P30000_12285, /* ATSC 30P square */ STVTG_TIMING_MODE_480P24000_9828 , /* ATSC 24P square */ STVTG_TIMING_MODE_480I59940_12273, /* NTSC square, PAL M square */ STVTG_TIMING_MODE_480P59940_24545, /* ATSC 60P/1.001 square */ STVTG_TIMING_MODE_480P29970_12273, /* ATSC 30P/1.001 square */ STVTG_TIMING_MODE_480P23976_9818 , /* ATSC 24P/1.001 square */ STVTG_TIMING_MODE_576I50000_13500, /* PAL B,D,G,H,I,N, SECAM */ STVTG_TIMING_MODE_576I50000_14750, /* PAL B,D,G,H,I,N, SECAM square */ STVTG_TIMING_MODE_1080P60000_148500, /* SMPTE 274M #1 P60 */ STVTG_TIMING_MODE_1080P59940_148352, /* SMPTE 274M #2 P60 /1.001 */ STVTG_TIMING_MODE_1080P50000_148500, /* SMPTE 274M #3 P50 */ STVTG_TIMING_MODE_1080I60000_74250, /* EIA770.3 #3 I60 = SMPTE274M #4 I60 */ STVTG_TIMING_MODE_1080I59940_74176, /* EIA770.3 #4 I60 /1.001 = SMPTE274M #5 I60 /1.001 */ STVTG_TIMING_MODE_1080I50000_74250, /* SMPTE 295M #2 I50 */ STVTG_TIMING_MODE_1080I50000_74250_1, /* SMPTE 274M I50 */ STVTG_TIMING_MODE_1080P30000_74250, /* SMPTE 274M #7 P30 */ STVTG_TIMING_MODE_1080P29970_74176, /* SMPTE 274M #8 P30 /1.001 */ STVTG_TIMING_MODE_1080P25000_74250, /* SMPTE 274M #9 P25 */ STVTG_TIMING_MODE_1080P24000_74250, /* SMPTE 274M #10 P24 */ STVTG_TIMING_MODE_1080P23976_74176, /* SMPTE 274M #11 P24 /1.001 */ STVTG_TIMING_MODE_1035I60000_74250, /* SMPTE 240M #1 I60 */ STVTG_TIMING_MODE_1035I59940_74176, /* SMPTE 240M #2 I60 /1.001 */ STVTG_TIMING_MODE_720P60000_74250, /* EIA770.3 #1 P60 = SMPTE 296M #1 P60 */ STVTG_TIMING_MODE_720P59940_74176, /* EIA770.3 #2 P60 /1.001= SMPTE 296M #2 P60 /1.001 */ STVTG_TIMING_MODE_720P30000_37125, /* ATSC 720x1280 30P */ STVTG_TIMING_MODE_720P29970_37088, /* ATSC 720x1280 30P/1.001 */ STVTG_TIMING_MODE_720P24000_29700, /* ATSC 720x1280 24P */ STVTG_TIMING_MODE_720P23976_29670, /* ATSC 720x1280 24P/1.001 */ STVTG_TIMING_MODE_1080I50000_72000, /* AS 4933-1 200x 1080i(1250) */ STVTG_TIMING_MODE_720P50000_74250, STVTG_TIMING_MODE_1152I50000_74250, STVTG_TIMING_MODE_576P50000_27000, /*Australian mode*/ STVTG_TIMING_MODE_1152I50000_48000, <<<<<------- 추가할 것!!! STVTG_TIMING_MODE_COUNT /* must stay last */ } STVTG_TimingMode_t;