부트로더
우리가 사용하는 모든 기기에는 OS 들이 들어있다. 이 기기들의 OS들이 실행되기 위해서 필요한 것이 부트로더 이다!
부트로더란?
부트로더는 운영체제가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위한 목적을 가진 프로그램을 말한다.
즉, 메모리, 하드웨어(네트워크, 프로세서 속도, 인터럽트), 코드/데이터/스택 영역 설정 및 초기화, 커널 로더와 커널 이미지를 로딩, 커널 로더를 실행하여 커널 이미지가 실행되도록 한다.
부트로더의 특징은 뭘까요?
부트로더는 하드웨어 의존성이 강한 코드들로 되어 있고(대부분 어셈블리언어로 작성 됨) 프로그래머는 프로세서 구조(Clock, UART, Ethernet 등), 특징, 사용법에 대해 잘 알고 있어야 작업 가능하다는 것입니다.
GRUB : GRand Unified Bootloader, GNU 프로젝트의 부트로더이며, 현재 대부분의 리눅스 배포판에서 사용, a.out와 ELF 포멧 지원, BIOS에서 인식되는 모든 장치에 액세스 가능합니다.
- U-BOOT : Universal BOOTloader, 주로 PowerPC와 ARM 임베디드 시스템에서 사용되는 부트로더이며 오픈소스

/arch : 주로 아키텍처에 의존저인 코드와 라이브러리, u-boot에서 제일 처음 시작하는 start.S 가 있음
/board
/common
/drivers
/lib
위주로 살펴보는게 좋음
여러 폴더중에 특히 유심히 봐야할 부분은 arch, board, common, drivers, lib 폴더.
각 폴더에 어떤 기능을 하는 코드들이 있는지 간단히 알아보면...
- arch : 주로 아키텍처(powerpc, x86, mips, arm 등..)에 의존적인 코드와 라이브러리, U-BOOT에서 제일 처음 시작하는 start.S가 있음.
- board : 보드와 관련된 코드. 보통 보드 제조사가 자사의 보드에 대한 코드들을 만들어 올림.
- common : 아키텍처에 독립적인 코드들과 각종 명령어들 존재.
- disk : 디스크드라이버와 파티션 관련 코드.
- doc : U-BOOT 관련 문서
- drivers : gpio, i2c, pci, serial, sound, usb와 같은 외부 장치의 드라이버
- examples : 부트로더상에서 실행시킬 수 있는 예제 코드
- fs : fat, yaffs2와 같이 U-BOOT에서 지원하는 파일 시스템 관련 코드
- include : 헤더 파일
- lib : 모든 아키텍처와 관련된 라이브러리
- net : 네트워크 관련 코드
- post : Power On Self Test
- tools : U-BOOT 이미지나 S-Record(부트로더를 직접적으로 플래시에 저장하기 위한 이미지) 이미지를 생성하기 위한 툴
출처
https://m.blog.naver.com/neos_rtos/220152283698