Прошивки#
Стоковая прошивка Capsula - Linux на aarch64: подписанные
boot/vbmeta/system (squashfs, dm-verity) и неподписанный пользовательский
userdata.
- OTA-пакеты - откуда берётся сток, что внутри, чем полезен сообществу.
- Джейлбрейк - userspace-метод получения root без изменения подписанных разделов.
Цепочка загрузки#
flowchart LR
BootROM["BootROM<br/>(проверка idblock)"] --> idb["idblock @LBA 64<br/>TPL (DDR init) + Boot1"]
idb --> uboot["u-boot + trust (BL31)<br/>выбор слота, AVB"]
uboot --> boot["boot_a/b (ANDROID!)<br/>ядро 4.4.167 + initramfs"]
boot --> init["initramfs<br/>veritysetup"]
init --> system["system_a/b (squashfs)<br/>/rom"]
system --> data["userdata → /data<br/>overlay → /"]
Путь по шагам (заводская прошивка Capsule-14):
- BootROM проверяет подпись idblock (RSA-ключ из eFuse) и читает idblock @ LBA 64.
- TPL (
rk3308_ddr_589MHz_uart2_m1_v2.11) инициализирует DDR и возвращает управление BootROM; Boot1 (miniloader; заводские сборки v1.14 - ранние платы, v1.33 - поздние, она же в OTA 44.90) поднимает SFTL и грузит разделы. Boot1 верифицирует trust per-сборкой: чужой trust →LoadTrust err:-3→ глухой MaskROM - поэтому пара «uboot+trust» непереносима между платами с разными сборками Boot1. - u-boot + trust (BL31) выбирают слот (AVB) и грузят
boot_a|boot_b, формируя cmdlineandroidboot.slot_suffix=_a|_b. - boot - формат
ANDROID!(page 2048): ядро 4.4.167 + initramfs (busybox) + resource.img (DTB). - initramfs парсит слот, монтирует
system_a|_bчерезveritysetup(dm-verity поверх squashfs: данные 0..35 МиБ, дерево 35..43 МиБ,--hash-offset=36700160) и делаетswitch_root. - Система:
/rom- squashfs (ro),/data- userdata (ext2), rw-слой - overlayfsupperdir=/data/overlay/upperповерх/(этим механизмом пользуется userspace-джейлбрейк).
Верифицированная загрузка (AVB)#
- vbmeta_a/b - формат AVB0 (Android Verified Boot 1.1); из OTA: vbmeta_a подписан SHA256_RSA4096 (+AVB ATX metadata), vbmeta_b - SHA512_RSA4096.
- boot каждого слота верифицируется против vbmeta этого слота
(cmdline получает
androidboot.slot_suffix); заголовки vbmeta читаются из публичных OTA-пакетов.
Известные версии (заводские, Capsule-14)#
| Компонент | Версия |
|---|---|
| TPL (DDR init) | rk3308_ddr_589MHz_uart2_m1_v2.11 |
| Boot1 (miniloader) | v1.14 (2019-04-19, ранние платы) / v1.33 (2021-10-28, поздние; в OTA 44.90) |
| u-boot | сборка 2020-07-23 |
| Ядро | Linux 4.4.167 |
| system | squashfs xz 128K |
TODO: changelog версий прошивок (известная точка - 44.90, в ней из
rootfs удалён adbd), детали A/B-обновления по OTA.