2.8 KiB
2.8 KiB
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 IMEM0x08600944!=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
- Добить баннер (см. свежий in_asm-хвост).
- Заменить стаблеты настоящим PBL (нужны дампы с живого тела!).
- UEFI (img3, EDK2) — отдельный фронт после SBL1.