BOBO's Note

Bare Metal 본문

Embedded System

Bare Metal

bobo_hee 2020. 6. 16. 22:52

Bare Metal

Bare Metal은 운영체제가 설치되어 있지 않은 컴퓨터 하드웨어를 의미한다. Bare Metal Programming은 운영체제 없이 바로 하드웨어를 제어하는 형태의 프로그래밍이다.

 

임베디드 시스템에서는 운영체제를 구동하는 것 자체도 오버헤드가 큰 작업일 수 있다. 또는 특정 하드웨어를 오직 한 애플리케이션에서만 제어하기 때문에 굳이 OS로 자원을 관리해줄 필요가 없는 경우도 있다. 이런 경우, 베어 메탈 프로그래밍을 통해 하드웨어를 제어하는 것이 더 좋다.

 

베어 메탈 프로그램을 이미지로 만들어서 하드웨어에 포팅한다. 부팅 단계에서 커널 이미지 대신에 우리가 개발한 이미지로 실행되도록 한다(이런 관점에서 커널도 일종의 베어 메탈 프로그램이라 볼 수 있다)

 

예제 코드

베어 메탈 프로그래밍에서 C 프로그램을 개발하더라도, main() 함수를 실행시킬 수 있도록 전처리를 직접 해주어야 한다. 원래는 운영체제가 이러한 기능을 대신 해주었지만, 베어 메탈에서는 운영체제가 없기 때문에 개발자가 직접 어셈블리를 이용해 개발해주어야 한다. 기본적으로 두가지를 처리해주어야 한다.

  1. C 프로그램이 사용할 스택 세그먼트의 주소로 sp를 지정해주어 한다.
  2. main 함수로 jump 한다.

코드로 표현하면 다음과 같다. ARM 아키텍처를 사용하는 라즈베리파이 3B+를 기준으로 한다.

.global _start

_start:
    mov sp, #64*1024*1024
    bl my_main
    
hang:
    b hang

우선 startup 코드에 해당하는 _start 레이블을 해당 파일의 외부에서도 찾을 수 있게 .global 키워드를 붙여준다. sp에 64MB 주소를 저장하고, c_main() 함수로 jump했다가 끝나면 다시 돌아온다. 그리고 hang 레이블에서 무한루프를 돈다. 무한루프를 도는 이유는 임베디드 시스템이기 때문이다.

 

 

'Embedded System' 카테고리의 다른 글

Linux에서의 전력 관리  (0) 2020.06.17
GPIO  (0) 2020.06.04
Interrupt Handler  (0) 2020.06.03
Kernel Module과 Device Driver  (0) 2020.05.29
Android Boot Sequence  (0) 2020.05.26
Comments