RTOS의 포팅이란?
0.
여러가지 MCU를 접하다보면 운영체제의 포팅Porting이라는 과정을 거쳐야 하는 것을 알 수 있다.
freetros.org에서 커널을 다운로드 받아 실행하는 과정에서
RTOS의 포팅이 무엇인지 알고 가야겠다 싶어 메모해둔다..
1.
RTOS의 포팅이란, 특정 RTOS가 기존에 지원하지 않던
새로운 보드나 아키텍처 위에서 동작하도록 만드는 작업이다.
지원되지 않는 새로운 하드웨어에 위에서 RTOS 커널이 동작하게 하려면,
커널 내부의 코드에서
- 스케줄링, 인터럽트 처리방식, 타이머 처리방식
등을 해당 하드웨어의 상황에 맞게
수정하고 보수해줘야 한다.
2.
이러한 포팅 과정에는 크게 ASP 포팅과 BSP 포팅이 있다.
(1) ASP 포팅 - Architecture Support Package
(x86과 ARM, RISC-V 아키텍처와 같이) 각각의 보드가 채택한 아키텍처들이 가진
ISA(명령어 집합), 인터럽트 처리방식(소프트웨어 인터럽트 등, 벡터 테이블, Privileged Mode),
컨텍스트 스위칭 방식, 메모리 제어 방식(가상메모리, MMU)
등에 대해서 수정해서 작동하도록 만드는 과정이다.
-> 즉, ARM, x86, RISC-V 등의 머신이 채택한 아키텍처에 맞게 OS를 수정하는 과정이고
(2) BSP 포팅 - Board Support Package와 같은 특정 보드 관련 포팅이다.
특정보드 상에서 OS가 돌아가기위해서
- 보드초기화과정(부트/리셋 시퀀스), 부트로더 코드,
- 주변 장치(Peripheral)에 대한 드라이버(ex- UART 통신 모듈, I2C 통신모듈에 대한 제어)
- 디바이스 드라이버(내장된 Timer, ADC, GPIO에 대한 제어), HAL
- TrustZone, 보안영역, FPGA와 같은 특수 하드웨어 기능 추가 등
-> 보드 상에서 주어진 하드웨어 자원들을 사용할 수 있도록 OS를 수정 하는 과정이다.
-> HAL과 BSP의 차이가 무엇이냐고 물었을때, 제대로 대답할 수 있겠나?
BSP는 부트로더, 주변기기초기화, 디바이스 드라이버를 다루는 단계
HAL은 Hardware abstraction Layer, BSP보다 한층 위의 추상화단계
3.
포팅, porting은 한국어로 이식, 移植 등으로 번역된다.
기존의 소프트웨어를 다른 플랫폼에서도 동작할 수 있도록 변환하는 것이다.배가 항구(port) 선착장(Platform)에 들어와서 짐을 옮기는 과정을 porting이라고 한 것에서 유래되었을 것으로 추정된다.
4.
포팅은 비디오 게임업계에서 자주 사용되었는데, 가령 80년대의 캡콤의 마계촌은 캡콤의 전용 하드웨어 상에서 제작되었으나당시 유명닌텐도(NES, 패미컴)와 MSX, Commodore 64 등 다양한 하드웨어에서도 돌아갈 수 있도록 포팅되었다.
5.
Java라는 언어가 JVM을 칭찬하는 이유도, 이러한 하드웨어 적인 포팅을 최소화할 수 있어서였다.작성된 소스코드는 C처럼 직업 실행되지 않고, Java Byte코드를 생성하여 JVM상에서 실행되며하드웨어마다 이 JVM만 제대로 설치되어 있다면 어느 머신에서든 소스코드를 실행할 수 있다는 점은 유지보수에 있어서 매우 강점이었기 떄문이다.
ex) 마인크래프트의 Java에디션
6.
최근에는 포팅보다 마이그레이션(migration)이라는 단어를 더 많이 보는 듯하다.포팅이 단순히 같은 버전의 프로그램을 다른 플랫폼에서 실행되도록 만드는 작업이라면,마이그레이션은 기존의 프로젝트를 더 나은 환경으로 옮겨가서 유지,개발하는 것을 총칭하는 듯하다.
7.
호환가능성을 생각해서 표준을 고려하고 프로그램을 설계하는게 좋다.
IEEE나 ANSI같은 곳에서 국제적인 표준을 빠르게 정의해줘야
불필요한 경쟁과 자원소모를 줄일수가 있다.
POSIX,
Portable Operating System Interface은
특정 OS에서 만든 프로그램을 다른 운영체제에서도 쉽게 작동하도록, 쉽게 포팅하도록
만든 국제적인 표준이다.