Porting - 광의, 협의-
What is Porting?
What is Porting
• Porting의 광의
– 한 시스템에서 구현되고 있는 기능을 다른 환경의 시스템에서도 같은 기능을 수행하도록 조정해 주는 작업
• Ex) 집에서의 밥짓기와 야외에서 밥짓기의 차이
• Porting의 협의
– 한 시스템에서 사용되는 프로그램을 다른 시스템에서도 사용 할 수 있도록 시스템에 의존적인 코드만을 바꾸는 작업
• Ex) 8051의 LED 제어 프로그램을 ATmega128에 이식 시, 플랫폼에 의존적인 assembly code만 수정하고 C코드는 그대로 놔두는 것 (C언어의 높은 이식성)
O/S Porting
• OS를 이루는 대부분의 코드들은 이식 가능한 C언어로 구현
• CPU마다 다른 구조의 아키텍쳐 (레지스터, 인터럽트, 타이머 등)을 가지고 있으므로 이 부분을 사용하는 코드들을 바꾸면 Porting 가능
• OS가 포딩이 되면 OS 위에서 동작하는 어플리케이션 프로그램은 플랫폼 독립적으로 수행 가능
• OS Porting을 수행하기 위해서는 시스템의 하드웨어 구조, 컴파일러, 프로그래밍에 깊은 지식이 필요
O/S Porting
What need for O/S Porting
• Host 측 필요장비
– Host와 Target이 PC인 경우 (개발과 테스트를 같은 플랫폼 상에서 수행)
• 컴파일러, 어셈블러, OS Code, Application Code 등이 필요
– Host가 PC이고, Target이 독립적인 다른 시스템인 경우
• 크로스 컴파일러 혹은 PC에서 동작하는 Target 프로세서의 컴파일러를 구한다.
• 개발 환경에서 만들어진 이미지 파일을 Target에서 동작하는 Binary Image의 형태와 주소를 갖도록 바꿔주는 프로그램인 Binary Utility를 구한다.
• (Serial Data를 처리하여 보여 줄 수 있는 통신 에뮬레이터를 구한다.)
Ex) 이야기, 새롬 데이터맨, Teraterm 등
What need for O/S Porting
• Target 측 필요 장비
– JTAG
– 플랫폼
• O/S Porting을 위한 약간의 메모리
• O/S를 동작시킬 Processor
• 기타 원하는 작업을 위한 디바이스
What need for UC/OS-II Porting
• 프로세서가 재진입이 가능한 코드를 생성하는 컴파일러
• C에서 인터럽트를 제어 할 수 있어야 함
• 프로세서는 인터럽트를 지원하거나 비슷한 기능을 수행 할 수 있어야 함
• 프로세서가 일정한 Timer 기능의 인터럽트를 제공 할 수 있어야 함
• 프로세서는 하드웨어적, 소프트웨어적 Stack을 지원 해야 함
• Stack이나 Memory에서 SP와 다른 CPU 레지스터를 불러오고 저장하는 Instruction을 지원해야 함
• Data Types의 설정이나 critical section에 접근하기 위한 매크로로 사용되는 인터럽트 금지와 해제의 구현에 주의해야 함
UC/OS-II Software Architecture
Porting for UC/OS-II on ATmega128
• http://micrium.com/page/home 접속 (UC/OS-II의 제작자 홈페이지)
• 메뉴 중 Downloads → Ports 선택 (H/W 종속적인 코드를 지원 : 포트)
• Atmel -> AVR 선택 (Atmega 카테고리에는 IAR 컴파일러 코드가 있음)
Porting for UC/OS-II on ATmega128
• Email과 Password 입력 (Email – 354121@naver.com, PSW : hm354121)
• 압축 파일의 압축을 푼다.
Porting for UC/OS-II on ATmega128
• 아래 다섯 개의 파일을 새 폴더 port에 복사 한다.
• STK500 폴더의 아래 파일을 새 폴더 test에 복사 한다.
Porting for UC/OS-II on ATmega128
• UC/OS-II Kernel을 구한다.
– MicroC / OS-II real time Kernel 부록 CD v2.5 (에어컨, JEAN J. LABROSSE)
– http://micrium.com/page/downloads/os-ii_evaluation_download v2.90
• Products -> UC/OS-II (kernel) -> 좌측 UC/OS-II Evaluation Download
• 아래 파일을 새 폴더 source에 복사 한다.
Porting for UC/OS-II on ATmega128
• UCOS-II라는 새 폴더를 만들고 커널이 들어있는 source 폴더와 port 파일이 들어 있는 port 폴더를 이동 시킨 후, UCOS-II 폴더를 C:\로 이동한다.
• 예제 어플리케이션이 있는 test 폴더를 C:\로 이동한다.
Porting for UC/OS-II on ATmega128
• Kernel 버전에 따라 예제 어플리케이션을 선택해야 한다.
– 확장자가 252로 끝나는 파일은 2.52 버전의 kernel을 위한 파일이다.
– 이 파일을 쓰기 위해서는 .252를 지워주면 된다.
– 그 외의 파일들은 2.90 버전의 kernel을 위한 파일이다.
• Port 파일 및 어플리케이션 파일의 수정을 위해 Winavr에 포함되어 있는 Winavr 노트패드를 실행시킨다.
Porting for UC/OS-II on ATmega128
• File – new – project 를 실행하여, test 폴더에 새로운 이름으로 프로젝트를 생성한다.
• 생성된 프로젝트에 이전에 복사한 source, test, port의 파일을 모두 불러온다.
– 프로젝트 이름에 우 클릭을 한 후, add new folder 선택
– Add files를 선택하여 파일을 import 해 온다.
• UC/OS-II의 소스 파일들의 경로를 수정하기 위해
makefile을 연다.
– Makefile의 UCOSDIR과 PORTDIR을 아래와 같이 수정 한다.
– 이 후, DIRAVR을 Winavr이 설치 된 폴더로 수정 한다.
Porting for UC/OS-II on ATmega128
• 그 다음, os_cfg.h 파일을 열어 CPU_CLOCK_HZ를 자신의 환경으로 수정한다. (연구실 보드는 모두 16Mhz)
• Test.c 파일의 AvrInit() 함수의 UBRR0L을 수정하여 적당한 Baud Rate를 설정한다.
– Kernel 버전이 2.52라면 Baud rate를 19200 이상으로 설정 한다. (버그 때문)
Porting for UC/OS-II on ATmega128
• 마지막으로 uCOS-II.c 파일을 열어 아래와 같이 UC/OS-II의 소스 파일들을 대소문자를 잘구분하여 include 한다.
• WinAVR의 makeall을 이용하여 컴파일을 하면 test.hex 파일이 생성 된다.
Conclusion
• UC/OS-II를 Porting하기 위해 필요한 작업
– 기본적으로 Target에 프로그램을 작성 및 Download 할 수 있는 환경 설정
– OS 소스들을 구함
• OS는 하드웨어에 상관없이 수행되는 일종의 알고리즘과 같은 것
• OS는 App와 같이 컴파일 되므로 이들 사이의 함수 연결이라든지 TASK가 OS를 이용 할 때의 제약들을 정의하기 위해 Configuration이 필요
(UC/OS-II의 OS_CFG.h , INCLUDES.h)
– OS에서 이용하는 하드웨어 자원들의 경우 접근하는 방식이 시스템마다 다르므로 시스템에 맞추어 설정해야 함 (port 파일을 구하는 것으로 대체했음) (OS_CPU.h , OS_CPU_A.asm , OS_CPU_C.c)
• 이 Processor Dependent Code를 잘 바꾸어 주는 것이 O/S Porting의 전부
• UC/OS-II에서는 위의 세 파일에 Interrupt, Timer, Context Switch 등을 구현
– App의 작성과 OS와 App를 같이 컴파일하기 위한 makefile의 작성
– 실제 target에 Download
'PPT' 카테고리의 다른 글
조선후기 널리 퍼진 종교-동학, 천주교 :: 흥선대원군 (0) | 2015.02.13 |
---|---|
Gagne의 교수 설계 이론 문제 (0) | 2015.02.10 |
물류기업의 중국 내수 물류 시장 진출전략 (0) | 2015.02.03 |
삼차방정식과 사차방정식 (0) | 2015.01.31 |
향수 광고의 역사 - The history of perfume advertisements (0) | 2015.01.27 |