Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

개요

부트로더는 기기에 커널을 불러오는 공급업체 독점 이미지입니다. 부트로더는 기기 상태를 보호하고 신뢰할 수 있는 실행 환경의 초기화 및 신뢰할 수 있는 루트의 결합을 담당합니다. 또한 부트로더는 실행을 커널로 이동하기 전에 bootrecovery 파티션의 무결성을 확인하고 부팅 상태 경고를 표시합니다.

부팅 작업

부팅을 시작하기 위해 부트로더는 새 이미지를 적절한 파티션으로 직접 플래시하거나 recovery로 무선 업데이트(OTA)에 사용되는 리플래시 프로세스를 시작할 수 있습니다. 일부 기기 제조업체는 멀티파트 부트로더를 만든 후 단일 bootloader.img 파일로 결합합니다. 플래시 시 부트로더는 모든 개별 부트로더를 추출하여 플래시합니다.

부트로더 흐름의 예:

  1. 먼저 부트로더가 로드되고 메모리를 초기화합니다.

  2. A/B 업데이트를 사용하는 경우 부트로더는 부팅할 현재 슬롯을 결정합니다.

  3. 부트로더는 복구 모드를 부팅해야 하는지 확인합니다(업데이트 지원 참고).

  4. 부트로더는 커널 및 램디스크 이미지가 포함된 부팅 이미지를 로드합니다.

  5. 부트로더는 자체적으로 실행할 수 있는 압축된 바이너리로 커널을 메모리에 로드합니다. 그러면 커널은 자체적으로 압축을 풀고 메모리로의 실행을 시작합니다.

  6. 부트로더는 ramdisk 파티션(이전 기기의 경우) 또는 시스템 파티션(최신 기기의 경우)에서 init를 로드합니다.

  7. 시스템 파티션에서 init는 다른 모든 파티션(예: vendor, oemodm)을 시작하고 마운트한 후 코드를 실행하여 기기를 시작합니다.

커널 명령줄

다음 위치에서 커널 명령줄을 연결합니다.

  • 부트로더 명령줄: 부트로더에 의해 결정되는 정적 및 동적 매개변수 집합

  • 기기 트리: 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 값을 전달하여 엔트로피를 제공해야 합니다.

자체 검사 부팅 지원

부트로더를 사용하여 자체 검사 부팅을 구현하는 방법에 관한 자세한 내용은 자체 검사 부팅을 참고하세요.