원문 캡처 · github.com
원문 캡처 · github.com

bootloader는 QEMU의 virt 머신에서 ARM64 커널을 부팅하는 부트로더다. 기기 트리(device tree)로 커널에 부팅 정보를 전달하며, A/B 슬롯과 서명 검증을 지원한다.

VirtIO의 MMIO·PCI 방식, MBR·GPT 파티션, 읽기 전용 EXT2/4·FAT12/16/32 파일시스템을 지원한다. 잠금 모드에서는 Ed25519 서명이 적용된 boot.cfg와 커널 및 램디스크의 SHA-256 해시가 필요하다. 개발자 모드에서는 서명되지 않은 설정을 허용하고 수동 부팅도 할 수 있다. 정책과 최소 설정 버전은 QEMU의 fw_cfg에서 가져오며, 기본 정책은 개발자 모드다. 자동 부팅을 중단하면 직렬 셸에서 수동 부팅과 진단을 할 수 있다.

빌드와 실행에는 make, 호스트 C 컴파일러, aarch64-linux-gnu 도구 모음, qemu-system-aarch64, cryptography가 설치된 Python 3가 필요하다. 테스트 디스크를 만들려면 sfdisk와 mkfs.ext4도 필요하다.

text
make # build binary (build/boot.bin)
make demo # run in QEMU with autoboot
make phone # run verified A/B boot in QEMU
make test # run host unit tests
make smoke # run QEMU integration scenarios

빌드 과정에서 개발용 서명 키를 생성한다. demo와 test 대상은 디스크 이미지, 해시, 서명을 자동으로 준비하며, phone은 잠금 모드에서 실행된다. 통합 테스트는 저장소에 포함된 ARM64 페이로드를 부팅한다. Gentoo 도구 모음을 사용하는 경우 make CROSS=aarch64-unknown-linux-gnu-를 사용한다.

프로젝트는 GPL-2.0 라이선스를 따른다.