sbl bringup: stublets, slots, maze, ffu-ref, b10 chain, docs

This commit is contained in:
SashegDev
2026-09-07 13:10:38 +00:00
parent 11facdfb45
commit c7e95b4194
6 changed files with 430 additions and 4 deletions
+43
View File
@@ -0,0 +1,43 @@
# SBL1 BringUp — статус (2026-09-07)
Цель: выполнить оригинальный SBL1 (RM-1127) в QEMU до баннера `SBL1, Start` на UART.
## Что работает
- Машина `saimaa` (`qemu/saimaa.c`, QEMU 8.2.2 на zern): Cortex-A7×4,
DDRLOW/OCIMEM/IMEM/SMEM/RPM/mystrom, UARTDM-стаб, SDHCI+eMMC 8GiB,
VFP/NEON вкл (CPACR+NSACR+FPEXC), null-page trap, fault-tolerant векторы.
- eMMC-образ с реальной GPT RM-1127 (33 раздела, `tools/mkimage.py`).
- FFU-разбор (`tools/ffu_parse.py`, RKH/MSM/OEM/PlatformID, GPT33).
- `.edp`-нарезка ELF (`tools/edp_carve.py`, 10 образов, `fw/sbl/` в .gitignore).
- `tools/sbl_patch.py` — воспроизводимо генерирует img0_bl..b10.elf из img0.elf.
- Стаблеты компенсации pop (`qemu/stublets.S` → 0x08062000): чинят SP,
повторы попадают в те же слоты. Слоты в `saimaa_machine_init`.
- Указательный maze (`0x08062100`) + scratch (`0x08070000`) для struct-цепочек.
- Трассировка: `-d in_asm,cpu,guest_errors,int` + GDB (только чтение! `continue`
в batch виснет — использовать `interrupt`+`detach`).
## Найденное
- `sbl_main` (Thumb) = `0x802f63e`, баннер `SBL1, Start` зовётся из `0x802f6ae`
через `bl 0x8016320`. Poll IMEM `0x08600944` != `0x53444247` (выходит при 0).
- В `.edp`-копии вызовы `blx imm` ведут в Thumb-код (на HW тоже; QEMU уходит
в ARM → патчим в `bl`, см. sbl_patch.py). Часть вызовов off-by-2/4
(таблица `0x8013aa8`, `bl 0x8018a78``0x8018a7c`).
- FFU-копия SBL1 — другая сборка тех же исходников (структура та же, `bl`
вместо `blx`, полные фреймы). Используется как эталон.
- PBL-контекст (r4-r12) фабрикуется машиной; таблицы собираются частично.
- Текущий фронтир (b10 + canonical scaffold): ~20 уровней init, падеж
в районе `0x80079xx` (див switch по мусорным флагам) — см. свежий трейс.
## Запуск
```
./tools/sbl_patch.py fw/sbl/img0.elf /tmp/p
~/qemu-src/qemu-8.2.2/build/qemu-system-arm \
-M saimaa,sbl1=/tmp/p/img0_b10.elf,sblmain=0x802f63f -m 512 \
-display none -monitor none -serial file:/tmp/uart.log \
-drive file=/tmp/emmc-test.img,if=sd,format=raw
```
## TODO
1. Добить баннер (см. свежий in_asm-хвост).
2. Заменить стаблеты настоящим PBL (нужны дампы с живого тела!).
3. UEFI (img3, EDK2) — отдельный фронт после SBL1.