펌웨어는 하드웨어와 애플리케이션/운영 체제 레벨의 소프트웨어 사이의 인터페이스를 제
공하는 하위 레벨 소프트웨어이다. 하드웨어만으로 기능을 구현하게 되면 기능 변경 및
추가를 하는 것이 불가능하기 때문에 하드웨어 내부의 제어 부분에 저장 공간을 만들어
그곳에 논리 회로의 기능을 보강하거나 대신할 수 있는 프로그램을 넣을 수 있게 한 것이
펌웨어(firmware)이다. 펌웨어는 펌 소프트웨어의 줄임말로 하드웨어(hardware)의 기능 중
일부를 소프트웨어(software)로 구현한 것이다. 하드웨어와 소프트웨어의 중간 형태이므로
펌이라고 표현하고 있다.
펌웨어 : OS가 없는 상태에서 하드웨어를 제어하는 C 프로그래밍
펌웨어 개발자가 임베디드 개발자 보다 하드웨어 쪽에 더 가까움
실시간 운영 체제(RTOSRealtime OS)나 임베디드 운영 체제(ex:임베디드 리눅스ㅊ)를 이용한 것을 임베디드 시스템이라 부른다.
임베디드 시스템에서 부트로더(bootloader)는 하드웨어 초기화와 운영 체제가 동작할 수 있는 환경을 구성하며 PC의 BIOS와 같다.
부트로더의 대표적인 기능
(1) 하드웨어 초기화
메모리 설정과 CPU 클럭 설정, GPIO 설정, 시리얼 설정 등과 네트워크의 MAC 주소, 이더넷 포트 설정 등을 한다.
(2) 메모리 복사
커널 이미지, 램디스크 이미지, 부트로더 자신 등을 플래시 ROM에서 SDRAM으로 복사한다.
(3) 커널 부팅
커널 이미지를 메모리로 복사해 압축을 풀고 실행시키면 부트로더는 수명을 다하게되며, 제어권은 커널이 갖는다.
(4) 명령어 지원
사용자가 부트로더의 기능을 사용할 수 있도록 명령어로 입력 받아 수행한다. 명령어로는 RAM에 커널을 부팅시키는 것, RAM에 부트로더를 재시작 시키는 것, bootp를 이용해 IP를 가져오는 것, 호스트와 클라이언트에 IP를 설정하는 것, 클라이언트에 MAC주소를 설정하는 것, tftp로 이미지를 다운로드 시키는 것, 특정 메모리 주소의 값을 읽거나 값을 저장하는 것, 이전에 다운로드된 이미지를 퓨징하는 것 등이다.
(5) 디버깅 모드
부트로더의 동작 상태를 모니터링하면서 에러 부분을 찾아낼 수 있으며 전문적인 디버깅을 위해서는 장비나 소프트웨어가 필요하다.
라즈베리파이 부팅순서
(1) 보드에 전원이 들어오고 GPU가 활성화된다.
(2) SoC내 ROM에 있는 첫 번째 부트로더(firmware)를 읽어 들인다.
(3) 첫 번째 부트로더가 SD 카드에 있는 두 번째 부트로더(bootcode.bin)를 호출한다.
(4) 두 번째 부트로더가 SD 카드에 있는 config.txt를 읽고 실행한다.
(5) 두 번째 부트로더가 세 번째 부트로더(start.elf)를 호출 및 실행하여 ARM Core를
활성화한다.
(6) ARM Core가 활성화되면 네 번째 부트로더(kernel.img)를 호출 실행한다.
그래서 라즈베리파이를 구동하는 데 필요한 최소 파일은 다음 3개이다. 이 중에서
start.elf는 두 가지 변형이 있는데 start_cd.elf는 기존 start.elf의 Cut-Down 버전이고,
start_x.elf는 start.elf의 테스트 버전이다.
------------------
bootcode.bin
start.elf
kernel.img
------------------
'임베디드' 카테고리의 다른 글
오픈소스 HW , MCU , 임베디드, 펌웨어 (0) | 2021.01.03 |
---|---|
NCS 하드웨어분석 (0) | 2020.11.03 |
라즈베리파이 설치 (0) | 2020.10.19 |
임베디드 애플리케이션 분석 Use Case, actor (0) | 2020.09.04 |
200901 임베디드 애플리케이션 분석 - 풀업, 풀다운 저항 (0) | 2020.09.01 |