T-Engine 제대로 알기 ④

들어가는 말지난 회까지 TRON과 T-Engine의 전반적인 개념과 함께 T-Engine의 핵심인 T-Kernel 구성에 대해서 알아보았다. 이번 회에서는 T-Engine 개발 방법에 대해서 소개하고자 한다. 보다 정확히 말하면 T-Engine의 소프트웨어 개발 즉, T-Kernel의 구축과 프로그래밍 방법에 대해서 설명하도록 하겠다.본문의 구성은 T-Kernel의 입수방법, T-Kernel 구축, 프로그래밍 실제, T-Kernel/SE(Standard Extension) 구축 순으로 이루어지겠는데, 들어가기에 앞서 T-Kernel의 동작에 필요한 개발환경 구축과 작성한 프로그램의 테스트를 위한 타깃시스템(개발보드)은 퍼스널 미디어사(http://www.personal-media.co.jp)에서 판매되고 있는 T-Engine 표준 개발보드인 T-Engine/SH7727 패키지를 기반으로 한다는 점을 미리 알리며 본론으로 들어가 보도록 하자.T-Kernel 입수방법이하에서, 사용되는 T-Kernel 소스코드는 T-Engine 포럼 공식 웹사이트(http:// www.T-Engine.org, http://www. T-Engine.or.kr)를 통해서 다운로드 할 수 있다. 웹사이트의 [다운로드] 항목을 거쳐 먼저 [사용 신청]을 하도록 하자. 사용 신청 시에는 간단한 사용자 정보를 입력하고 라이선스에 동의만 하면 입력한 사용자 정보의 E-Mail 주소를 통해 다운로드 가능한 주소와 아이디 및 패스워드를 받을 수 있다. 필자의 경험에 의하면 메일 주소를 입력할 때는 가급적이면 일반 도메인(야후, 핫메일 등등)이 아닌 소속 회사나 학교 등이 도메인으로 되어 있는 메일 주소를 입력하기를 권장한다. 일반 도메인일 경우 간혹 거부당하는 경우도 있으니 주의하도록 하자.하지만, 원칙적으로 포럼에서는 T-Kernel 소스코드를 일반에 공개하고 있기 때문에 혹시라도 신청이 거부된다면 입력정보를 수정해서 다시 시도 해보도록 하자. (이하의 T-Kernel 은 2006년 8월에 공개한 Version 1.02.02를 사용하고 있다.)T-Kernel 구축입수한 T-Kernel을 사용하기 위해서는 우선 Kernel이 동작할 수 있는 환경이 필요하다. 여기서는 표준 T-Engine 개발보드인 T-Engine/SH7727 패키지 내에 포함되어 있는 GNU 개발환경을 사용하였으며, T-Monitor 역시 패키지에서 제공하는 T-Monitor를 사용하였다. (실은 GNU 개발환경 구축부터 설명하기에는 너무 많은 지면을 할애해야 하는 애로사항이 있기 때문에 이점 미리 양해를 구한다.)T-Engine/SH7727 패키지 내에는 Linux와 Windows에서 사용 가능한 GNU 개발환경 각각을 제공하고 있는데 여기서는 Windows 버전을 사용하였으며, 따라서 컴파일 환경에 필요한 Cygwin과 터미널 에뮬레이터인 Tera Term이 설치되어 있는 환경을 전제조건으로 하고 있다. 보다 자세한 GNU 개발환경 구축은 패키지 내의 설명서를 참조하기 바란다.Host PC : Windows XP sp2Target System : T-Engine/SH7727 (퍼스널 미디어사 제공)Cygwin : Version 2.573.2.2 (Windows 용)Tera Term : Version 2.3그럼, 이러한 개발환경 하에서 오픈 T-Kernel 소스를 구축하는 방법에 대해서 알아보도록 하자. (퍼스널 미디어에서 제공하는 PMC T-Kernel이 아님)1. T-Kernel 구축에 필요한 환경변수 등록 (Cygwin 상에서 등록)export BD=/usr/local/te/tkernel_source(개발 환경 기준 디렉터리)export GNUs=/usr(GNU 개발 툴)export GNU_BD=/usr/local/te/tool/Cygwin-i686(크로스 개발용 GNU 개발 툴)export GNUsh=$GNU_BD/sh-unknown-tkernel(SH용 GNU 개발 툴)export GCC_EXEC_PREFIX=$GNU_BD/lib/gcc-lib/(gcc 관련)cf. /usr는 Cygwin 내의 디렉터리이며, GNU 개발환경은 이 디렉터리를 기준으로설치되어 있어야 한다. 퍼스널 미디어사에서 제공하는 통상의 설치기준을 따르면 된다.2. T-Kernel 소스코드 압축 해제- 입수한 T-Kernel 압축 소스코드를 /usr/local/te 디렉터리에 해제한다.cd /usr/local/tetar zxvf tkernel.1.02.01.tar.gz -C /usr/local/te/usr/local/te/ 밑에 tkernel_source라는 디렉터리가 생성되고 그 밑에 이하와 같은디렉터리가 생성되는 것을 확인할 수 있다.config, etc, include, kernel, lib3. 라이브러리 및 커널 컴파일라이브러리를 컴파일 한 후, 커널을 컴파일 하여 오브젝트 파일을 생성시킨다.(std_sh7727 : 타깃시스템의 CPU)- 라이브러리 컴파일cd $BD/lib/build/std_sh7727make각종 라이브러리 파일(줈.a) 생성을 확인한다.- 커널 컴파일cd $BD/tkernel/sysmain/build/std_sh7727makeKernel 오브젝트 파일(kernel-rom.mot) 생성을 확인한다.다음으로, 설정정보를 (RomInfo, SYSCONF, DEVCONF) 컴파일 하자.- RomInfo 컴파일cd $BD/config/build/std_sh7727makerominfo.mot 파일 생성을 확인한다.4. 커널 구축먼저, 타깃시스템과 Host PC를 시리얼 케이블로 연결하고, Tera Term을 실행시킨다. 타깃시스템은 T-Monitor가 부팅될 수 있도록 딥스위치 설정을 바꾼 후 전원을 입력한다. 그리고 앞의 과정 3에서 생성시킨 rominfo.mot와 kernel-rom.mot 파일을 순서대로 타깃시스템 플래시 ROM에 기록시킨다. T-Monitor에서 제공하는 FlashLoad(FLLO) 명령어를 사용하여 기록할 수 있다. (그림 1)이제 타깃시스템의 플래시 ROM에는 새로 작성한 커널이 설치되었다(기존의 PMC T-Kernel 은 삭제 됨).설치 후, TM> bd 명령으로 실제로 커널을 실행시켜 보자. 정상적으로 설치가 되었다면, 아래와 같은 메시지 확인할 수 있다. (그림 2)이로써, 사실상 타깃시스템으로의 T-Kernel의 구축은 끝난 것이나 다름없다.그러나 여기서 한번 생각해 볼 것이 있다. 그것은 바로 3회의 연재에 걸쳐서 소개한 T-Engine과 T-Kernel의 특징이 여기서 잘 나타나고 있다는 것이다. 이상에서 본 바와 같이 타깃시스템으로 T-Engine 포럼에서 정하고 있는 표준 사양에 근거한 표준 T-Engine 개발보드를(물론, T-Monitor 역시 표준 사양에 근거하고 있다.) 사용할 경우, 특정 타깃시스템(CPU)을 대상으로 T-Kernel을 재컴파일만 하면 바로 동작할 수 있도록 되어 있다는 것이다. 이것이 바로 미들웨어 및 상위 소프트웨어의 유통성을 향상시키려고 하는 T-Engine 포럼의 표준화 정책에 따르는 것이다.이제 T-Kernel 상의 프로그래밍에 대해서 알아보도록 하자.프로그래밍 실제그림 2에서 표시된 메시지는 $BD/kernel/usermain/ usermain.c의 main 함수에서 표시하고 있다. T-Kernel은 시작되면서 OS로서 필요한 각종 처리 등을 거쳐서 마지막 단계로서 usermain.c를 호출하게 된다. 결국, 사용자는 이 usermain.c부터 필요로 하는 상위 애플리케이션 등의 프로그램을 만들어 갈 수 있다는 것이다.일반적으로는 애플리케이션을 초기화하는 등의 태스크를 생성하는 코드를 작성하게 된다. 현재 공개된 커널 소스에서는 T-Monitor의 모니터 서비스 함수를 이용해서 콘솔에 문자열을 표시하고 종료하는 것으로 되어있다. 이하는 usermain.c의 소스코드(주석 삭제) 이다.#include #include #include EXPORT INT usermain( void ){ tm_putstring((UB줈)"Push any key to shutdown the T-Kernel.n"); tm_getchar(-1); return 0;}[usermain.c 소스코드]이제, usermain.c를 적당히 이용하여 간단한 프로그램을 작성해 보자./- - 테스트용 태스크 -/LOCAL void test_task( int stct, VP exinf ){ W i; tm_putstring("Start test task.n"); for ( i = 1; i < 6; i++ ) { tk_slp_tsk(1000); 4) tm_putstring("runningn"); } tm_putstring("Finish test task.n"); /- 자기 태스크 종료 -/ tk_exd_tsk(); (5)}/- - 사용자 메인 -/EXPORT INT usermain( void ){ ER ercd; // 에러 코드 W tid; // 태스크 ID T_CTSK ctsk; // 태스크 생성정보 T_RTSK rtsk; // 태스크 상태참조 /- 태스크 생성정보 줈/ ctsk.exinf = NULL; // 확장정보 ctsk.tskatr = TA_HLNG | TA_RNG0; // 속성 ctsk.task = (FP)test_task; // 태스크 시작 주소 ctsk.itskpri = 4; // 우선도 ctsk.stksz = 1024; // 스택 사이즈(바이트) ctsk.sstksz = 0; // 시스템 스택 사이즈 ctsk.stkptr = NULL; // 사용자 스택 포인터 ctsk.uatb = NULL; // 태스크 고유공간 페이지 테이블 ctsk.lsid = 0; // 논리 공간 ID ctsk.resid = 0; // 리소스 ID /- 테스트 태스크 생성 -/ (1) ercd = tk_cre_tsk(&ctsk); if ( ercd < E_OK ) return 0; tid = ercd; /- 테스트용 태스크 실행 - (2) ercd = tk_sta_tsk(tid, 0); if ( ercd < E_OK ) return 0; /- 테스트용 태스크 상태참조 -/ while ( 1 ) { // tid 태스크가 존재하지 않으면 루프 탈출 ercd = tk_ref_tsk(tid, &rtsk); (3) if ( ercd == E_NOEXS ) break; } /- 시스템 종료 -/ tm_putstring("Push any key to shutdown the T-Kernel.n"); tm_getchar(-1); (6) return 0;}[사용자 작성 usermain.c]샘플로 작성한 usermain.c에서는 T-Kernel에서 제공하는 몇 가지의 API를 사용하여 하나의 태스크를 생성/실행시킨 후((1), (2)), 실행되고 있는 태스크의 상태를 참조((3))하여 먼저 실행시킨 태스크가 현재 커널 상에 존재하지 않으면((6)) 루프를 빠져 나와서 시스템 종료 대기(아무 키나 누르면 종료)를 하게 된다. 테스트용 태스크는 실행이 시작되면 실행 중(running)이라는 메시지를 1초 간격((4))으로 5번 콘솔에 표시한 후 스스로 종료한다((5)). (API의 자세한 내용은 T-Kernel 사양서를 참조하기 바란다.)이제 작성한 프로그램의 동작을 확인하도록 하자. 그러기 위해서는 커널을 재컴파일 해야 한다.cd $BD/tkernel/sysmain/build/std_sh7727make이렇게 재작성된 kernel-rom.mot을 다시 Tera Term을 통해 타깃시스템으로 전송시키고(그림 1 참조), 커널을 로딩( TM>bd 실행)하면 아래와 같은 메시지가 표시되는 것을 확인 할 수 있다.usermain.c의 컴파일에 사용되는 Makefile은 usermain.c가 포함되어 있는 디렉터리 내의 Makefile.usermain 이다. usermain.c 이외에 소스코드를 추가하여 개발할 경우는 이 Makefile을 적당히 수정해서 사용할 수 있다. 예를 들어 test.c를 추가하고 싶을 경우는 아래와 같이 Makefile.usermain에 test.c를 추가 기록하면 된다.# source filesSRC += usermain.c test.c # <- test.c 추가이상으로, 간단한 프로그램을 작성해 보았는데, 조금 더 응용을 한다면 사용자가 직접 쉘 프로그램을 만들어 usermain.c에서 호출해서 사용하는 형태도 생각해 볼 수 있겠다. 실제로, T-Engine 포럼에서 추가로 공개하고 있는 소프트웨어에는 이런 방식을 이용한 간단한 쉘 프로그램이 포함되어 있다. 덧붙여, 퍼스널 미디어사에서 제공하는 PMC T-Kerenel(Extension 포함)의 경우, usermain에서 쉘 프로그램을 실행 시켜 콘솔 프롬프트 입력대기 상태가 된다. 쉘 프로그램은 사용자가 개발하는 각종 프로그램을 로딩하고 실행 시키는 역할과 함께 여러 다양한 기능을 제공하고 있다.T-Engine 포럼에서는 T-Kernel 이외에도 T-Kernel Standard Extension(이하 SE)과 확장 파일시스템(FAT, CDROM), 표준 디바이스 드라이버(System Disk/Card Manager/Clock/Console), 샘플 드라이버/애플리케이션 소스 등을 일반에 공개하고 있다. 여기서는 시험 삼아 간단하게 SE와 FAT 파일 시스템을 한번 구축해 보도록 하자.T-Kernel SE 구축T-Kernel 입수 방법과 마찬가지로 웹사이트를 통해서 이하의 소스코드를 다운로드 받자.T-Kernel SE version 1.00.00 (tkernel_se_1.00.00.tar.gz)확장 파일 시스템(FAT) version 1.00.00 (extfs_fatfs_1.00.00.tar.gz) T-Kernel/SE (이하 TK/SE)는 T-Kernel 소스에 추가로 들어가게 되는데, SE의 디렉터리 구성 설명과 이하에서 설명 할 구축방법에 대한 설명서가 공개되어 있으니 자세한 내용은 설명서를 참고하기를 바란다.(이하에서 사용하는 환경변수는 T-Kernel 구축 시에 사용한 변수가 적용된다.)1. TK/SE 소스코드 압축 해제 및 복사입수한 TK/SE 압축 소스코드를 적당한 디렉터리에 해제하고, 소스코드 내용을 $BD 에 복사한다.tar zxvf tkernel_se_1.00.00.tar.gzcp -rf tkernel_se_source/줈 $BD2. 확장 파일 시스템(FAT) 압축 해제 및 복사- extfs_fatfs_1.00.00.tar.gz를 압축 해제한다.tar zxvf tske_exfs_1.00.00.tar.gz- $BD/tkse/extension/seio/src/extfs에 복사한다.cp -r extfs_fatfs/seio/줈 $BD/tkse/extension/seio/src/extfs/- $BD/tkse/extension/seio/src/extfs/의 fsinfo.c를 아래와 같이 편집한다.{ SF_STDFS, (FP)sf_attach, sizeof(FS) }, 와 { 0, NULL, 0 } 사이에{ SF_FATFS, (FP)fat_attach, sizeof(FATFS) }, 코드 1행을 추가.- $BD/tkse/extension/seio/src/extfs/의 fsdefine.h 파일의 마지막에 이하의 2행을 추가한다.#include #include “ext_fatfs.h”- $BD/tkse/extension/seio/build/Makefile.common의 40번째 행에 [ext_fatfs.c]를 추가한다.40 행: fsconnect.c fsinfo.c ext_fatfs.c- extfs_fatfs/include/줈를 $BD/tkse/include/sys/에 복사cp -r extfs_fatfs/include/줈 $BD/tkse/include/sys/3. 라이브러리 및 커널 컴파일- T-Kernel 라이브러리 컴파일cd $BD/lib/build/std_sh7727make- SE 라이브러리 컴파일cd $BD/tkse/lib/build/std_sh7727make- 커널 컴파일cd $BD/tkse/build/std_sh7727make kernel_rom.mot 생성 확인 - 설정 정보 컴파일cd $BD/config/tkse/build/std_sh7727make rominfo.mot 생성 확인이로써, SE가 설치된 커널 오브젝트가 생성되었다.4. 커널 설치새로 작성된 rominfo.mot, kernel_rom.mot를 T-Kernel 구축 시와 동일한 방법으로 타깃시스템의 플래시 ROM에 기록한다. 이때 역시 타깃시스템은 T-Monitor로 부팅될 수 있도록 스위치 설정을 바꾼 후 전원을 입력하고, FLLO 명령을 사용하여 플래시 ROM에 기록한 후, TM> bd 명령으로 커널을 실행 시켜 보자.정상적으로 설치가 되었다면, 아래와 같은 메시지를 확인 할 수 있다. (그림 4 참조)비슷한 방법으로 CD-ROM 파일 시스템 및 디바이스 드라이버 등의 각종 샘플 소프트웨어를 간단하게 구축할 수 있다. 독자 스스로 꼭 한번 설치 해보기를 바란다.그림 1과 그림 4를 비교해 보자. 표시되는 메시지의 내용만 다를 뿐, 비슷한 형태가 나타나고 있는 것을 알 수 있다. 그럼 여기서, $BD/kernel 디렉터리를 한번 확인 해보자. T-Kernel 만 구축했을 때 있었던 usermain/에 추가로 usermain_tkse/가 설치되었다는 것을 확인할 수 있다. usermain_tkse/usermain.c를 직접 확인 해 보면 그림 4에서 표시되는 내용의 소스코드가 있다는 것을 확인 할 수 있다.그렇다. TK/SE 상의 프로그래밍 역시 T-Kernel에서와 마찬가지로 최초의 사용자 프로그램은 usermain_tkse/usermain.c를 시작점으로 해서 개발할 수 있다. 차이점이라면, SE가 설치된 환경이라는 것이다(SE의 특징에 대해서는 이전 기사 혹은 TK/SE의 사양서를 참조). 그리고 TK/SE 상의 프로그램은 앞에서 작성한 샘플 프로그램에서 사용된 tk_xxx_xxx 대신, tkse_xxx_xxx 형식의 SE 용 API를 사용하여 각종 프로그램을 작성하게 된다.현재, 포럼에서 공개하고 있는 디바이스 드라이버와 샘플 애플리케이션, 표준 라이브러리 소프트웨어를 추가로 설치할 경우 보다 더 다양한 프로그램 작성도 가능하다.각각의 소프트웨어에 포함된 내용을 아래에 간단히 소개하겠다.샘플 드라이버 : clock, system disk, card manager, console(쉘 프로그램 포함)샘플 애플리케이션 : 프로세스 샘플, 라이브러리 작성 샘플 등표준 라이브러리 : 표준 C 라이브러리 관련(현재는 포럼 A, B 회원에게만 공개)이상으로, T-Kernel, T-Kernel/SE 등을 구축해보고 간단한 프로그램도 작성해 보았다. 물론, 위에서 소개한 내용만 가지고는 실제로 구축을 하는 데는 상당한 어려움이 따를 것이라는 것을 필자도 알고 있다. 최초의 개발환경 구축부터 차근차근 자세히 설명하는 것이 정석이며, 그렇게 하는 것이 아직 T-Engine에 생소한 국내 엔지니어들에게 실질적으로 필요한 정보라는 것을 잘 알고 있다. 하지만, 한정된 지면공간에서 많은 것을 소개하려고 하다 보니 내용의 부실함은 어느 정도 감수해야만 했다. 이점은 독자들에게 양해를 구하는 바이다.필자는 사실 이 글을 통해서 T-Engine 포럼에서 어떤 자료들이 공개되어 있는지? 그런 자료들을 이용해서 무엇을 어디까지 해 볼 수 있는지? 에 대해서 소개하는 것이 주목적이었다. 그리하여, 보다 많은 국내 엔지니어들이 직접 포럼 웹사이트를 통해서 T-Kernel을 입수해서 다양한 테스트를 해 볼 수 있게 하는 하나의 시작점을 제공하고 싶었던 것이다.마지막으로, T-Engine 포럼에서는 T-Engine과 T-Kernel을 이용한 개발에 있어 가이드라인이 될 수 있는 샘플 소스코드와 설명 자료들을 계속해서 공개하고 있다는 점을 알리고 싶다.연재를 마치며처음에는 TRON, T-Engine 그리고 T-Kernel에 대해서 간단히 소개만 하는 글들을 써보자 라는 생각으로 연재를 시작하였다. 하지만, 회가 거듭 될수록 아쉬운 점과 함께 부족한 점을 점점 더 많이 느끼게 되었다. 필자 나름대로는 조금 더 실질적으로 도움이 되는 정보를 제공하고자 노력을 많이 하였으나 그렇지 못했던 것이 이유인 것 같다. 아무튼 그렇게 시작한 연재가 벌써 4회를 끝으로 마무리를 짓게 되었다.국내의 독자들이 T-Engine, T-Kernel에 대해 조금이나마 이전보다 친숙함 느낄 수 있게 되고, 아~ T-Kernel을 사용하기 위해서는 이렇게 하면 되는구나 라는 시작의 문을 제공하는데 도움이 되었다면 그것으로 이번 연재의 목표는 이뤄졌다고 생각한다.끝으로, T-Kernel을 사용하고 싶고 공부해보고 싶어도 대부분의 자료들이 일본어 및 영어 위주로 되어 있으며, 그러한 자료조차도 국내에는 턱없이 부족하여 애로사항이 많다는 얘기를 계속 접하고 있다. 이에 필자는 틈틈이 T-Engine 포럼에서 제공되는 자료들을 본지를 통하거나, T-Engine 포럼 한국 웹사이트(http://www.T-Engine.or.kr)를 통해서 국내 독자들에게 소개한다는 약속을 끝으로 연재를 마치도록 하겠다.
회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지