uzbek-plus/README.md
q dddc11e57b B8: Wi-Fi (WCNSS/Pronto + wcn36xx + hostapd test AP) and persistent B8F cache
B8A audit, B8B Pronto remoteproc (fixed wcnss_mem 0x8b600000), B8C stock NV
(fixes Pronto startup watchdog), B8D cfg80211/mac80211/wcn36xx -> phy0/wlan0,
B8E wlan0 up + WPA2/CCMP test AP, B8F eMMC cache 857c9c30 with aurora-wifi
autostart: 3/3 class-A cold boots, AP up 76-94 s after power-on, LTE unaffected.
PSK, NV and PSK-bearing images are not published.
2026-10-02 22:55:20 +03:00

129 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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-03)
| Подсистема | Статус |
|---|---|
| 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 / CLOSED** |
| B7 — время от сети (DMS/NITZ, без RTC) | **PASS / CLOSED** |
| Wi-Fi (WCNSS/Pronto + wcn36xx, тестовая AP WPA2, автозапуск из flash) — B8 | **PASS / CLOSED** (см. ниже) |
| 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 → B8F (ядро b8d + DTB b8b + initramfs: модем, время, Wi-Fi) → ARM64 Linux → LTE + Wi-Fi AP
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 + B8F (ядро 7.2.7-aurora-b8d, DTB b8b, initramfs B7C + Wi-Fi) | `857c9c30` (откат: B7C `14fe453a` → T4 `9d3bc890` → B6P `9fea693a`) |
| 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).
## B8 status — Wi-Fi PASS (2026-10-03)
- Pronto (WCNSS) через upstream `qcom_wcnss` remoteproc: штатный `wcnss.mdt` из RO-FAT `modem`, `wcnss_mem` фиксирован 0x8b600000/6 MiB,
Iris `qcom,wcn3620` (XO 19.2 MHz подтверждён прошивкой); штатный NV `WCNSS_qcom_wlan_nv.bin` из `persist` своего устройства (не публикуется).
Без NV Pronto падает по `Watchdog startup timeout` каждые ~46 с.
- Ядро: `QCOM_WCNSS_PIL`, `CFG80211`, `MAC80211`, `WCN36XX` built-in → `phy0` (2.4 GHz, AP/managed) → `wlan0`.
- Сервис `aurora-wifi`: после LTE START OK → WCNSS → wlan0 → hostapd 2.11 (тестовая AP, WPA2-PSK/CCMP, канал 6). PSK в репозитории нет (`wifi.conf.in`).
- 3/3 холодных загрузки с eMMC без ввода: AP через 76–94 с после включения, телефон подключается и держит соединение, LTE не страдает.
- Открыто: задержка кадров к клиенту в power save (у wcn36xx нет `set_tim`), нет regulatory.db (world `00`), MAC `02:…` из DT lk2nd.
- Нет DHCP/NAT/DNS/firewall — это следующий этап (router stack). Материалы: `b8/`, `logs/b8/`, NOTES.md сессия 36.
## 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, эмулятор, запись/откат, тесты |
| `b7/` | B7: время от сети (DMS/NITZ), проверка по NTP, cache B7C |
| `b8/` | B8: Wi-Fi — аудит, WCNSS/NV, wcn36xx, hostapd, сервис aurora-wifi, cache B8F (запись/откат/эмулятор) |
| `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, собранные бинарники,
Wi-Fi NV (`WCNSS_qcom_wlan_nv.bin`), PSK тестовой AP и образы с ним (B8F initramfs/cache).
Идентификаторы (IMEI, IMSI, ICCID, eMMC CID/serial, Sahara serial, MAC, номера сот, cookies) заменены на `<PLACEHOLDER>`.
Как это сделано — `tools/publish-sanitize.py`; значения идентификаторов в репозиторий не попадают.