부트로더는 기기에 커널을 불러오는 공급업체 독점 이미지입니다. 부트로더는 기기 상태를 보호하고 신뢰할 수 있는 실행 환경의 초기화 및 신뢰할 수 있는 루트의 결합을 담당합니다. 또한 부트로더는 실행을 커널로 이동하기 전에 boot
및 recovery
파티션의 무결성을 확인하고 부팅 상태 경고를 표시합니다.
부팅 작업
부팅을 시작하기 위해 부트로더는 새 이미지를 적절한 파티션으로 직접 플래시하거나 recovery
로 무선 업데이트(OTA)에 사용되는 리플래시 프로세스를 시작할 수 있습니다. 일부 기기 제조업체는 멀티파트 부트로더를 만든 후 단일 bootloader.img
파일로 결합합니다. 플래시 시 부트로더는 모든 개별 부트로더를 추출하여 플래시합니다.
부트로더 흐름의 예:
먼저 부트로더가 로드되고 메모리를 초기화합니다.
A/B 업데이트를 사용하는 경우 부트로더는 부팅할 현재 슬롯을 결정합니다.
부트로더는 복구 모드를 부팅해야 하는지 확인합니다(업데이트 지원 참고).
부트로더는 커널 및 램디스크 이미지가 포함된 부팅 이미지를 로드합니다.
부트로더는 자체적으로 실행할 수 있는 압축된 바이너리로 커널을 메모리에 로드합니다. 그러면 커널은 자체적으로 압축을 풀고 메모리로의 실행을 시작합니다.
부트로더는
ramdisk
파티션(이전 기기의 경우) 또는 시스템 파티션(최신 기기의 경우)에서init
를 로드합니다.시스템 파티션에서
init
는 다른 모든 파티션(예:vendor
,oem
및odm
)을 시작하고 마운트한 후 코드를 실행하여 기기를 시작합니다.
커널 명령줄
다음 위치에서 커널 명령줄을 연결합니다.
부트로더 명령줄: 부트로더에 의해 결정되는 정적 및 동적 매개변수 집합
기기 트리: chosen/bootargs 노드에서
defconfig
:CONFIG_CMDLINE
에서boot.img
: cmdline에서(오프셋 및 크기 관련 정보는system/core/mkbootimg/bootimg.h
참고)PMIC(Power Management Integrated Circuit), 기타 하드웨어 리소스 및 재부팅 매직 인수(
LINUX_REBOOT_CMD_RESTART2
) 메시지에서 밝히는 대로 Android 호환성 정의 문서를 준수하는 표준 재부팅 또는 종료 이유입니다. 구문은 다음과 같습니다.androidboot.bootreason=reason
기기 트리 및 기기 트리 오버레이 지원
부트로더는 기기 하드웨어/제품 버전을 식별한 후 올바른 기기 트리 오버레이 집합을 로드하여 다양한 구성을 지원할 수 있습니다.
주소 공간 레이아웃 무작위 순서 지정 지원
커널 이미지가 로드되는 가상 주소의 무작위 순서 지정을 지원하려면(RANDOMIZE_BASE
커널 구성을 통해 사용 설정됨) 부트로더가 /chosen/kaslr-seed
기기 트리 노드에 있는 임의의 u64 값을 전달하여 엔트로피를 제공해야 합니다.
자체 검사 부팅 지원
부트로더를 사용하여 자체 검사 부팅을 구현하는 방법에 관한 자세한 내용은 자체 검사 부팅을 참고하세요.