본문 바로가기

Embedded System

[임베디드] 부트로더란?

반응형

 


 

안녕하세요.

부트로더(Bootloader)는 컴퓨터나 임베디드 시스템의 기본적인 부팅 프로세스를 관리하는 프로그램입니다. 주된 역할은 시스템이 부팅될 때 초기화되고, 운영 체제 또는 다른 응용 프로그램을 로드하고 실행하는 것입니다.

이러한 부트로더는 가장 먼저 실행되는 것이지만 직접 느껴보기에는 어려움이 있습니다. (아두이노 보드와 같은 경우는 이미 install이 되어 있어요..) 하지만 필수적인 작업인 만큼 한번 알아봅시다.


 

 

부트로더 (Boot Loader)

부트로더

: 마이크로컨트롤러에 프로그램을 다운로드하기 위해서는 일반적으로 ISP 방식을 사용한다. 하지만 아두이노에서는 부트로더를 이용하여 UART 시리얼 방식을 통해 프로그램을 다운로드하는 것이 일반적이다.

양산된 아두이노 보드는 스케치(코드)를 작성하고 컴파일하여 다운로드할 때 별도의 ISP 없이 USB 연결만으로 가능하였다. 이는 아두이노 우노가 ISP 방식이 아닌 UART(Universal Asynchronous Receiver/Transmitter) 시리얼 방식으로 프로그램을 다운로드하여 설치하기 때문이다.

 

  UART 시리얼 방식 역시 전용 변환 장치가 필요하 지만 아두이노 우노에는 ISP와는 달리 UART 시리얼 방식을 지원하기 위해 또 하나의 마 이크로 컨트롤러가 포함되어 있다. 아두이노 우도 보드의 USB 연결 단자 뒤쪽에는 MEGA16U2라는 작은 크기의 칩이 장착되어 있으며, 이 칩이 바로 USB를 통해 전송된 데이 터를 UART 프로토콜을 따르는 데이터로 변환하여 Atmega328의 하드웨어 시리얼 핀으로 전송하는 마이크로컨트롤러이다.

 

그렇기 때문에 아두이노 보드에는 MEGA16U2용 ISP 커넥터와 ATMEGA328용 ISP 커넥터로 2개로 나눠져 있고 전자는 스케치한 프로그램을 보드에 다운로드하기 위한 역할, 후자는 부트로더를 다운로드하기 위한 역할을 한다.

ATmega328의 경우 고정된 메모리 주소는 0번지이 거나 부트로더가 설치된 위치 중 하나이며, 퓨즈를 통해 설정을 통해 선택할 수 있다. 사용자 프로그램은 메 모리의 0번지부터 설치되므로 0번지부터 프로그램이 시작하도록 설정된 경우 아두이노 리셋 버튼이 눌러지면 0번지가 아닌 부트로더가 설치되어 있는 위치에서 프로그램이 실행이 시작 되도록 설정되어 있다.

따라서 리셋 버튼이 눌러지면 아두이노는 부트로더를 실행하고, 실행된 부트로더는 약간의 시간 동안 UART 시리얼 포트를 통해 컴퓨터와 통신을 시도한다. 통신에 실패하면 부트로더는 0번지부터 설치되어 있는 프로그램을 실행하고, 통신에 성공하면 부트로더는 컴퓨터로부터 새로운 프로그램을 다운로드해 0번지부터 프로그램을 설치한다.

프로그램 다운로드 및 설치가 종료되면 부트로더는 새롭게 설치된 프로그램을 수행한다. 부트로더가 아두이노의 특징 중 하나이지만 부트로더를 사용함으로 플래시 메모리의 일부를 사용해야 하며, 구동 시에 컴퓨터와 통신을 위해 약간의 지연이 발생하기도 한다.

이러한 단점을 부트로더를 제거함으로써 가능하다. 부트로더를 제거하기 위해서는 프로그램이 시작되는 위치를 0번지부터 시작하도록 퓨즈 비트를 설정하고, 플래시 메모리 전체를 사용 자가 프로그램이 사용할 수 있도록 설정해야 한다.

부트로더를 사용하지 않도록 설정된 경 우 아두이노에 프로그램을 설치하기 위해서는 반드시 ISP 방식을 사용해야 하며 UART 시리얼 방식으로는 프로그램을 다운로드할 수 없다는 점에 주의해야 한다. 이처럼 부트로더 없이도 Atmega328에 프로그램을 설치하고 실행시킬 수 있지만, 아두이노의 특징 중 하나가 부트로더인 점을 고려할 때 부트로더가 제거된 아두이노를 아두이노라고 부르긴 어려울 수 있다.

 

반응형