114 lines
9.2 KiB
Markdown
114 lines
9.2 KiB
Markdown
# uzbek-plus — Project Aurora: mainline ARM64 Linux на LTE-модеме JZ08AU (MSM8916)
|
||
|
||
Плата **JZ08AU-XPA-7J-R3** («Aurora»): Qualcomm MSM8916, 512 MiB RAM, eMMC 3.64 GiB, LTE-модем, Wi-Fi, дисплей.
|
||
Стоковая прошивка — Android 4.4 (ядро 3.10). Здесь — журнал и воспроизводимые материалы перевода платы на
|
||
**mainline Linux 7.2.7 arm64**, который загружается автономно с eMMC и поднимает LTE через ModemManager.
|
||
|
||
> **Это не прошивка «скачай и залей».** Всё, что касается записи во flash, делалось на одном конкретном экземпляре,
|
||
> по одной стадии, с backup и readback-сверкой. Перед любой записью сделайте и проверьте **полный backup СВОЕГО устройства**
|
||
> (см. [docs/QUICKSTART.md](docs/QUICKSTART.md)). Никогда не прошивайте NV/EFS-разделы (`modemst1`, `modemst2`, `fsg`, `fsc`, `persist`)
|
||
> с другого устройства — там калибровки RF и идентификаторы конкретного модема.
|
||
|
||
## Статус (2026-10-01)
|
||
|
||
| Подсистема | Статус |
|
||
|---|---|
|
||
| ARM64 Linux (7.2.7, PSCI, 4 CPU) | PASS |
|
||
| eMMC (HS200, строго read-only в Linux) | PASS |
|
||
| USB NCM (gadget, 172.16.42.1/24) | PASS |
|
||
| MPSS (modem remoteproc, rmtfs `-r`) | PASS |
|
||
| QMI (rpmsg wwan ctrl) | PASS |
|
||
| BAM-DMUX (wwan0) | PASS |
|
||
| LTE registration | PASS |
|
||
| LTE Internet (DNS/ICMP/HTTP/HTTPS) | PASS |
|
||
| Direct boot с eMMC без хоста (B5) | **PASS / CLOSED** |
|
||
| B6 — lifecycle модема (RAM) | **PASS / CLOSED** |
|
||
| B6P — автозапуск модема из flash (persistent) | **PASS** (см. ниже) |
|
||
| Wi-Fi (WCNSS) | TODO |
|
||
| Router stack (NAT/firewall/VPN) | TODO |
|
||
| Дисплей в Linux | TODO |
|
||
| Батарея / зарядка | TODO |
|
||
|
||
## Рабочая цепочка загрузки (baseline B5)
|
||
|
||
```
|
||
Power → stock SBL1 → DB410c TZ (TZ.BF.3.0) → qhypstub → lk1st (aboot, autoboot)
|
||
→ cache: ext2 + extlinux/extlinux.conf → B6P (golden mm1 kernel/DTB + initramfs с автозапуском модема) → ARM64 Linux → LTE
|
||
Fallback: extlinux не найден / не парсится / не грузится → Android boot image из раздела boot (emmc1 rescue)
|
||
```
|
||
|
||
Текущее содержимое flash на референсной плате (sha256, первые 8 hex):
|
||
|
||
| раздел | содержимое | sha256 |
|
||
|---|---|---|
|
||
| sbl1, rpm, DDR, sec | stock (не менялись) | sbl1 `6a661ec9`, rpm `5a9b857b` |
|
||
| GPT | stock + tz 512K→1M, tzbak перенесён в свободный промежуток @LBA 305184 | primary `6e850a5d`, backup `795952a1` |
|
||
| tz | DB410c TZ.BF.3.0-00714, дополнен нулями до 1 MiB | `8481892f` |
|
||
| hyp | qhypstub, до 512 KiB | `1a963047` |
|
||
| aboot | lk1st (lk2nd 23.1) autoboot, подписан qtestsign, до 1 MiB | `3b8cd266` |
|
||
| boot | emmc1 rescue image (+ нули до 16 MiB) | `e9579f33` |
|
||
| cache | ext2 + extlinux + B6P (golden kernel/DTB/cmdline + B6P initramfs) | `9fea693a` (откат: B5b-образ `409bbb11`) |
|
||
| recovery | lk2nd 23.1 (fastboot) | `0dfa60a0` |
|
||
| modem, NV/EFS, persist, system, userdata | не менялись (Linux монтирует modem FAT только RO) | — |
|
||
|
||
Golden mm1 (Android boot image, для `fastboot boot`): `aurora-mm1.img` sha256 `38c960ef…`, ядро `7.2.7-aurora-bam1 #5`.
|
||
Все хэши целиком: `b5a/SHA256SUMS`, `b5b/SHA256SUMS`, `bootchain-migration/SHA256SUMS`, `linux/*/SHA256SUMS`, [docs/BLOBS.md](docs/BLOBS.md).
|
||
|
||
## B6P status — PASS
|
||
|
||
Implemented:
|
||
- extlinux boot from `cache` (ext2, lk2nd 23.1 extlinux path; fallback — emmc1 из `boot`)
|
||
- custom initramfs overlay поверх точных байтов golden mm1 (заменён только `/init`, добавлены контроллер, сервис, конфиг)
|
||
- modem autostart: `/init` → `/etc/init.d/aurora-modem start` (без OpenRC), конфиг `/etc/aurora/modem.conf`
|
||
- контроллер `aurora-modem start|disconnect|stop|status`: rmtfs `-r -P -s` → MSS → QMI → SIM → online →
|
||
state machine регистрации (registered + PS attached, до 600 s) → udev/dbus/polkit/ModemManager → bearer → /32-маршруты;
|
||
reconnect без перезапуска MSS; stop: bearer → routes → wwan down → MM → BAM-DMUX idle → MSS offline → rmtfs последним
|
||
|
||
Validation:
|
||
- RAM (`fastboot boot` через RESET при включении): 3/3 загрузки, автозапуск, 3/3 reconnect без перезапуска MSS
|
||
- 3/3 cold boots from flash (закреплённый АКБ): LTE registration 3.6–6.9 s, bearer established,
|
||
data connectivity verified (DNS/ICMP/HTTP; HTTPS не требуется — часы 1970 до B7), clean shutdown verified
|
||
- Работает с часами 1970 (RTC/NTP не трогались)
|
||
|
||
Safety:
|
||
- eMMC writes: 0 (все блочные устройства getro=1, rmtfs `-r` держит EFS в RAM)
|
||
- NV partitions unchanged (modemst1/2, fsg, fsc, persist — sha256 до/после каждой загрузки)
|
||
- единственная запись во flash на этом этапе — `cache` с readback-сверкой; остальные разделы сверены с эталонами
|
||
|
||
Материалы: `b6p/` (дизайн, preflight, сборка, скрипты записи/отката, тестовые скрипты), `b6j/` (диагностика B6J–B6N), NOTES.md сессии 29–31.
|
||
|
||
## Known issues
|
||
|
||
- Early boot hangs before Linux startup (внутри SBL1 DDR-init, после `SBL1, End`, в lk1st `target_init`) — до чтения `cache`, не связано с B6P
|
||
- Possible battery/contact instability: один сброс во время остановки модема, PMIC POFF reason = UVLO (under-voltage);
|
||
с закреплённым АКБ не повторялся
|
||
- Fast MSS restart may require investigation: повторная регистрация сразу после stop/start MSS в одном boot может не пройти
|
||
- Единичные случаи (не воспроизведены): bearer поднят, но нет входящего трафика; зависание контроллера после online SET
|
||
- Сигнал Beeline в месте установки маргинальный (RSRQ −13…−20 dB); регистрация иногда идёт через limited / соседние соты
|
||
|
||
## Структура репозитория
|
||
|
||
| путь | что |
|
||
|---|---|
|
||
| [NOTES.md](NOTES.md) | подробный журнал всех сессий (sanitized) |
|
||
| [docs/QUICKSTART.md](docs/QUICKSTART.md) | порядок действий для второго устройства |
|
||
| [docs/RECOVERY.md](docs/RECOVERY.md) | аппаратный EDL, откаты |
|
||
| [docs/BUILD.md](docs/BUILD.md) | как пересобрать lk1st/lk2nd, ядро, DTB, initramfs, boot image, cache-образ |
|
||
| [docs/BLOBS.md](docs/BLOBS.md) | проприетарные/device-specific файлы, которых **нет** в репозитории: имя, sha256, назначение, где взять свой |
|
||
| `linux/` | DTS, фрагменты и полные kernel config, патч, init/скрипты initramfs, списки пакетов + APK sha256 |
|
||
| `lk2nd-build/`, `b5a/` | запись сборки lk2nd/lk1st, config.h diff, скрипты записи/отката B5a |
|
||
| `b5b/` | генератор ext2/extlinux-образа cache, эмулятор сканирования lk2nd (исходники + результаты) |
|
||
| `bootchain-migration/` | preflight, write plan, редактор/валидатор GPT |
|
||
| `b6/` | первый RAM-only прототип контроллера (сессия 28) |
|
||
| `b6j/` | диагностика B6J–B6N: rmtfs-аудит, AT/QMI-снимки, state machine регистрации, харнессы |
|
||
| `b6p/` | persistent-интеграция: контроллер, сервис, конфиг, сборка initramfs/boot.img/cache, эмулятор, запись/откат, тесты |
|
||
| `tools/` | утилиты: UART-логгер, Sahara probe, распаковка boot.img, sanitizer публикации |
|
||
| `logs/` | sanitized логи: UART, QMI, ModemManager, EDL, результаты тестов |
|
||
| `android/` | снимок стокового Android (getprop, gpio, input, leds, …), sanitized |
|
||
|
||
## Что намеренно не опубликовано
|
||
|
||
Полные дампы eMMC и разделов, NV/EFS (`modemst1/2`, `fsg`, `fsc`), `persist`, `userdata`, файлы прошивки модема,
|
||
стоковые SBL1/RPM/TZ/aboot/boot/recovery/system, Firehose-программер, DB410c TZ, собранные бинарники.
|
||
Идентификаторы (IMEI, IMSI, ICCID, eMMC CID/serial, Sahara serial, MAC, номера сот, cookies) заменены на `<PLACEHOLDER>`.
|
||
Как это сделано — `tools/publish-sanitize.py`; значения идентификаторов в репозиторий не попадают.
|