uzbek-plus/NOTES.md
q 105bef466a Project Aurora: mainline ARM64 Linux on JZ08AU (MSM8916) LTE modem
Sanitized research log, build/reproducibility docs, DTS, kernel configs,
patches, initramfs sources, bootchain migration plans and test logs.
B5 direct boot PASS; B6 modem lifecycle in progress.
No dumps, NV/EFS, vendor firmware or device identifiers included.
2026-09-30 17:23:18 +03:00

117 KiB
Raw Blame History

Aurora — отчёт сессии 1 (2026-09-29)

1. Hardware

  • SoC: MSM8916 (Sahara MSM_ID 0x007050e1), 4×Cortex-A53, Android 32-bit.
  • RAM: 512 MB (MemTotal 403480 kB; LK/QCDT выбирает "MSM 8916 512MB MTP", board-id 8/0x100).
  • eMMC: Hynix H4G2a, CID <EMMC_CID>, PSN 0x<EMMC_SERIAL>, 3 909 091 328 B = 7 634 944 секторов (у JZ02: 3 875 536 896 B — другая eMMC).
  • PMIC: PM8916 (linear charger + VM-BMS, MPP4 current sink → lcd-bl, vibrator node enabled).
  • Батарея: присутствует, профиль palladium_1500mah (стандартный MTP-профиль, вероятно не откалиброван под реальный АКБ).
  • Идентификаторы: fastboot serialno <EMMC_SERIAL> = eMMC PSN, не серийник чипа. Sahara chip serial = 0x<SAHARA_SERIAL>.

2. Android / kernel

  • Android 4.4.4 KTU84P, msm8916_32_512-user … eng.richal.20260709 test-keys, product/model MIFI.
  • Kernel: Linux 3.10.28 (richal@msa2) gcc 4.7 #1 SMP PREEMPT Tue Apr 14 2026.
  • cmdline (из boot.img): console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci
  • Baseband: PM.1.0.c7-00193-M8916EAAAANVZM-1.

3. Root / adbd

  • uid=2000(shell), ro.secure=1, ro.debuggable=0, su нет. dmesg (klogctl) и /proc/cmdline недоступны. adb root не проверялся (user-build → бесполезно).
  • adb serial = 0 (как на JZ02).

4. Fastboot

  • Минимальный LK: getvar почти пустой. devinfo (последний сектор aboot): ANDROID-BOOT!, is_unlocked=0, is_tampered=0, charger_screen_enabled=1 — как у JZ02, bootloader, вероятно, locked. abootbak без devinfo.

5. EDL

  • adb reboot edl → 05c6:9008 — работает.

6. Sahara

Aurora JZ02
Sahara ver 2 (min 1) 2
HWID 0x007050e100000000 (OEM 0, MODEL 0) тот же
PK_HASH cc3153a80293939b90d02d3bf8b23e0292e452fef662c74998421adad42a380f тот же
Serial 0x<SAHARA_SERIAL> 0x<JZ02_SAHARA_SERIAL>

PK_HASH = публичный тестовый root Qualcomm ⇒ secure boot не зафьюжен (PBL принимает любой тест-подписанный программер).

Инцидент: мой первый probe (tools/sahara_probe.py) отправил SAHARA_EXEC GET_SBL_VERSION — PBL его не поддержал, после этого modeswitch не вернул HELLO и PBL завис. Плата была восстановлена пользователем (перезагрузка в Android). Хранилище не затронуто. Вывод: только стандартный edl flow; не слать неподдерживаемые exec-команды.

7. Firehose

  • Файл: firehose/007050e100000000_394a2e47cf830150_fhprg_peek.bin
  • SHA256: 53f193500c03248f0d671ab57bfe9ca8a42967e97f28403294b4b3f854075aca
  • Источник: bkerler edl Loaders, qualcomm/factory/msm8916/ (тот же файл, что на JZ02).
  • ELF32, подписан цепочкой QUALCOMM (тестовые ключи), Sahara принял, TargetName=MSM8916, MemoryName=eMMC, Version=1.
  • READ: подтверждено (две независимые вычитки совпали). WRITE: не тестировалось. RESET: на JZ02 ненадёжен — после работы отключать питание вручную.
  • Использованы только команды: printgpt, rl, rf.

8. GPT

Primary и backup: CRC header/entries OK, 28 слотов, записи идентичны, backup header на последнем LBA (7634943). Таблица совпадает с данными Android (/proc/partitions + by-name). Полная таблица: MANIFEST.md. Неразмеченное: LBA 34..131071 (до modem), 305170..393215 (между splash и DDR) — входит в full-emmc.bin.

9. Backup

  • rl (все разделы) и rf (вся eMMC) — две независимые вычитки, 19:24–19:33 MSK.
  • 27/27 разделов bit-identical между rl и rf, размеры = GPT. Хэши: partitions/SHA256SUMS, dumps/full-emmc.sha256.
  • Две копии: ноутбук + эта папка (sha256 проверены после копирования).

10. Bootchain (ELF-разбор, bootchain/elfinfo.txt)

образ версия сравнение с JZ02
sbl1 = sbl1bak BOOT.BF.3.0.1-00019 (HAAAANAZA) раздел целиком идентичен
rpm = rpmbak RPM.BF.2.0.1-00027 ELF-образ идентичен; раздел отличается только мусором после конца образа
tz / tzbak TZ.BF.2.2-2.2.0026 ELF-образ идентичен. В хвосте tz — остатки старого TZ.BF.2.5.C6-00025 (не исполняется)
hyp / hypbak (hyp из TZ.BF.2.2) ELF-образ идентичен; хвост hyp — остатки TZ.BF.2.5.C6 hyp
aboot = abootbak (кроме devinfo) LK, сертификат 2026-07-09 ДРУГОЙ (JZ02: 2025-11-03). Добавлены SPI-панели st7735s/nv3023a, "Config SPI PANEL", charger mode
DDR, sec, splash — разделы идентичны JZ02
modem MPSS.DPM.1.0.C7-00193, WCNSS CNSS.PR.1.4.2.C4-00084 те же сборки; образ раздела отличается (содержимое FAT не сравнивалось)

Вывод: SBL1/RPM/TZ/HYP де-факто те же, что stock JZ02. Отличается только LK (aboot). Не выводить отсюда, что DB410c TZ/qhypstub/lk1st от JZ02 подойдут без проверки — это только аналитический факт.

11. boot / recovery (bootchain/boot|recovery/info.txt)

  • Android boot image v0, page 2048, kernel @0x80008000, ramdisk @0x81000000, tags @0x80000100.
  • Ядро: zImage 32-bit, одно и то же в boot и recovery (sha256 8796a9cd…), без appended DTB.
  • DTB: QCDT v2 (dt_size 0x46800), 8 записей → 2 уникальных DTB, одинаковые в boot и recovery. platform_id 0xce/0xf8/0xf9/0xfa, variant 8 (QRD/MTP), subtype 0 (dtb_00, "MSM 8916 MTP") и 0x100 (dtb_01, "512MB MTP").
  • ramdisk: boot 534088 B, recovery 1071013 B (не распакованы — следующий шаг).

12. DT / board (dt/dtb_01.dts — активный для 512MB)

  • model "Qualcomm Technologies, Inc. MSM 8916 512MB MTP", compatible qcom,msm8916-mtp.
  • Дисплей: ST7735S "wx144" 128×128, command mode, RGB565 (bpp 16), 20 fps, cont-splash.
    • интерфейс: SPI через MDSS SPI (qcom,mdss-spi-display), BLSP1 QUP4 spi@78b8000 (BAM), клиент 16 МГц.
    • reset GPIO 118, D/C GPIO 116 (disp_rst_n / disp_dc в /sys/kernel/debug/gpio).
    • vdd = L17 2.85 В, vddio = L6 1.8 В.
    • подсветка: PM8916 MPP4 current sink (lcd-bl, 40 мА, manual). В Android также lcd-backlight (mdss).
    • альтернативная панель в DT/LK: NV3023A "jz05" 128×128 SPI (второй вариант поставки).
    • fb0: mdssfb_d0000, "spi panel", 128×128, virtual 128×256, 32 bpp, stride 512.
    • тачскрина нет.
  • Кнопки: PON power (qpnp_pon), key_f2 GPIO37 (active-high, KEY_F2), key_f3 GPIO107 (active-low, KEY_F3). Обе wakeup.
  • SIM mux (gpio-leds hack): sim1_switch GPIO22, sim2_switch GPIO23, sim3_switch GPIO1 (default on), sim_hotdet GPIO20 — те же GPIO, что у JZ02.
  • LEDs: RGB GPIO-LED как у JZ02 (GPIO6/7/8) в DT нет.
  • UART: console serial@78b0000 (BLSP1 UART2, ttyHSL0, 115200).
  • USB: hsusb-otg @78d9000, usb-bam.
  • WCNSS: qcom,wcnss_wlan@0a000000, pronto PIL, 5-wire pinmux (GPIO40-44) — как JZ02.
  • Modem: qcom,pil-q6v56-mss@4080000, SMD/SMSM, bam_dmux@4044000, rmtfs sharedmem-uio.
  • Thermal: tsens sensor0/1/2/4/5, pm8916_tz, bms, battery; msm-thermal.
  • Audio: msm8x16 codec (headset jack detect), cdc-us-euro GPIO113 (JZ02: 120).
  • Камеры CCI camera@0/@1 "ok" — артефакт MTP-DT, физически камер нет (не проверялось).
  • Полный diff против JZ02 stock dtb_01: dt/diff-jz02-vs-aurora-dtb01.txt.

Android runtime: rmt_storage, qmuxd, netmgrd, rild, wcnss_service, hostapd, dnsmasq, thermal-engine, mpdecision. wlan0 = AP 192.168.100.1/24; rmnet* + rev_rmnet* (SMD/BAM-DMUX).

13. JZ02 vs Aurora

JZ02 Aurora класс
SoC MSM8916 MSM8916 SAME
RAM не зафиксировано в заметках 512MB UNKNOWN
eMMC 3 875 536 896 B 3 909 091 328 B, Hynix H4G2a DIFFERENT
GPT 27 разделов те же имена/порядок, другие размеры/смещения под eMMC DIFFERENT (не переносить GPT)
SBL1 BOOT.BF.3.0.1-00019 идентичен SAME
RPM RPM.BF.2.0.1-00027 ELF идентичен SAME
TZ TZ.BF.2.2-2.2.0026 ELF идентичен SAME
HYP stock ELF идентичен SAME
ABOOT LK 2025-11 LK 2026-07, SPI panel DIFFERENT
MPSS MPSS.DPM.1.0.C7-00193 та же версия, но переподписан 2026-04 и бинарно отличается DIFFERENT (см. S2.7)
PMIC PM8916 PM8916 SAME
WCNSS CNSS.PR.1.4.2.C4-00084 тот же, те же пины LIKELY SAME
Wi-Fi WCN36x0 via pronto то же LIKELY SAME
USB hsusb-otg то же LIKELY SAME
UART ttyHSL0 @78b0000 ttyHSL0 @78b0000, GPIO4/5 (DT), пады найдены LIKELY SAME (у JZ02 pinctrl не сверялся)
SIM mux GPIO22/23/1/20 GPIO22/23/1/20 SAME (по DT)
display нет (в DT — generic DSI st7796s) ST7735S SPI 128×128 DIFFERENT
buttons vol_up GPIO107, reset GPIO37 key_f3 GPIO107, key_f2 GPIO37 (+PON) LIKELY SAME pins, другие коды
LEDs RGB GPIO6/7/8 нет RGB; lcd-bl на MPP4 DIFFERENT
battery ? 1500 mAh, VM-BMS UNKNOWN для JZ02
charger ? qpnp-linear-charger UNKNOWN для JZ02
thermal tsens tsens + bms/battery LIKELY SAME
DT QCDT v2, 2 DTB QCDT v2, 2 DTB, ~1080 строк diff DIFFERENT
kernel 3.10.28 (sha 56214cdd…) 3.10.28 (sha 8796a9cd…) DIFFERENT build

14. Риски / блокеры

  • Firehose WRITE не проверен; edl reset ненадёжен (опыт JZ02) → после EDL-сессии нужен ручной power-cycle.
  • modemst1/2, fsg, persist — уникальные NV/RF-калибровки; бэкап есть, но писать туда нельзя.
  • Мусор в хвостах rpm/tz/hyp: при любой будущей записи bootchain сравнивать по ELF-образу, а не по хэшу раздела.
  • UART найден (сессия 2). Stock LK: только getvar/download — RAM-boot невозможен без записи (S2.4).
  • Аварийный вход в EDL без Android (кнопки/test point) не найден — сейчас EDL только через adb reboot edl или fastboot/LK.
  • Батарея: при экспериментах с ядром без charger/BMS драйвера возможен глубокий разряд.

15. Следующий безопасный шаг

Устарело после сессии 2: п.2 выполнен — fastboot boot в stock LK отсутствует (S2.4); п.3 выполнен (S2.5–S2.7); UART найден (S2.1).

  1. Физически: отключить/подключить питание (плата сейчас в firehose-режиме), убедиться, что Android загрузился.
  2. Проверить fastboot oem device-info / fastboot boot <stock boot.img> (RAM-boot без записи) — понять, разрешает ли LK fastboot boot. Это ключ к тестам mainline без flash.
  3. Распаковать ramdisk boot/recovery, собрать init/rc и firmware-список; снять содержимое FAT modem (mtools) и сравнить с JZ02.
  4. Найти UART-пады (GPIO4/5) на плате — до начала порта Linux.
  5. Только после этого: план mainline DTS msm8916-jz08-aurora (panel-mipi-dbi/ st7735 над SPI QUP4, gpio-keys, pm8916 charger/bms).

Сессия 2 (2026-09-29, 20:00–) — UART, fastboot policy, ramdisk, modem FAT

Все операции read-only. В eMMC ничего не записано.

S2.1 UART (подтверждён физически)

  • Пады RX/TX найдены пользователем на плате; вывод stock kernel console читается.
    • Расположение TX pad: не сообщено (дописать).
    • Расположение RX pad: не сообщено (дописать).
    • GND: не сообщено.
    • Уровень логики: не измерялся (MSM8916 GPIO bank = 1.8 В — ожидаемо, не подтверждено измерением).
  • Адаптер на 480s: CH340 (1a86:7523) → /dev/ttyUSB0, 115200 8N1.
  • Логика: BLSP1 UART2, serial@78b0000 (qcom,msm-lsuart-v14, irq 0x6c), ttyHSL0, cmdline console=ttyHSL0,115200,n8.
  • pinctrl из Aurora dt/dtb_01.dts (pinctrl-0 = <0xac> → pmx-uartconsole/uart-console):
    • qcom,pins = <&tlmm 4>, <&tlmm 5> → GPIO4, GPIO5; qcom,pin-func = 2;
    • drive-strength = 2 (мА), bias-pull-down;
    • только состояние default (active); sleep-состояния в DT нет.
    • TX = GPIO4, RX = GPIO5 — по таблице функций TLMM MSM8916 (blsp_uart2), в самом DT направление не указано.
  • Битые символы: встречаются кластерами там, где kernel printk пересекается с выводом из другого контекста (SBL→LK переход, параллельные CPU), не равномерно — нет оснований считать baudrate неверным.

S2.2 Cold-boot UART log (logs/uart/coldboot-20260929-200018.log/.raw)

Контекст: плата была выключена и сидела в off-mode charging (Android charger). Нажатие питания → charger: [241128] rebooting → Restarting system → полный bootchain. PON reason в ядре: Triggered from Hard Reset and 'cold' boot, power-off reason PS_HOLD. LK: pm8x41_get_is_cold_boot (текст повреждён).

  • PBL: вывода нет (ожидаемо).
  • SBL1: печатает boot-лог (Format: Log Type - Time(microsec)), batt_voltage=3975, sbl1_efs_handle_cookies, загрузка TZ/RPM/APPSBL, QSEE Execution, SBL1, End ≈ 335 мс.
  • LK: Android Bootloader - UART_DM Initialized!!!, welcome to lk, баннера/версии нет.
    • [210] Panel power on done, [210] Config SPI PANEL. — LK сам инициализирует ST7735S (splash).
    • DTB: Using DTB entry 206/00000000/0x00000008/256 for device 206/00010000/0x0001… → выбран dtb_01 (512MB MTP).
    • cmdline от LK добавляет: androidboot.emmc=true androidboot.serialno=<EMMC_SERIAL> androidboot.baseband=msm mdss_mdp.panel=1:spi:0:qcom,mdss_spi_st7735s_wx144_128x128_cmd.
    • booting linux @ 0x80008000, ramdisk @ 0x82000000 (534088), tags/device tree @ 0x81e00000.
    • Сообщения Authenticating boot image в логе не видно (участок 400–500 мс частично повреждён) — не доказано ни то, ни другое.
  • Kernel: [0.000000] Linux version 3.10.28 … Apr 14 2026, ARMv7 (32-bit), model "MSM 8916 512MB MTP". socinfo: id=206 ver=1.0 hw_plat=8 hw_plat_subtype=0 pmic_model=65547 (PM8916 v2.0). Memory 420 MB total. mdss_spi_panel_init: st7735s, continuous splash. BMS: soc=38, vbatt≈3.92 В.
  • Модем (normal boot): ext4 mount ≈8.3 с → pil-q6v5-mss: modem: loading 8.81 с → pil: MBA boot done 8.87 → modem: Brought out of reset 9.56 → Power/Clock ready interrupt 9.65 → Subsystem error monitoring … up. MPSS стартует успешно; строки Failed to locate modem.mdt в этой загрузке нет.
  • WCNSS: wcnss_wlan probed, WLAN FW caps ≈21.6 с.
  • Шум, не относящийся к делу: ov5648 camera probe fail (камеры нет), gcc-mdss Failed to get pixel source (SPI-панель без DSI), display reset gpio request failed (18.15 с, GPIO118 уже занят mdss_spi — предположение).

S2.3 fastboot policy (logs/fastboot/session-20260929-200145.txt)

  • adb reboot bootloader → UART: Restarting system with command 'bootloader' → SBL → LK pm8x41_get_is_cold_boot: Warm boot → fastboot: processing commands. USB 18d1:d00d, serial <EMMC_SERIAL>.
  • fastboot oem device-info → FAILED (remote: 'unknown command').
  • fastboot getvar all → пусто.

S2.4 fastboot boot stock boot.img — FAIL

  • Образ: partitions/boot.bin, sha256 1342def7…3c0a = manifest (Aurora), ≠ JZ02 (9cc36657…).
  • fastboot boot partitions/boot.bin → Sending 'boot.img' (16384 KB) OKAY → Booting FAILED (remote: 'unknown command').
  • UART LK: [15510] fastboot: download:01000000 → [16020] fastboot: boot → unknown command.
  • Причина (статический анализ partitions/aboot.bin): в LK зарегистрированы только getvar: и download:. Нет boot, flash:, erase:, continue, reboot, reboot-bootloader, любых oem/flashing. Точно так же урезан LK JZ02 (проверено тем же способом).
  • Следствия:
    • FASTBOOT RAM BOOT = NOT AVAILABLE на stock LK.
    • Из fastboot нельзя выйти программно — только отключение питания.
    • eMMC не изменялась (download пишет только в RAM-буфер LK; команд записи в LK нет вообще).
  • Обход записью в aboot НЕ предпринимался (по правилам сессии).

S2.5 modem.mdt — объяснение

  • init.target.rc: on fs → mount vfat …/by-name/modem /firmware ro …; init.qcom.rc: on early-boot → write /sys/kernel/boot_adsp/boot 1 (+ pil параметры из persist.sys.*, пустые → "cannot expand").
  • В off-mode charging (androidboot.mode=charger) init выполняет on charger (монтирует только /system, стартует healthd/charger/vm_bms), on fs не выполняется → /firmware не смонтирован. Ядерный PIL-vote при этом пытается загрузить modem → Failed to locate modem.mdt / pil_vote_load_worker: Failed to load modem.
  • Пример пользователя содержит charger: Enabling backlight → это была загрузка в charger mode. Вывод: сообщение нормально для зарядного режима, модем исправен (в normal boot MPSS поднимается, см. S2.2).
  • Последовательность boot ramdisk JZ02 и Aurora идентична: из всех файлов boot ramdisk отличается только init.rc (у Aurora добавлены chown/chmod для sysfs LED *_sec, *2, *2_sec); init.target.rc/init.qcom.rc/fstab — одинаковые.

S2.6 Ramdisk inventory (tools/unpack-ramdisk.sh, результат bootchain/{boot,recovery}/ramdisk-root)

Воспроизведение: tools/unpack-ramdisk.sh (gzip → cpio -id --no-absolute-filenames; списки ramdisk.list). Оригиналы не менялись.

  • boot (gzip, 51 запись): init, init.rc, init.environ.rc, init.qcom.rc, init.target.rc, init.qcom.usb.rc, init.usb.rc, init.trace.rc, init.qti.carrier.rc, init..sh (class_main, mdm, class_core, early_boot, factory, qcom, ssr, syspart_fixup, usb), fstab.qcom, ueventd.rc, ueventd.qcom.rc, default.prop, sepolicy/_contexts, charger, res/ (charger images), sbin/.
    • fstab.qcom: system ro, userdata (encryptable=footer), vold sdcard1 (7864900.sdhci), uicc0/1 на 78b7000.spi (не используется), usbotg, zram 192 MiB.
    • cache/persist/firmware монтируются вручную в on fs (init.target.rc).
    • modem stack: rmt_storage, qmuxd, netmgrd, ril-daemon1/2 (rild -c 1/2), wcnss-service, wcnss_filter.
    • charger: on charger → healthd-charger, /charger, vm_bms; qbcharger по property.
    • default.prop: ro.secure=1, ro.debuggable=0, persist.sys.usb.config=none.
  • recovery (gzip, 73 записи): минимальный AOSP recovery (sbin/recovery, adbd, healthd, ueventd, watchdogd), etc/recovery.fstab (system/cache/userdata/boot/recovery/misc). default.prop: ro.secure=1, usb.config=diag,serial_smd,rmnet_bam,adb → root в recovery нет.
  • Сам recovery-ramdisk не содержит init.qcom.rc/init.target.rc → модем в recovery не стартует.

S2.7 Modem FAT (раздел modem), пофайлово vs JZ02 (firmware-fat-compare.tsv, распаковано в firmware-fat/)

Извлечено read-only 7z x partitions/modem.bin. 53 файла у обеих плат, набор имён одинаковый.

группа результат
wcnss.mdt, wcnss.b00-b11 SAME
cmnlib., keymaste., playread., widevine. SAME
modem.b03, b04, b19 SAME
modem.mdt, b00-b02, b05-b07, b10, b12, b13, b15-b18, b20, b21, b24-b27 DIFFERENT
mba.mbn DIFFERENT
  • Базовая сборка та же (M8916EAAAANVZM-1_20150909_103440, MPSS.DPM.1.0.C7-00193), но Aurora-модем/MBA переподписаны 2026-04-30 (cert 260430…Z), JZ02 — 2023-06-28. Отличаются кодовые сегменты (b05, b18, b20, b26…) → бинарно модифицированная прошивка, не просто другая подпись. MPSS между платами НЕ взаимозаменяем без отдельного анализа.

S2.8 Безопасный путь RAM-boot — статус

Stock LK (Aurora и JZ02) не умеет fastboot boot. Без записи в eMMC загрузить собственное ядро невозможно (EDL/firehose грузит только программер, не ядро). Любой путь требует минимум одной записи, которую пользователь должен одобрить явно.

Вариант, который предлагаю к обсуждению (НЕ выполнен):

  • lk2nd в раздел recovery через firehose program (первая запись firehose — WRITE ещё не тестировался).
    • recovery — некритичный раздел, есть проверенный бэкап; boot/aboot/bootchain/NV не трогаются, обычная загрузка Android не меняется.
    • Вход: adb reboot recovery → stock LK грузит recovery → lk2nd → полноценный fastboot (fastboot boot → RAM boot).
    • Откат: EDL program recovery partitions/recovery.bin (или LK сам свалится в normal boot/fastboot при невалидном образе).
    • Открытые вопросы до записи: (1) проверяет ли stock LK подпись recovery (строки Authenticating boot image в LK есть, факт применения не доказан; чип unfused); (2) нужна ли поддержка QCDT/board-id для lk2nd на этой плате; (3) firehose WRITE сначала проверить на безопасной цели.
  • Альтернативы хуже: замена aboot (риск bootchain), замена boot (ломает stock Android).

S2.9 Первый минимальный Linux RAM-boot (дизайн, не начат)

  • Цепочка: stock SBL1/TZ/HYP/LK → recovery=lk2nd → fastboot boot образа (Image.gz + DTB + initramfs), всё в RAM.
  • Ядро: mainline arm64 ≥ 6.6 (msm8916 поддержан upstream), defconfig + msm8916 фрагмент; без rmtfs/modem/wcnss на первом шаге.
  • DTB msm8916-jz08-aurora.dts (минимум): #include "msm8916-pm8916.dtsi", memory от lk2nd, &blsp_uart2 { status="okay"; } (GPIO4/5, console ttyMSM0), &sdhc_1 можно disabled на 1-м шаге (или только чтение), &usb peripheral (опционально), gpio-keys GPIO37 (active-high) / GPIO107 (active-low), &pm8916_pwrkey.
  • initramfs: static busybox, /init печатает в ttyMSM0: uname, /proc/cpuinfo, meminfo, interrupts, dmesg, gpio-keys events; никаких mount блочных устройств, никакого mkfs, никаких записей.
  • Критерии PASS: kernel стартует, UART, DT выбран (model), RAM ≈ 512 MB (минус reserved), таймер/GIC (interrupts растут), gpio-keys реагируют, USB (опц.), eMMC не тронута (sha256 boot/recovery/… до и после через EDL — по желанию).
  • Потом: sdhc_1 ro → rmtfs/modem (Aurora-собственный MPSS!) → wcnss → ST7735S (panel-mipi-dbi/fb_st7735r на &blsp_spi4, reset GPIO118, dc GPIO116, L17/L6, backlight PM8916 MPP4) → charger/BMS.

Сессия 3 — read-only preflight для lk2nd-в-recovery (2026-09-29 20:11–)

UART: logs/uart/preflight-recovery-20260929-201150.{log,raw}. В eMMC ничего не записано нами (оговорка: stock recovery сам монтирует /cache ext4 rw — штатное поведение заводского recovery).

P1 Эталонный recovery

partitions/recovery.bin: 16 777 216 B = 32768 секторов с LBA 2395232 (= GPT), sha256 0be90bc42efb0eae2e5376fef2c2786d68c614f679f6e214102a92b196b3a43d = MANIFEST = SHA256SUMS = срез full-emmc.bin.

P2 Normal boot после полного обесточивания

OK: LK → DTB 206/…/0x8/256 (dtb_01) → kernel → modem Brought out of reset 9.7 с → sys.boot_completed=1, adb есть.

P3 adb reboot recovery → stock recovery

  • kernel: Restarting system with command 'recovery' → SBL1 → LK pm8x41_get_is_cold_boot: Warm…, pon_reason is 17 cold_boot:0.
  • LK выбрал тот же DTB (206/00000000/0x8/256) и загрузил recovery: booting linux @ 0x80008000, ramdisk @ 0x82000000 (1071013), tags/device tree @ 0x81e00000 (1071013 = размер ramdisk recovery.img; у boot 534088).
  • cmdline recovery = cmdline normal + gpt (LK добавляет в recovery-пути); androidboot.mode не передаётся.
  • recovery kernel/init стартуют, /cache монтируется; USB не энумерируется (adbd в stock recovery не поднимается), UI ждёт клавиш — за 5 мин сам не перезагрузился. Выход — физически (кнопка/обесточивание).

P4 Аутентификация образов — что доказано

  • UART: строк Authenticating boot image, signature, Image Invalid, Recovery command, boot-recovery не наблюдалось ни в normal, ни в recovery-пути. НО окно LK ~400–500 мс (где печатается выбор DTB и, возможно, загрузка/проверка образа) систематически повреждено в обоих логах (потеря байт, не baudrate) → отсутствие строки само по себе не доказательство.
  • Косвенное (сильное): ни boot, ни recovery не несут подписи по смещению, где её ищет Qualcomm LK (imagesize_actual = page + kernel + ramdisk + dt, всё page-aligned):
    • boot @0x6ee800: сплошные высокоэнтропийные остатки (>4 KiB, энтропия ~7.1 бит/байт на всех 256-байтных блоках) — не 256-байтная подпись;
    • recovery @0x771800: остатки старого DTB (строки primary, SPK_RX_BIAS, Handset Mic…) — подписи нет точно.
    • Тем не менее LK загрузил и запустил оба образа.
  • androidboot.authorized_kernel=true (LK добавляет при успешной аутентификации, строка есть в aboot) отсутствует в cmdline normal, recovery и charger загрузок.
  • Вывод: на Aurora stock LK не требует валидной подписи ни для boot, ни для recovery (либо проверка не выполняется, либо её результат не блокирует загрузку). Devinfo is_unlocked=0 на это не влияет — locked-устройство грузит неподписанный recovery.
  • Не доказано: выполняется ли вычисление/проверка вообще (нужен неповреждённый UART в окне 400–500 мс или разбор кода).

P5 Возврат в Android и EDL

  • Выход из stock recovery — вручную пользователем (перезагрузка); Android загрузился, sys.boot_completed=1, adb OK.
  • adb reboot edl → 05c6:9008 за <25 с (20:20:26). Sahara не трогали; выход из EDL — только обесточивание.

P6 Итог preflight

пункт результат
normal boot OK
stock recovery (adb reboot recovery) OK (грузится, но зависает в UI без USB; выход — руками)
auth path в UART NOT OBSERVED (окно LK 400–500 мс повреждено)
signature verification де-факто не применяется: оба stock-образа без подписи грузятся
EDL OK

Оценка риска lk2nd-в-recovery: НИЗКИЙ для bootchain/NV (пишется только recovery; boot/aboot/NV не трогаются; normal boot не зависит от recovery; откат — EDL program оригинала, путь в EDL через adb из normal Android подтверждён). Остаточные риски: (1) первая firehose WRITE на Aurora; (2) lk2nd может не стартовать/зависнуть — выход только обесточиванием, плата после этого грузит normal Android (recovery грузится лишь по команде 'recovery' / misc BCB); (3) если misc получит boot-recovery (штатно пишет только recovery/Android), LK будет циклически грузить recovery → выход через EDL.


Сессия 4 — подготовка lk2nd для recovery (preflight 4–5). ЗАПИСЬ НЕ ВЫПОЛНЯЛАСЬ.

Плата в EDL 05c6:9008, в Sahara/Firehose ничего не отправлялось.

Сборка (lk2nd-build/BUILD.md)

lk2nd 23.1 (e9c8b217…), цель lk2nd-msm8916, QCDT только msm8916-512mb-mtp.dtb, LK2ND_FORCE_FASTBOOT=1.

Проверено по исходникам 23.1 (не по памяти):

  • ABOOT_STANDALONE ?= 1 (lk2nd/project/base.mk) → read_device_info/write_device_info не вызываются (aboot.c:5515), emmc_recovery_init (единственный путь записи в misc при старте) пропущен (aboot.c:5662), check_format_bit пропущен.
  • В модулях lk2nd/ нет ни одного mmc_write/partition_write/mmc_erase. Запись в eMMC возможна только по явной fastboot-команде.
  • LK2ND_FORCE_FASTBOOT=1 → всегда меню fastboot, никакой автозагрузки boot+512k/extlinux.
  • UART: target/msm8916/init.c:98 uart_dm_init(2, 0, BLSP1_UART1_BASE=0x78B0000); platform/msm8916/gpio.c: GPIO4 out / GPIO5 in, func 2 → та же консоль, что stock (serial@78b0000, 115200).
  • Самоперемещение: arch/arm/crt0.S:110–128 — копирует себя с адреса загрузки (0x80008000) на линк-адрес 0x8F600000.

Образ

поле lk2nd (recovery-lk2nd-16MiB.img) stock recovery комментарий
magic ANDROID! ANDROID! =
page_size 2048 2048 =
kernel_addr 0x80008000 0x80008000 =
ramdisk_addr 0x81000000 0x81000000 = (stock LK всё равно кладёт на 0x82000000 — видно в UART)
tags_addr 0x80000100 0x80000100 = (LK кладёт DT на 0x81e00000)
second 0 0 =
kernel_size 0x44de0 (lk.bin, 282080 B) 0x624c90 (zImage) lk2nd = «ядро» для stock LK
ramdisk_size 1 0x1057a5 lk2nd кладёт 1-байтовый ramdisk-заглушку
dt_size 0x1000, QCDT v2, 1 запись 0x46800, QCDT v2, 8 записей см. ниже
QCDT entry 0xce / 0x8 / 0x100 / 0x0 entry1 = 0xce / 0x8 / 0x100 / 0x0 идентична записи, которую stock LK выбирает на Aurora (UART 206/00000000/0x00000008/256)
DTB msm-id <206 0>, board-id <8 0x100> то же
cmdline lk2nd console=ttyHSL0… stock LK дописывает свои androidboot.* как для stock
image_end 0x47000 (+16 B SEANDROIDENFORCE) 0x771800 290832 B ≪ 16 MiB
Файл для записи = lk2nd.img + нули до 16 777 216 B (весь раздел детерминирован → побайтная сверка readback).
Узлы устройств lk2nd в этом DTB не совпадут с cmdline Aurora (st7735s_wx144_128x128 ≠ st7735s_128128) → generic, без чужих GPIO.

Сессия 4b — ЗАПИСЬ lk2nd в recovery (одобрено пользователем: только шаги 0→A→B→C)

Логи: logs/lk2nd-write/00-printgpt.log, 01-write.log, 02-readback.log.

  • 0 printgpt (20:30): Sahara serial 0x<SAHARA_SERIAL> (Aurora), loader 53f19350… принят; recovery: Offset 0x4918c000 (= LBA 2395232), Length 0x1000000. OK.
  • A write (20:30:47–20:30:53): edl w recovery lk2nd/recovery-lk2nd-16MiB.img → Wrote … to sector 2395232. rc=0.
  • B readback: edl r recovery …/recovery-after-lk2nd-write.bin → Dumped sector 2395232 with sector count 32768. rc=0.
  • C: оба sha256 = 0dfa60a03a742ab2bf9f6e91e3887142cb7a0af2dd37c6373f7942703cd011e1, размер 16777216, cmp без различий → READBACK_MATCH.
  • Сообщения Firehose (те же, что при чтении на JZ02/Aurora, безвредные): Host's payload to target size is too large, logbuf@0x0801D0A0 fh@0x08019F08, Sector size in XML 4096 does not match disk sector size 512.
  • Firehose WRITE на Aurora: подтверждён (один раздел, побайтная сверка).
  • Больше ничего не выполнялось: ни reset, ни reboot, ни misc, ни другие разделы. Плата осталась в EDL (firehose загружен).

Адрес ramdisk 0x82000000 vs 0x81000000 в заголовке

  • Заголовки stock boot и stock recovery: ramdisk 0x81000000, tags 0x80000100. UART stock LK для обоих: ramdisk @0x82000000, tags/DT @0x81e00000, kernel @0x80008000 → LK игнорирует адреса из заголовка и подставляет свои фиксированные.
  • Это механизм CAF LK ABOOT_IGNORE_BOOT_HEADER_ADDRS → update_ker_tags_rdisk_addr() (app/aboot/aboot.c:397–406, в lk2nd-исходниках): hdr->ramdisk_addr = ABOOT_FORCE_RAMDISK_ADDR; hdr->tags_addr = ABOOT_FORCE_TAGS_ADDR. Смещения +0x02000000 / +0x01e00000 от базы 0x80000000 те же, что у msm8226/msm8974 в project/*.mk. Значения для msm8916 в stock-бинарнике не извлекались — вывод по поведению (UART), а не по коду aboot Aurora.
  • Вывод: runtime-переопределение со стороны LK; к lk2nd-образу применяется так же (одинаковый header layout). Не блокер.

Сессия 5 — первый boot-test lk2nd (20:33–20:36) — PASS

UART: logs/uart/preflight-recovery-20260929-201150.log (до 20:33:43: charger-boot + начало normal boot) и logs/uart/lk2nd-boottest-20260929-203353.log (дальше). Разрыв ~10 с (перезапуск логгера) пришёлся на kernel 0.6–12.9 с normal boot. fastboot: logs/lk2nd-write/boottest-fastboot.txt.

  • После обесточивания плата сначала поднялась в charger mode (20:33:24, charger в логе, Failed to locate modem.mdt — ожидаемо), затем перезапуск в normal Android (20:33:39).
  • Normal Android: PASS — adb OK, sys.boot_completed=1, subsys modem ONLINE, wcnss ONLINE, rmt_storage/qmuxd/netmgrd/ril-daemon/wcnss-service running (SIM ABSENT — SIM не вставлена).
  • adb reboot recovery (20:34:55): kernel Restarting system with command 'recovery' → SBL1 → stock LK pon_reason is 145 cold_boot:0, DTB 206/00000000/0x00000008/256 (запись из lk2nd QCDT), cmdline: lk2nd androidboot.emmc=true androidboot.serialno=<EMMC_SERIAL> gpt androidboot.baseband=msm mdss_mdp.panel=1:spi:0:qcom,mdss_spi_st7735s_wx144_128x128_cmd, booting linux @ 0x80008000, ramdisk @ 0x82000000 (1), tags/device tree @ 0x81e00000 → stock LK принял lk2nd.
  • lk2nd (через ~0.2 с): Android Bootloader - UART_DM Initialized!!!, welcome to lk, MMC card: H4G2a … 3909091328 bytes, Command line from previous bootloader: lk2nd …, Failed to find matching lk2nd device node: -1 (ожидаемо: generic), No continuous splash: MDP GDSC is not enabled (дисплей не нужен), Fastboot mode was forced with compile-time…, USB init, udc_start(), fastboot: processing commands (~0.57 с от старта lk2nd).
  • USB: 18d1:d00d, iManufacturer Google, iProduct Android, iSerial <EMMC_SERIAL> (тот же VID:PID, что stock LK fastboot — различать по getvar product).
  • fastboot: devices → <EMMC_SERIAL>; getvar version → 0.5; getvar product → lk2nd-msm8916; getvar all: lk2nd:version 23.1, variant MTP eMMC, unlocked yes, secure no, max-download-size 0x10000000 (256 MiB), hw-revision 10000, lk2nd:panel qcom,mdss_spi_st7735s_wx144_128x128_cmd, wifimac , полная таблица разделов = GPT.
  • Стабильность: >60 с в fastboot, USB на месте, в UART только STALL GET_DESCRIPTOR (хост опрашивает BOS/qualifier — безвредно).

ВАЖНО: lk2nd считает, что живёт в boot, а не в recovery

Сборка по умолчанию LK2ND_PARTITION_BASE ?= boot (lk2nd/project/lk2nd.mk:16): getvar показывает виртуальный раздел lk2nd = первые 512 KiB boot и boot = 0xf80000 (со смещением 512 KiB). Для Aurora это неверно (lk2nd в recovery). Последствия при будущих командах записи через lk2nd:

  • fastboot flash lk2nd … перезапишет начало stock boot (ядро Android) — ЗАПРЕЩЕНО;
  • fastboot flash boot … запишет в boot со смещением 512 KiB — ломает stock boot — ЗАПРЕЩЕНО.
  • fastboot boot, getvar, download — не затрагиваются. Если когда-нибудь понадобятся записи через lk2nd — сначала пересобрать с LK2ND_PARTITION_BASE=recovery (отдельное решение, новая запись recovery).

Сессия 6 — первый Linux RAM boot через lk2nd (2026-09-29 22:00) — FAIL до передачи управления ядру

Записей в eMMC: нет. lk2nd/recovery не менялись.

Что собрано (всё в linux/)

  • Ядро: Linux 7.2.7 stable (f42acb3678424d1e08f6ed27c0d8ba8a125e14d6, git.kernel.org stable, тот же коммит, что база JZ02), чистый git archive (без правок JZ02) → linux/src; сборка на локальном диске /home/q/aurora-kbuild (virtiofs даёт clock skew).
  • Config: arm64 defconfig + linux/aurora-ramboot1-v2.config (только ARCH_QCOM, без драйверов чужих SoC, без btrfs/xfs/nfs/netfilter/ftrace, MODULES=n) → artifacts/ramboot1/kernel.config. Первая сборка (defconfig почти целиком) дала image_size 33.6 MiB — отброшена: lk2nd кладёт ARM64-ядро на 0x80000000, DTB на 0x81E00000, ramdisk на 0x82000000 (platform/msm8916 iomap.h ABOOT_FORCE_*), т.е. image_size обязан быть < 30 MiB. v2: image_size 22.31 MiB (конец 0x81650000).
  • DTS linux/dts/msm8916-jz08-aurora.dts (+build-dtb.sh, out-of-tree cpp+dtc): #include "msm8916.dtsi", model "JZ08AU Aurora (RAM boot 1)", serial0=&blsp_uart2 (serial@78b0000, pinctrl blsp_uart2_console_default GPIO4/5), stdout-path serial0:115200n8; явно disabled: sdhc_1 (eMMC), sdhc_2, usb, mpss, bam_dmux, bam_dmux_dma, wcnss. Проверено fdtget.
  • initramfs: Debian trixie busybox-static 1:1.37.0-6+b9 arm64 (deb sha256 c833be48… = Packages index), gen_init_cpio (/dev/console, /dev/null), /init — proc/sys/devtmpfs, диагностика, бесконечный цикл shell. Без блочных устройств/сети/firmware.
  • Образ: Android boot v0, kernel = Image.gz + appended DTB (lk2nd: «Only one appended non-skales DTB, select it»), ramdisk = initramfs.cpio.gz, page 2048, cmdline earlycon console=ttyMSM0,115200n8 ignore_loglevel loglevel=8 rdinit=/init (ttyMSM / msm_serial_dm — из drivers/tty/serial/msm_serial.c). artifacts/ramboot1/aurora-ramboot1.img 9549824 B, sha256 470ce4f82864600c5bed7e1791a38e84a802dc2cac7d43d15439f593b9e15347 (все хэши — SHA256SUMS).

Результат (logs/uart/ramboot1-20260929-215954.log, logs/uart/ramboot1-fastboot.txt)

  • fastboot: Sending 'boot.img' (9326 KB) OKAY, Booting OKAY.
  • lk2nd: decompressing kernel image: done → qcom,msm-id entry not found → Only one appended non-skales DTB, select it → kaslr-Seed is added → Cannot boot ARM64 with old SCM calling convention → booting linux @ 0x80000000, ramdisk @ 0x82000000 (1016607), tags/device tree @ 0x81e00000 → Jumping to kernel via monitor → Failed to jump to kernel → ASSERT FAILED at (platform/msm_shared/scm.c:1085) → каскад data abort (alignment fault) внутри lk2nd → ~18 с → сброс SoC → SBL1 → stock LK (Warm) → normal Android (22:00:24), adb/diag 05c6:9091.
  • Linux не получил управление ни на одну инструкцию (нет ни earlycon, ни Booting Linux on physical CPU от 7.2.7).

Причина (доказано по исходникам lk2nd 23.1)

  • lk2nd/smp/spin-table/spin-table.c:54: если !is_scm_armv8_support() и ядро ARM64 → «Cannot boot ARM64 with old SCM calling convention».
  • platform/msm_shared/scm.c (~1060–1085): переход 32→64 делается SCM-вызовом SCM_SVC_MILESTONE_32_64; со старым (ARMv7) SCM TZ вызов возвращается → ASSERT(0).
  • Stock TZ Aurora = TZ.BF.2.2-2.2.0026 (ELF идентичен JZ02 stock): только legacy SCM, без ARMv8 SMC/PSCI → ARM64 невозможен на stock TZ/HYP.
  • Это не ошибка DTS/ядра/образа/адресов. Аналогично JZ02/UZ801: там ARM64 стал возможен только после замены hyp (qhypstub) и aboot (lk1st) [и/или TZ от DB410c] — т.е. записей в bootchain.

Варианты (решение за пользователем)

A. ARM32 mainline (без записей): тот же DTS, ядро ARCH=arm (multi_v7 + ARCH_QCOM/msm8916). lk2nd содержит A32 spin-table (spin_code_a32) именно для SMP на старом TZ. Минусы: 32-bit userspace (Alpine armv7), расхождение с JZ02 (arm64). B. Замена hyp → qhypstub (+ возможно TZ → DB410c, + aboot → lk1st) через EDL — даёт ARM64 и PSCI, как у JZ02/UZ801. Это записи в bootchain (hyp/tz/aboot): высокий риск; откат только через EDL; отдельный preflight.


Сессия 7 — preflight миграции bootchain на ARM64 (2026-09-30). НИЧЕГО НЕ ЗАПИСАНО.

Документы: bootchain-migration/PREFLIGHT.md (анализ, варианты, неопределённости), bootchain-migration/WRITE-PLAN.md (S0–S4, команды, откаты), артефакты + эталоны отката + SHA256SUMS в bootchain-migration/. Ключевое: одного qhypstub недостаточно (JZ02 S3); нужна пара DB410c TZ.BF.3.0 + qhypstub + правка GPT (TZ 605312 B > 512 KiB) + lk1st. Рекомендовано: вариант D (цепочка JZ02, по одной стадии). БЛОКЕР: аппаратный вход в EDL на Aurora не доказан (кандидат — кнопка KEY_F2 = GPIO37, тот же пин, что RESET/EDL у JZ02). Новый артефакт: lk1st-aurora (lk2nd 23.1 e9c8b217, lk1st-msm8916 LK2ND_BUNDLE_DTB=msm8916-512mb-mtp.dtb LK2ND_FORCE_FASTBOOT=1, qtestsign 0eef3b5 -v 3 aboot) → aboot-lk1st-aurora.mbn 327244 B (003c484e…), pad1M e4addbf8…. Aurora GPT candidate: той же правкой (13 байт, записи tz/tzbak), валидатор OK: primary 6e850a5d…, backup 795952a1….

Сессия 7b — S0: аппаратный вход в EDL (2026-09-29 22:22–22:50). Записей нет, Sahara не трогали.

  • Кнопки (logs/s0/getevent-keys.txt): 1 верхняя = KEY_POWER (qpnp_pon/KPDPWR); 2 у USB = KEY_POWER (qpnp_pon); 3 RESET = KEY_F1 (qpnp_pon/RESIN). gpio-keys (KEY_F2/GPIO37, KEY_F3/GPIO107) — ни одна физическая кнопка (отличие от JZ02, где RESET = GPIO37).
  • Плата без аккумулятора не стартует от USB (со слов пользователя).
  • Попытки «зажат RESET + подача питания»: 3/3 → 05c6:9008 (устр. 114, 115, 116). UART (logs/uart/s0-edl-attempt2-20260929-224606.*): EDL-загрузка = SBL1, Start … pm_driver_init (batt_voltage=…) … clock_init, Delta → тишина → 9008. Ни Image Load, ни QSEE, ни LK — в EDL уводит stock SBL1 до загрузки TZ/RPM/HYP/ABOOT.
  • НО: в попытках 2 и 3 перед EDL-загрузкой была обычная загрузка (SBL1 → LK → ядро 3.10), и EDL наступил только после следующего сброса (~10 с). Источник этого сброса не установлен: stock DT настраивает reset только для POWER (pon_1 s1 10.256 с + s2 2 с, warm), для RESIN (pon_2) reset не настроен. Попытка 2 — сброс вручную пользователем.
  • Вывод: воспроизводимо 3/3, механизм входа (SBL1) не зависит от tz/hyp/aboot, но не доказано, что без работающего ядра Android (т.е. при зависшем aboot/tz) произойдёт тот сброс, после которого SBL1 уходит в EDL. Нужен тест-симуляция без записи.

Сессия 7c — S0 simulation (2026-09-29 22:54 – 00:06) — S0 FAIL. Записей нет. UART: logs/uart/s0-testA-20260929-225444.*

  • Test A #1 (lk2nd fastboot 22:56:57, RESET ~30 с): в 22:57:31 SBL1 → LK → Android (charger mode). EDL нет. Источник сброса не установлен.
  • Test A #2 (lk2nd fastboot 00:01:29, RESET 60 с непрерывно): сброса нет, плата осталась в lk2nd → у RESIN нет аппаратного сброса (согласуется со stock DT: reset настроен только для POWER/pon_1).
  • Test C (полное обесточивание, RESET зажат ДО подачи питания, держался ~10 с после): первый SBL1 прошёл полностью (Image Load ×3, QSEE, SBL1 End) → stock LK → Linux 3.10. EDL нет.
  • Вывод: зажатый RESET при старте SBL1 не переводит в EDL. Все 3 успешных входа в 9008 (попытки 1–3) случились только после загрузки stock Android и последующего сброса → вероятно, SBL1 уходил в download mode по признаку, выставленному stock-ядром (гипотеза, не доказано). Путь зависит от Android → не является независимым аппаратным recovery path.
  • Ранее сделанный вывод «SBL1 видит зажатый RESET → EDL» (сессия 7b) — ОТОЗВАН.
  • Bootloader writes: NO-GO. Нужен настоящий аппаратный EDL (PBL): кандидат — GPIO37 (KEY_F2 в stock DT, кнопка отсутствует; на JZ02 и UFI-001x GPIO37 = EDL-кнопка) → поиск площадки/посадочного места по фото платы, без замыканий наугад.

Сессия 7d — S0 PASS: аппаратный EDL через USB D+ → GND (2026-09-30 00:14–00:16). Записей нет, Sahara не трогали.

Метод (найден пользователем): аккумулятор подключён → замкнуть USB D+ на GND → подключить USB-C → отпустить → 05c6:9008. Выход: обесточивание.

# время USB UART
1 00:14:05 9008 (dev 127) холодный старт: SBL1, Start → pm_driver_init (batt 4180) → clock_init, Delta → тишина
2 00:15:25 9008 (dev 002) то же
3 00:15:51 9008 (dev 006) то же
3/3. Без предварительной загрузки Android/LK (единственный SBL1-старт на попытку). Вход выполняет stock SBL1 (не PBL: SBL1 печатает),
до загрузки TZ/RPM/HYP/ABOOT (нет Image Load/QSEE). SBL1 в плане миграции не меняется, запись sbl1 в GPT не меняется →
путь не зависит от tz/hyp/aboot/Android/ADB. Если PBL не найдёт SBL1 (порча GPT) — PBL уходит в EDL сам (штатное поведение).
Попытки 1–3 сессии 7b и выводы 7b/7c про RESET — недостоверны (со слов пользователя, часть попыток была загрузкой Android в режим зарядки).

Сессия 8 — S1: aboot ← lk1st-aurora (2026-09-30 00:18–00:22) — PASS

Логи: logs/bootchain/S1-*, UART logs/uart/S1-lk1st-boot-20260930-001922.*.

  • Pre: вход в EDL через D+→GND; printgpt: Sahara serial 0x<SAHARA_SERIAL>, aboot Offset 0x8100000 (LBA 264192), Length 0x100000; GPT stock (tz 0x80000). sha256: lk1st pad1M e4addbf8…6482, orig-aboot fd1af167…053a (= manifest; копии на 480s и локально), firehose 53f19350….
  • Write: edl w aboot bootchain-migration/aboot-lk1st-aurora.pad1M → Wrote … to sector 264192 (00:18:26). Readback edl r aboot → sha256 e4addbf8…6482, cmp OK → READBACK_MATCH. Контроль: abootbak, GPT primary/backup — без изменений.
  • Boot (00:20:25, обычное включение): SBL1 (Image Load ×3, APPSBL Image Loaded, QSEE, SBL1 End) → welcome to lk → MMC card: H4G2a … 3909091328 bytes → Fastboot mode was forced → USB → fastboot: processing commands (~0.55 с).
  • USB 18d1:d00d; fastboot: devices <EMMC_SERIAL>; version 0.5; product lk1st-msm8916; lk2nd:version 23.1; variant MTP eMMC; unlocked yes; secure no; max-download-size 0x10000000; boot 0x1000000 (без виртуального раздела lk2nd); tz 0x80000, hyp 0x80000 (stock GPT). Стабильно (~36 с, ответы на все команды, ошибок в UART нет). Заставки нет (ожидаемо).
  • fastboot oem reboot-edl (misc.c: reboot_device(EMERGENCY_DLOAD)) → OKAY → 05c6:9008 за ~1 с. PASS.
  • Аппаратный EDL после S1: D+→GND → SBL1 Start → clock_init → тишина → 9008 (00:22:12). PASS.
  • Rollback: не требуется. Stock Android больше не грузится (ожидаемо).

Сессия 9 — S2: GPT (tz 512K→1M, tzbak → gap) (2026-09-30 00:24–00:26) — записи и проверки PASS

Логи/readback: logs/bootchain/S2-*. Pre: serial 0x<SAHARA_SERIAL>; aboot == lk1st (S1); sbl1 == stock; recovery == lk2nd image; gap 305184..306207 == zeros.

part OLD NEW
tz 270336..271359 (1024 sect, 524288 B) 270336..272383 (2048 sect, 1048576 B)
tzbak 271360..272383 (1024, 524288 B) 305184..306207 (1024, 524288 B) — в неразмеченном промежутке 305170..393215
hyp 272384..273407 (1024, 524288 B) без изменений
  • S2-A ws 305184 orig-tzbak.bin → readback c6f7db26…b4af == stock tzbak, cmp OK (GPT в этот момент ещё stock — проверено).
  • S2-B ws 7634911 aurora-new-gpt-backup-33sectors.bin → readback 795952a1…e18f, cmp OK.
  • S2-C ws 0 aurora-new-gpt-primary-34sectors.bin → readback 6e850a5d…b8b6, cmp OK.
  • S2-D: printgpt: tz Offset 0x8400000 Length 0x100000; tzbak Offset 0x9504000 (=LBA 305184) Length 0x80000; hyp 0x8500000/0x80000; sbl1/aboot/rpm/boot/recovery/DDR/fsg/splash — прежние. Валидатор по readback: hdr/entry CRC OK (обе копии), primary==backup, backup hdr на LBA 7634943, usable 34..7634910, disk GUID тот же, изменены только LBA-поля записей tz и tzbak (GUID/attrs/индексы те же). Содержимое области tz (1 MiB) == stock tz + старый tzbak (не менялось).
  • Переходное состояние безопасно: SBL1 грузит TZ по program headers ELF (stock tz уже содержит 19303 B мусора после image_end и грузится; JZ02 S2 с тем же TZ/SBL1 → lk1st OK).
  • Откат S2: ws 0 orig-gpt-primary-LBA0-33.bin; ws 7634911 orig-gpt-backup-LBA7634911-7634943.bin; ws 305184 orig-gap-LBA305184-306207.bin; rs+cmp.
  • S2 boot (00:26:58, обычное включение): SBL1 → APPSBL Image Loaded → QSEE → SBL1 End → lk1st → forced fastboot (~0.54 с). PASS. getvar: product lk1st-msm8916; partition-size tz 0x100000, tzbak 0x80000, hyp 0x80000, aboot 0x100000, sbl1/rpm 0x80000, boot/recovery 0x1000000. fastboot oem reboot-edl → OKAY → 05c6:9008. Rollback не требуется.
  • Состояние флеша после S2: sbl1/rpm/hyp stock; aboot = lk1st-aurora; GPT new (tz 1 MiB: stock TZ.BF.2.2 + бывший tzbak; tzbak @305184 = stock tzbak); recovery = lk2nd 23.1; boot/modem/NV/persist — не тронуты.

Сессия 10 — S3: tz ← DB410c TZ.BF.3.0-00714, hyp ← qhypstub (2026-09-30 00:30–00:33) — PASS

Логи: logs/bootchain/S3-*, UART logs/uart/S3-newchain-boot-20260930-003103.*.

  • Pre: serial 0x<SAHARA_SERIAL>; tz 0x8400000/0x100000, hyp 0x8500000/0x80000; tz-db410c.pad1M 8481892f…5363, hyp-qhypstub.pad512K 1a963047…4555; rollback orig-tzarea 0284863b… и orig-hyp 340049c1… == срезы full-emmc.bin.
  • A–C edl w tz tz-db410c.pad1M → Wrote … sector 270336; r tz → 8481892f…5363, cmp OK.
  • D–F edl w hyp hyp-qhypstub.pad512K → Wrote … sector 272384; r hyp → 1a963047…4555, cmp OK. (одна EDL-сессия, без перезагрузки между ними)
  • Контроль: GPT primary/backup == S2, aboot == lk1st, tzbak@305184 == stock.
  • Первый boot (00:31:32, обычное включение): SBL1 → Image Load ×3 (строка QHEE Image Loaded) → QSEE Execution → SBL1 End → lk1st welcome to lk → MMC → forced fastboot → fastboot: processing commands (~0.54 с). 0× panic/ASSERT/abort. → DB410c TZ PASS, qhypstub PASS (цепочка дошла до aboot; на stock TZ+qhypstub JZ02 висел), lk1st PASS.
  • fastboot: <EMMC_SERIAL>; version 0.5; product lk1st-msm8916; lk2nd 23.1; tz 0x100000, tzbak 0x80000, hyp 0x80000, aboot 0x100000. SCM/PSCI lk1st при старте не логирует (проверка — при запуске ядра) → подтвердится на ARM64 RAM boot.
  • EDL после S3: fastboot oem reboot-edl → 9008 (PASS); аппаратный D+→GND → SBL1 Start → clock_init → тишина → 9008 (00:33:05, PASS).
  • Rollback: не требуется. Состояние флеша: sbl1/rpm stock; tz = DB410c TZ.BF.3.0 (1 MiB); hyp = qhypstub; aboot = lk1st-aurora; GPT new; tzbak@305184 = stock; recovery = lk2nd; boot/modem/NV/persist не тронуты.

Сессия 11 — ARM64 RAM boot #2 (A/B, тот же образ) — LEVEL 5 PASS (2026-09-30 00:36)

Логи: logs/uart/ramboot2-arm64-20260930-003530.{log,raw}, logs/uart/ramboot2-dmesg.txt (198 строк), logs/uart/ramboot2-fastboot.txt.

  • Образ без изменений: linux/ramboot1/aurora-ramboot1.img sha256 470ce4f82864600c5bed7e1791a38e84a802dc2cac7d43d15439f593b9e15347 (Linux 7.2.7-aurora-ramboot1 arm64, appended DTB == msm8916-jz08-aurora.dtb, eMMC/SD/USB/MSS/WCNSS/BAM-DMUX disabled, busybox initramfs).
  • Команда: fastboot boot linux/ramboot1/aurora-ramboot1.img (lk1st) → Sending OKAY, Booting OKAY.
  • lk1st: decompress OK → «Only one appended non-skales DTB, select it» → SCM call: 0x84000000 failed with :10000 (пробный вызов, некритично) → PSCI v1.0 detected, skipping SMP spin table → booting linux @ 0x80000000 … → Jumping to kernel via monitor. Ошибки «Cannot boot ARM64 with old SCM calling convention» / ASSERT больше нет (A/B: разница только в TZ.BF.3.0 + qhypstub).
  • Kernel: Booting Linux on physical CPU 0x0000000000 [0x410fd030], Linux 7.2.7-aurora-ramboot1, Machine model: JZ08AU Aurora (RAM boot 1), earlycon msm_serial_dm0 @0x78b0000; psci: PSCIv1.0 in firmware, SMCCC v1.0, OSI mode; [Firmware Bug]: failed to set PC mode: -3 (известно для DB410c TZ, работает OSI, CPUidle PSCI OSI инициализирован). GIC: Root IRQ handler: gic_handle_irq; arch_timer cp15 19.20 MHz (virt), clocksource arch_sys_counter; arch_mem_timer IRQ растёт. SMP: CPU1–3 booted, 4 CPUs. Memory: 445304K/524288K available (512 MiB, reserved tz-apps/smem/hyp/tz/rmtfs/rfsa по upstream dtsi), MemTotal 482864 kB. console ttyMSM0 enabled; initramfs unpacked; Run /init → === AURORA RAM BOOT === → BusyBox v1.37.0 ash, prompt ~ #. Блочных устройств нет кроме loop/nbd (eMMC не проявилась — DT disabled). Предупреждений/ошибок в dmesg больше нет.
  • Диагностика из shell (read-only): uname aarch64; model из /proc и /sys; 4 × Cortex-A53 (0xd03); /sys/class/tty: ttyMSM0 (+ttyS0-3 от 8250, не используются).
  • Записей в eMMC: нет.

Сессия 12 — RAM boot USB1: USB peripheral + NCM (2026-09-30 00:44) — PASS-7

Эталон ramboot1 не изменён (470ce4f8…). Новое: linux/dts/msm8916-jz08-aurora-usb1.dts (diff: linux/ramboot-usb1.dts.diff), linux/aurora-usb1.config (дельта конфига: linux/ramboot-usb1.config.diff, 23 опции + LOCALVERSION, только добавления), linux/initramfs-usb1/ (diff init: linux/ramboot-usb1.init.diff), артефакты linux/artifacts/ramboot-usb1/ (SHA256SUMS). Логи: logs/uart/usb1-20260930-004405.{log,raw}, logs/uart/usb1-dmesg.txt (223 строки), logs/uart/usb1-fastboot.txt.

  • DTS: #include "msm8916-pm8916.dtsi" (RPM-регуляторы), &pm8916_usbin okay, &usb dr_mode="peripheral" + extcon=pm8916_usbin, &usb_hs_phy extcon; PHY supplies L7 1.8 V / L13 3.075 V (= stock HSUSB_1p8/3p3), init-seq upstream == stock. eMMC/SD/MSS/WCNSS/BAM-DMUX disabled.
  • Kernel 7.2.7-aurora-usb1: USB_SUPPORT, USB_GADGET, USB_CHIPIDEA(+UDC, MSM glue), PHY_QCOM_USB_HS, EXTCON_QCOM_SPMI_MISC, USB_CONFIGFS(+NCM); USB host = n; MODULES=n. Image image_size 0x1670000 (22.44 MiB, end 0x81670000 < DTB 0x81E00000). Image.gz e09d7e81…, DTB 998dcfd4…, initramfs efd2a3f0… (1017243 B), aurora-usb1.img 7735d3df9c17b142786ac83d8ed382b2308f11d32ca38b51603237cedde89eb7 (9629696 B).
  • Boot: из RAM-shell ramboot1 reboot -f → SBL1 → lk1st fastboot → fastboot boot linux/ramboot-usb1/aurora-usb1.img (OKAY/OKAY) → PSCI v1.0 → Linux 7.2.7-aurora-usb1, model «JZ08AU Aurora (RAM boot USB1)».
  • USB: msm_hsusb 78d9000.usb (ChipIdea) + qcom usb-hs-phy; UDC ci_hdrc.0, state configured; gadget configfs aurora, NCM ifname usb0 (dev , host ), 172.16.42.1/24 static.
  • Host (480s): lsusb 18d1:d001 «Aurora / Aurora RAM Boot / <EMMC_SERIAL>» (dev-only IDs, как JZ02), класс CDC NCM; интерфейс enp0s20f0u2 (driver cdc_ncm), NM-профиль jz02-ncm применился автоматически: 172.16.42.2/24.
  • Ping: host→Aurora 5/5, 0% loss, avg 2.19 ms; Aurora→host 5/5, 0% loss, avg 2.24 ms.
  • Предупреждения: Fixed dependency cycle(s) usb↔phy (то же на JZ02, штатно); msm_hsusb: Failed to create device link (0x180) with supplier remoteproc (fw_devlink к отключённому remoteproc; USB работает); psci «failed to set PC mode: -3» (как раньше). Ошибок нет.
  • eMMC: отсутствует (0 строк mmc/sdhci, /sys/block только loop/nbd). SSH: не делался (в Debian busybox нет dropbear; есть telnetd — не включён).
  • Записей в eMMC: нет.

Сессия 13 — RAM boot EMMC1: eMMC READ-ONLY (2026-09-30 00:50) — PASS-9

Эталоны не изменены (ramboot1 470ce4f8…, ramboot-usb1 7735d3df…). Новое: linux/dts/msm8916-jz08-aurora-emmc1.dts (diff linux/ramboot-emmc1.dts.diff), linux/aurora-emmc1.config (дельта = НЕТ: MMC/MMC_BLOCK/SDHCI/SDHCI_PLTFM/SDHCI_MSM/EFI_PARTITION уже =y), linux/initramfs-emmc1/ (diff linux/ramboot-emmc1.init.diff), linux/artifacts/ramboot-emmc1/ — ядро байт-в-байт usb1 (Image.gz e09d7e81…), DTB 23f6464f…, initramfs ff3c202c…, aurora-emmc1.img 93f61ce7…f8e9f (9631744 B). Логи: logs/uart/emmc1-20260930-005048.{log,raw}, logs/uart/emmc1-fastboot.txt.

  • DTS: &sdhc_1 okay (+alias mmc0); из upstream: bus-width 8, non-removable, mmc-ddr-1_8v, sdc1 pinctrl; vmmc=pm8916_l8 2.9 V, vqmmc=pm8916_l5 1.8 V (= stock L8/L5). sdhc_2 (SD), MSS, WCNSS, BAM-DMUX — disabled; USB/UART — как usb1.
  • init: RO первым делом (до USB): ждёт /dev/mmcblk0 → blockdev --setro на mmcblk0, p1..p27, boot0/1 → getro всем → EMMC-RO-SUMMARY devices=30 all_ro=YES (t≈1.86 s). Затем USB; отчёт по диску только при RO=OK. Нет mount/fsck/mkfs/trim/swap для mmcblk*.
  • Probe: mmc0: SDHCI controller on 7824900.mmc using ADMA; new HS200 MMC card at address 0001; mmcblk0: mmc0:0001 H4G2a 3.64 GiB; p1..p27; mmcblk0boot0/1 4 MiB; mmcblk0rpmb (chardev). Режим: HS200, 8 bit, 1.8 V, 177.78 MHz (debugfs ios) — НЕ DDR52: sdhci-msm включил HS200 по caps контроллера, хотя в DTS нет mmc-hs200-1_8v (ранее заявленное «DDR52 conservative» — неверно). Card appears overclocked; req 177770000, actual 177777777 Hz = округление GCC (+7777 Hz). CRC/tuning/timeout/I/O error: нет.
  • Карта: name H4G2a, manfid 0x90, oemid 0x14a, CID <EMMC_CID> (== Android sysfs), serial 0x<EMMC_SERIAL>, 7634944 × 512 = 3909091328 B.
  • GPT глазами Linux == S2 GPT по всем 27 разделам (номер/start/size), все ro=1. tz p8 0x8400000/0x100000; tzbak p9 0x9504000/0x80000; hyp p10 0x8500000/0x80000; sbl1 p2 0x8000000/0x80000; aboot p4 0x8100000/0x100000; modem p1 0x4000000/0x4000000; boot p22 0xc18c000/0x1000000; recovery p26 0x4918c000/0x1000000; userdata p27 0x4a18c000/0x9ee6fe00.
  • SHA256 через mainline MMC == эталоны Firehose: sbl1 6a661ec9 (stock), rpm 5a9b857b (stock), DDR c3502047 (stock), sec 3b1cae78 (stock), aboot e4addbf8 (lk1st S1), hyp 1a963047 (qhypstub S3), tz 8481892f (DB410c S3), tzbak c6f7db26 (stock tzbak S2). 8/8 MATCH. (Вывод DDR/sec в первом прогоне потерялся на UART; повтор через файл /tmp — rc=0, совпадение.)
  • USB NCM: без регрессий — 18d1:d001, enp0s20f0u2 (jz02-ncm), ping host→Aurora 5/5 (avg 2.68 ms), Aurora→host 5/5 (avg 2.29 ms).
  • Записи: /sys/block/mmcblk0/stat: writes completed 0, sectors written 0 (reads 45 / 8616 sectors). ZERO writes.
  • Предупреждения: overclocked (выше); l13: voltage operation not allowed (было и в usb1; PHY vs фиксированный L13); gcc … sync_state() pending due to 7824900.mmc (информационное).
  • UART-канал теряет куски вывода при всплесках → для данных писать в /tmp и выводить отдельно (или по NCM).

Сессия 13b — software poweroff из RAM-Linux (2026-09-30 01:00) — НЕ работает (перезапуск)

  • Пути в ядре: PSCI SYSTEM_OFF (pm_power_off = psci_sys_poweroff, psci-1.0 от DB410c TZ) и qcom,pshold (POWER_RESET_MSM, PS_HOLD low); результат зависит от PS_HOLD-конфигурации PM8916 (задаётся загрузчиком) и от VBUS (при USB PMIC может снова включиться).
  • Busybox poweroff без -f шлёт сигнал PID 1 (у нас PID 1 = shell-скрипт) → использовать только sync; poweroff -f (прямой reboot(POWER_OFF)).
  • Тест (USB + аккумулятор подключены): sync; poweroff -f → через ~0.4 с SBL1, Start → QHEE/APPSBL/QSEE → lk1st fastboot 18d1:d00d; NCM исчез. Т.е. SoC сбрасывается и сразу грузится заново. Причина (PS_HOLD=reset vs повторное включение по VBUS) не установлена.
  • lk1st fastboot: команды выключения нет (oem: dtb, log, reboot-edl, hash, screenshot).
  • Безопасное выключение сейчас = ручное обесточивание (USB, затем аккумулятор). Безопасно в любой момент: rootfs в RAM, eMMC RO/не используется, в lk1st fastboot записей нет.
  • Возможная будущая проверка (не выполнялась): при отключённом USB подать sync; poweroff -f через UART и смотреть, стартует ли SBL1.

Сессия 14 — B1 (modem FAT RO) + B2 (rmtfs -r + MPSS) (2026-09-30 01:10–01:16) — PASS-11. SIM T2 установлена, не использовалась.

Эталоны ramboot1/usb1/emmc1 не изменены. Новое: linux/dts/msm8916-jz08-aurora-modem1.dts (diff linux/ramboot-modem1.dts.diff), linux/aurora-modem1.config (diff linux/ramboot-modem1.config.diff), linux/initramfs-modem1/ (diff init linux/ramboot-modem1.init.diff, root/bin/modem-up, root/bin/nv-check, пакеты Alpine в dl/ + APK-SHA256SUMS), linux/artifacts/ramboot-modem1/ (Image.gz 95596fb9…, DTB 4269cf0b…, initramfs 010837f4…, aurora-modem1.img 10745c98…7802, 10133504 B). Логи: logs/uart/modem1-20260930-011037.*, logs/modem1/* (файлы с платы получены по NCM через nc -l → ncat --recv-only; UART теряет вывод).

  • Kernel delta vs usb1/emmc1: +REMOTEPROC, REMOTEPROC_CDEV, QCOM_Q6V5_MSS, QCOM_SYSMON (+ select: MDT_LOADER, PIL_INFO, Q6V5_COMMON, RPROC_COMMON, DEV_COREDUMP). BAM_DMUX, WWAN, WCNSS_PIL — off. image_size 22.50 MiB.
  • DTS delta vs emmc1: &mpss okay (+pinctrl sim_ctrl: gpio1 high, gpio20/22/23 low — как stock Aurora gpio-leds/Android runtime); &mpss_mem reg 0x86800000/0x4e00000 (= stock modem_adsp_region 78 MiB; Aurora modem.mdt span 0x86800000..0x8b300000 = stock PIL log); &mba_mem okay (dyn 1 MiB → 0x8e700000). wcnss, bam_dmux, bam_dmux_dma, sdhc_2 — disabled.
  • rmtfs: Alpine v3.24 rmtfs 1.3-r0 (+qrtr-libs 1.2-r1, eudev-libs 3.2.14-r6, musl 1.2.6-r2); APKINDEX C: == JZ02 installed; бинарники == JZ02 (sha256). Исходник v1.3 (b30a3eb3): -r → storage_read_only: open O_RDONLY → RAM shadow; pwrite → RAM; sync no-op; O_RDWR только без -r. -P by-partlabel, -s rproc sync. Команда: rmtfs -r -P -s -v (только через /bin/modem-up, который сперва проверяет getro=1 для modemst1/2/fsc/fsg и ro у /firmware). Драйвер q6v5-mss: auto_boot=false → MSS стартует только по rmtfs -s. B1: RO всем 30 устройствам (t≈1.9 s) → stat до B1: 0 writes → nv_snapshot before → modem по PARTLABEL = mmcblk0p1 (ro=1) → vfat ro,nosuid,nodev,noexec,relatime,…,shortname=lower,errors=remount-ro на /firmware → 53 файла, 53/53 == Aurora reference (firmware-fat-compare.tsv); modem.mdt aabbf109…, mba.mbn ac123b42…, modem.b18 d901d526… — Aurora (≠ JZ02). firmware_class.path=/firmware/image. B1_OK=1. B2 (/bin/modem-up в t=109 s): powering up 4080000.remoteproc → Booting fw image mba.mbn, size 234176 → MBA booted without debug policy, loading mpss → remote processor 4080000.remoteproc is now up (+0.6 s). remoteproc0 running и через 77 s; нет fatal/crash/SSR/wdog. rmtfs жив; /tmp/rmtfs.log содержит только «registering services» (stdout буферизован при перенаправлении в файл — остальное в буфере); косвенно: VmData rmtfs 4656 kB ≈ shadow modemst1+modemst2+fsg+fsc (открываются только по запросу модема); fd: /dev/qcom_rmtfs_mem1 (RAM), сокет QRTR, без mmcblk.
  • NV: modemst1 637a71d1…, modemst2 9bb10190…, fsg b0a3b7e4…, fsc 5f70bf18…, persist ee48a843… — BEFORE == AFTER.
  • eMMC: /sys/block/mmcblk0/stat writes_completed 0, sectors_written 0 (reads 1048 / 258860 sectors — хэши + rmtfs shadow).
  • USB NCM: 18d1:d001, ping host→Aurora 5/5 (2.27 ms), Aurora→host 5/5 (2.31 ms).
  • Warnings: qcom-smsm: mbox_request_channel: can't parse "mboxes" ×3 (upstream smsm без mboxes, информационно), remoteproc0: releasing ×4 (probe deferral), fw_devlink/l13/overclock — как раньше.
  • SIM T2: интерфейсов для неё нет (QMI/WWAN/BAM-DMUX не включены, /dev: rpmsg_ctrl0/1, qrtr-tun, qcom_rmtfs_mem1). К SIM и модему никаких запросов не делалось.

Сессия 15 — B3: QMI control plane + SIM detect + passive NAS (2026-09-30 01:29–01:36) — PASS-11

Эталоны ramboot1/usb1/emmc1/modem1 не изменены. Новое: linux/patches/rpmsg_wwan_ctrl-port-race.patch (из JZ02, sha256 7355d729…), linux/aurora-qmi1.config (diff linux/ramboot-qmi1.config.diff), DTS qmi1 (diff linux/ramboot-qmi1.dts.diff: только model), linux/initramfs-qmi1/ (Alpine qmi-utils/libqmi 1.38.0_git20260414-r0 + closure в dl/ + APK-SHA256SUMS; src/linebuf.c; root/bin/qmi-b3; modem-up diff linux/ramboot-qmi1.modem-up.diff), linux/artifacts/ramboot-qmi1/ (Image.gz faf71c53…, DTB af75e4e3…, initramfs 59e4c52c…, aurora-qmi1.img dae591e1…9652). Логи: logs/uart/qmi1-20260930-012917.*, logs/qmi1/* (b3.txt с маскированными ICCID/IMSI).

  • JZ02 race patch: JZ02V30-UFI-@/openrc/rpmsg_wwan_ctrl-port-race.patch (7355d729…). Исправляет NULL deref в wwan_port_rx ← rpmsg_wwan_ctrl_callback ← rpmsg_wwan_ctrl_probe (JZ02 panic 2026-09-26: порт открыт до возврата wwan_create_port, rpwwan->wwan_port ещё NULL) — присваивает wwan_port в rpmsg_wwan_ctrl_start() до rpmsg_create_ept(). Код Aurora 7.2.7 идентичен контексту → применён (patch -p1 чисто) в /home/q/aurora-kbuild/src. (Примечание: в заметках JZ02 отдельно фигурирует ещё bam-dmux runtime-PM race — не относится к B3, BAM-DMUX выключен.)
  • Kernel delta vs modem1: +WWAN, +RPMSG_WWAN_CTRL (+WWAN_DEBUGFS по умолчанию). BAM_DMUX off, USB qmi_wwan не включался (USB host off).
  • Ошибка по ходу: первый образ qmi1 (cd4c9d98…) — /bin/modem-up без +x (потерян при sed>mv) → «Permission denied», MPSS не стартовал; исправлено (dae591e1…).
  • rmtfs: та же команда rmtfs -r -P -s -v, только LD_PRELOAD=/usr/lib/linebuf.so (setvbuf(stdout,_IOLBF) — механизм stdbuf; linebuf.so bac4480a…). Лог теперь построчно: open /boot/modem_fs1/fs2/fsg/fsc, alloc 917504 => 0x86700000, iovec … read; write = 0 (даже в RAM-shadow).
  • MPSS: t=39.54 powering up → mba.mbn 234176 → MBA booted → 40.13 is now up → 40.74 wwan0at0, wwan0at1, 40.92 wwan0qmi0 attached. Паники нет. rpmsg: DATA5_CNTL/DATA1/DATA4 → rpmsg_wwan_ctrl; IPCRTR → qcom_smd_qrtr; sys_mon → qcom_sysmon; прочие DATA*/DIAG*/apr* без драйвера.
  • qmicli 1.39.0 (Alpine libqmi 1.38.0_git20260414-r0 == JZ02), qmicli -p -d /dev/wwan0qmi0, только get-запросы (/bin/qmi-b3): DMS operating mode 'shutting-down' (HW restricted no; как JZ02 S7 до ручного online); revision MPSS.DPM.1.0.c7-00193-M8916EAAAANVZM-1; DMS UIM state initialization-completed; UIM card status: slot 1 present, USIM app ready, personalization ready, PIN1 disabled (3/10), PIN2 enabled-not-verified; slot 2 no-atr (нет второй SIM); ICCID ; IMSI (MCC/MNC 250-20 = T2). NAS: home-network NotProvisioned; serving system not-registered-searching, CS/PS detached, RAT none; system-info GSM/WCDMA/LTE status none; signal-info InformationUnavailable; system selection pref (READ): mode 'lte', LTE bands 1,3,5,7,8,20,40, network selection automatic, ps-only, roaming any. → модем не зарегистрирован (радио фактически выключено режимом shutting-down/low-power). Режим НЕ менялся.
  • MPSS после запросов: running (uptime 116 s). qmi-proxy запущен (qmicli -p).
  • NV: modemst1 637a71d1…, modemst2 9bb10190…, fsg b0a3b7e4…, fsc 5f70bf18…, persist ee48a843… — BEFORE == AFTER (и == B2).
  • eMMC stat: writes_completed 0, sectors_written 0. USB NCM: ping 5/5 в обе стороны (~2.2 ms). BAM-DMUX: disabled весь B3.

Сессия 16 — B4a: DMS online + пассивное наблюдение (2026-09-30 01:50–01:53) — PASS, автоматическая регистрация T2 LTE

Образ без изменений: ramboot-qmi1 (dae591e1…). Сценарий linux/b4a/b4a.sh (a200d960…; копия в logs/b4a/), результаты logs/b4a/*.

  • Ровно одна SET-команда: qmicli -p -d /dev/wwan0qmi0 --dms-set-operating-mode=online (t=1195.00) → «Operating mode set successfully», rc=0; GET → Mode 'online', HW restricted 'no'. Больше SET/scan/register/attach/bearer не выполнялось.
  • Шкала (39 циклов по ~3 s, только GET serving-system/system-info/signal-info): +0.1 s not-registered-searching, RAT none → +3.2 s registered, PS attached, CS detached, RAT lte, PLMN 250-20 't2', LTE service available → стабильно до +118.7 s. Автоматическая регистрация модемом (network selection automatic из NV), userspace её не инициировал.
  • Signal LTE: при регистрации RSSI -59 / RSRQ -19 / RSRP -97 dBm / SNR -4.0 dB; в конце RSSI -65 / RSRQ -9 / RSRP -87 dBm / SNR 16.2 dB. cell-location: serving PCI 266 RSRP -90.0 RSRQ -7.5 RSSI -65.4; соседи PCI 491 (intra), 357/123 (inter).
  • RF: LTE, active band eutran-1 (B1), EARFCN 100. Home network (теперь provisioned): MCC 250 MNC 20 'TELE2 RU'. Service domain pref ps-only → CS detached ожидаемо.
  • SIM после: slot1 present, USIM ready, PIN1 disabled. Mode online. MPSS running. Паник/SSR/wdog нет.
  • rmtfs после online: 1 запрос записи — iovec 1, not forced / write 0:1792 0x86700000 (EFS caller 1 = modem_fs2, 1792 сектора) → удержан в RAM-shadow (-r).
  • NV на диске: modemst1/2, fsg, fsc, persist — BEFORE == AFTER. eMMC stat: writes 0, sectors_written 0 (до и после).
  • BAM-DMUX: disabled весь B4a (нет wwan0 netdev, ModemManager не запускался). USB NCM: ping 5/5 в обе стороны (~2.3 ms).
  • Следствие для будущего: с rmtfs -r изменения EFS (запись после регистрации) теряются при перезагрузке — ожидаемо и безопасно.

Сессия 17 — B4b1: BAM-DMUX kernel bring-up без bearer (2026-09-30 02:01–02:24) — PASS-11

Эталоны не изменены. Новое: linux/aurora-bam1.config (diff linux/ramboot-bam1.config.diff: +QCOM_BAM_DMUX), DTS bam1 (diff linux/ramboot-bam1.dts.diff: &bam_dmux + &bam_dmux_dma okay), initramfs == qmi1 (59e4c52c…), linux/artifacts/ramboot-bam1/ (Image.gz 9c20a372…, DTB a10056c5…, aurora-bam1.img e24c8e5e…8eca), сценарий linux/b4b1/b4b1.sh (6d54ab6c…). Логи: logs/uart/bam1-20260930-020119.*, logs/b4b1/b4b1/*.

  • JZ02-материалы (тот же Linux 7.2.7): рабочая схема = DT &bam_dmux/&bam_dmux_dma okay (msm8916-ufi.dtsi), probe на старте, отдельного bam-dmux патча нет. Известный риск: трафик через bam-dmux во время остановки MSS → «Failed to resume: -22» (sticky); порядок остановки JZ02 = wwan-quiesce (ip addr flush + link down всех wwan*) ДО остановки rmtfs/MSS. Recovery: unbind/bind /sys/bus/platform/drivers/bam-dmux/{unbind,bind} (устройство 4080000.remoteproc:bam-dmux) по заметкам НЕНАДЁЖЕН; power/control=on и autosuspend_delay_ms=3600000 — лишь смягчение; надёжно — только полное обесточивание. Upstream-фикс «net: wwan: qcom_bam_dmux: fix TX DMA channel use-after-free» (v5, 2026-09-03, Cc stable) в 7.2.7 отсутствует (старый bam_dmux_pc_vote(bool)) и по треду не влит → не бэкпортировался.
  • Код 7.2.7: probe ничего не делает, пока модем не поднимет pc-линию; netdev регистрируются по CMD_OPEN от модема; ndo_open/stop = BAM_DMUX_CMD_OPEN/CLOSE (мультиплексорный канал, не bearer/WDS) + pm_runtime_get_sync.
  • Порядок: eMMC RO → FAT RO → rmtfs -r → MPSS (39 s) → wwan0at0/at1/qmi0 → BAM-DMUX netdev wwan0..wwan7 (DOWN) → mode shutting-down → одна SET --dms-set-operating-mode=online (как B4a; attempt1 t=95.6) → registered 250-20 't2' LTE PS attached.
  • Попытка 1 сценария упала на моей ошибке (nets() затирал глобальный счётчик n → arithmetic error) до up/down; попытка 2 (исправлено) — полный прогон.
  • Runtime PM (device /sys/bus/platform/devices/4080000.remoteproc:bam-dmux, drv bam-dmux, control auto, autosuspend 1000 ms): 5 мин наблюдения — 10/10 suspended, active_ms 0; QMI каждые 60 s: online / registered / PS attached, MPSS running.
  • UP/DOWN wwan0 (без IP, без WDS): up rc=0 → UP,LOWER_UP; PM suspended→active (active_ms 0→1010→3267); down rc=0 → PM suspended (active_ms 4530), через 30 s — suspended. «Failed to resume»: 0. «Channel already open»: 0. Паник нет.
  • QMI после: online, SIM present/USIM ready, registered 250-20 't2', PS attached, RSRP -93 RSRQ -13 RSSI -64 SNR 11.6. MPSS running.
  • rmtfs: 1 write (write 0:1792 0x86700000, modem_fs2) → RAM shadow (-r). NV BEFORE == AFTER, eMMC writes 0 / sectors 0. USB NCM 5/5 в обе стороны.

Сессия 18 — B4b2 попытка 1: прямой qmicli data path (2026-09-30 02:29) — STOP на start-network, bearer НЕ поднят

Образ ramboot-bam1 без изменений. Сценарий linux/b4b2/b4b2.sh (ab5e7844…), результаты logs/b4b2/b4b2/*.

  • Precheck OK: online, registered 250-20, PS attached, LTE, SIM ready, wwan0 DOWN, BAM-DMUX suspended.
  • WDA: qmicli -p -d /dev/wwan0qmi0 --wda-set-data-format="link-layer-protocol=raw-ip" → «Successfully set data format … Link layer protocol: 'raw-ip'», rc=0; но --wda-get-data-format (следующий запуск qmicli = новый WDA-клиент) → '802-3' → raw-ip НЕ подтверждён. Моя ошибка в сценарии: проверка grep 'raw-ip' совпала с выводом SET, а не GET → сценарий не остановился после WDA, как требовалось.
  • Bind: --wds-bind-data-port=a2-mux-rmnet0 --client-no-release-cid → CID '1', rc=0.
  • Start (единственная попытка): --client-cid=1 --client-no-release-cid --wds-start-network="apn=internet,ip-type=ipv4" (auth/user/pass не передавались) → нет ответа, «Operation was cancelled» (~40 s timeout), rc=1; --wds-noop --client-cid=1 → «InvalidClientId». Повторов не было.
  • Точное повторение JZ02 (PLAN-B S9): WDA set per-client, GET через новый клиент = 802-3; reused CID → timeout, release → InvalidClientId. Вывод: многошаговый поток «qmicli через qmi-proxy с --client-cid» на этом стеке неработоспособен (CID/WDA-состояние не переживают процесс qmicli). JZ02 данные поднимал только через ModemManager (держит постоянных клиентов в одном процессе).
  • После: WDS packet service 'disconnected'; online; registered; PS attached; SIM ready; wwan0 DOWN без IP; маршруты — только usb0; BAM-DMUX suspended; MPSS running; dmesg: 0 Failed to resume/Oops/panic; rmtfs — новых запросов нет; NV BEFORE==AFTER; eMMC writes 0 / sectors 0.

Сессия 19 — B4b2 через ModemManager (2026-09-30 02:49–02:57) — bearer CONNECTED, DNS OK, ping по table100 FAIL (не разобрано)

Образ linux/artifacts/ramboot-mm1/aurora-mm1.img 38c960ef… (ядро/DTB = bam1; initramfs + MM 1.25.95_git20260527-r1, libqmi 1.38.0_git, dbus 1.16.2, polkit 127, eudev 3.2.14 + modemmanager-udev (install_if, сперва пропущен мной → "not candidate")); все пакеты == JZ02 (C: и файлы). Сценарии: initramfs-mm1/root/bin/mm-up, b4b2-mm (9b5df90a…); результаты logs/b4b2mm/run3/b4b2mm/*.

  • MM: plugin qcom-soc, primary wwan0qmi0, net wwan0..7, physdev bam-dmux; mm.log: raw-ip / a2-mux-rmnet0 (12 совпадений).
  • mmcli -m 0 --simple-connect="apn=internet,ip-type=ipv4" (одна попытка) → connected Bearer/1, rc=0. IPv4 26.224.4.252/29, gw 26.224.4.253, DNS 176.59.95.243, 176.59.95.242, MTU 1430, interface wwan0.
  • DNS через оператора (host-routes в main): nslookup ya.ru → 5.255.255.242 / 77.88.55.242 → данные через wwan0 проходят.
  • ping -I 77.88.8.8/1.1.1.1/8.8.8.8 через table 100 → 100% loss (причина не разобрана: вероятно моя policy-routing схема; счётчики bam-dmux = 0, драйвер их не ведёт).
  • Disconnect: successfully disconnected, connected: no, wwan0 down, BAM-DMUX suspended, MPSS running. Failed to resume: 0.
  • NV BEFORE==AFTER, eMMC writes 0 / sectors 0.

Сессия 20 — B4b2 retest (SIM T2 с ограничением «только Яндекс»), MM (2026-09-30 05:02–05:05) — DATA PLANE PASS; контент блокирует оператор

Уточнение пользователя: SIM T2 ограничена оператором (только сервисы Яндекса) → 1.1.1.1/8.8.8.8 не критерии; провал ping из сессии 19 не доказывает сбой. Образ aurora-mm1.img 38c960ef… без изменений; tcpdump 4.99.6-r1 + libpcap 1.10.7-r0 (Alpine v3.24, sha256 в logs/b4b2mm2/tcpdump-APK-SHA256SUMS) загружены в RAM (/tmp/td) по NCM. Сценарий linux/b4b2/b4b2-mm2.sh (0fd51f71…), результаты logs/b4b2mm2/b4b2mm2/* (+ wwan0.pcap).

  • Одна попытка mmcli -m 0 --simple-connect="apn=internet,ip-type=ipv4" → connected Bearer/1, rc=0. IPv4 26.221.78.53/30, gw 26.221.78.54, DNS 176.59.95.243/176.59.95.242, MTU 1430, iface wwan0.
  • Маршруты: только /32 через wwan0 в main (77.88.8.8, 77.88.8.1, оба DNS T2, 3 адреса ya.ru); default НЕТ; ip route get 77.88.8.8 → dev wwan0 src LTE-IP; ip route get 172.16.42.2 → dev usb0 (management цел).
  • ping 77.88.8.8: 5 echo request ушли в wwan0, 0 reply (ICMP не пропускается оператором).
  • DNS через T2 DNS: nslookup ya.ru → 77.88.55.242, 5.255.255.242, 77.88.44.242 (+AAAA 2a02:6b8::2:242) — ответы получены по wwan0.
  • HTTP http://ya.ru → TCP SYN/SYN-ACK с 77.88.44.242:80 по wwan0, ответ «HTTP/1.1 302 Found, Location: http://internet-block.t2.ru/?p=LOCKB» → оператор перехватывает и отдаёт страницу блокировки (LOCKB). HTTPS https://ya.ru → «Connection reset by peer» (тоже оператор).
  • tcpdump wwan0: всего 42 пакета, TX (src LTE-IP) 26, RX (dst LTE-IP) 14: DNS-ответы, TCP SYN-ACK/данные HTTP. Счётчики netdev bam-dmux = 0 (драйвер не ведёт).
  • BAM-DMUX: active во время трафика (active_ms до ~33 s), после disconnect → suspended. Failed to resume/-110/-22/EAGAIN: 0.
  • Disconnect: --simple-disconnect → успешно, connected: no; маршруты/адрес удалены; wwan0 down. После: MM registered, PS attached; QMI registered; MPSS running.
  • rmtfs: новых запросов нет. NV BEFORE==AFTER. eMMC writes 0 / sectors 0. USB NCM работал всё время (результаты получены через него).
  • Вывод: LTE data plane (MM qcom-soc → WDA raw-ip → a2-mux-rmnet0 → WDS → bam-dmux wwan0 → IPv4) работает в обе стороны (UDP+TCP). Доступ к контенту даже ya.ru сейчас заблокирован оператором (редирект internet-block.t2.ru ?p=LOCKB) — вопрос SIM/тарифа, не платы.

Сессия 21 — Beeline SIM, финальный cellular test (2026-09-30 13:14–13:27) — STOP: нет регистрации (registration-denied → limited)

SIM заменена пользователем на обесточенной плате (T2 → Beeline). Перед заменой плата была в lk1st fastboot (Linux не работал, bearer не было). Образ linux/ramboot-mm1/aurora-mm1.img 38c960ef… без изменений (sha256 сверен), fastboot boot через lk1st (logs/uart/beeline1-fastboot.txt). UART logs/uart/beeline1-20260930-131418.*; сценарии и результаты logs/beeline1/ (bee-p23.sh 8d3e8cf2…, bee-obs.sh, bee-watch.sh, bee-safe.sh; bee23/, beeobs/, beewatch.txt, prof.txt, beesafe/).

  • Boot: EMMC-RO 30/30, B1_OK=1, NCM usb0 172.16.42.1 (ping OK). modem-up: MPSS up t≈108 s, wwan0qmi0/at0/at1, wwan0..7.
  • P2 (GET): DMS 'shutting-down'; UIM initialization-completed; slot1 present, USIM ready, PIN1 disabled (3/10), personalization ready; slot2 no-atr. ICCID ; IMSI → home 250-99 'Beeline' (SPN 'beeline'). Home network до online: NotProvisioned. NAS not-registered-searching.
  • P3: одна --dms-set-operating-mode=online (t=128.39, rc=0 → Mode 'online'). Далее только GET, без scan/register/band/RAT. +6 s: Selected 3gpp, RAT lte, searching; +97 s (t=226): registration-denied (~20 s); t=247 → снова not-registered-searching и так до t≈626 (конец наблюдения, ~500 s). LTE service 'limited' / True status 'limited-regional', Domain camped, PS detached, Forbidden no, Cell access all-calls. Camped: PLMN 250-99, B3 EARFCN 1275, PCI 390, TAC (cell-location TAC ), GCI ; RSRP −102…−104, RSRQ −19…−20, SNR −7…−1 dB, RSSI −61. Соседи intra PCI 55 (RSRP −100, RSRQ −14.5), 7, 61, 319; inter EARFCN 550 (B1), 3300 (B7). Причина отказа (EMM cause) через QMI GET не получена.
  • LTE attach PDN list '1', профиль 1: APN '' (пусто), ipv4-or-ipv6, auth none — тот же, с которым T2 регистрировалась за 3 s → APN профиля attach не объясняет отказ (не доказано).
  • MM 1.25.95 (qcom-soc): modem найден, state disabled, lock sim-pin2 (PIN2, не блокирует), SIM operator 25099 'beeline'. Bearer/connect НЕ выполнялись (Phase 4 не начата — нет регистрации).
  • Безопасность: NV (modemst1/2, fsg, fsc, persist) BEFORE==AFTER (== B2 эталоны); eMMC writes_completed 0 / sectors_written 0; rmtfs 2× write 0:1792 → RAM shadow (-r). BAM-DMUX suspended, wwan0 DOWN, MPSS running, dmesg без Failed to resume/-110/-22/SSR/wdog. NCM OK.
  • Гипотезы (не проверены): SIM Beeline не активирована/заблокирована для данных или LTE; слабая/перегруженная сота B3 (RSRQ −20, SNR<0). Проверить SIM в телефоне там же (регистрация, LTE, мобильный интернет) до следующей попытки.

Сессия 22 — Beeline, повтор после полного обесточивания (2026-09-30 13:39–14:01) — CELLULAR PASS (Aurora cellular bring-up закрыт)

Контроль: та же SIM в Redmi 9 (crDroid) — LTE 250-99 HOME, rejectCause 0, интернет OK, APN internet.beeline.ru, EARFCN 1275 / PCI 390. Образ aurora-mm1.img 38c960ef… без изменений; UART logs/uart/beeline2-20260930-134119.*, logs/uart/beeline2-fastboot.txt. Сценарии/результаты logs/beeline1/: bee2-diag.sh (98d89ad3…) → bee2/; bee-data.sh (11156676…) → beedata/; bee-data2.sh (94d47de8…) → beedata2/. curl для RAM: Alpine v3.24 curl 8.22.0 + closure (libcurl, libssl3/libcrypto3 3.5.9, nghttp2, c-ares, idn2, psl, unistring, brotli, CA bundle) — linux/beeline/curl/ (APK C: сверены с APKINDEX, SHA256SUMS; cu.tar b5087392…), распакован в /tmp/cu, LD_LIBRARY_PATH (системный libcrypto не заменялся).

  • Регистрация: одна --dms-set-operating-mode=online (t=43.95) → +6.7 s registered, PS attached, 250-99 'Beeline', LTE B3 EARFCN 1275, PCI 55, ECI , TAC ; RSRP −103 / RSRQ −17 / SNR −3.0. Ветка reject-диагностики (AT+CEREG/CEER) не понадобилась — AT-команды не отправлялись. Сравнение с сессией 21 (denied): тогда serving PCI 390, ECI , system-info TAC (cell-location TAC ) — причина отказа не установлена (EMM cause не получен); после cold boot модем выбрал другую соту той же несущей и зарегистрировался сразу.
  • MM qcom-soc формирует bearer так: WDA Set Data Format (raw-ip) → Bind Data Port (a2-mux-rmnet0) → Set IP Family → WDS Start Network с TLV APN/Username/ Auth/IP family — профили модема НЕ создаются/не меняются (0× Create/Modify Profile в mm.log). rmtfs — 0 новых запросов записи.
  • Connect (одна попытка на проход): mmcli -m 0 --simple-connect="apn=internet.beeline.ru,user=beeline,password=beeline,allowed-auth=pap,ip-type=ipv4" → Bearer/1, rc=0. IPv4 10.46.47.17/30, gw 10.46.47.18, DNS 10.10.22.1, 194.186.191.1, MTU 1500, iface wwan0. Внешний IP (CGNAT) <PUBLIC_IP> (1.1.1.1 trace: colo DME).
  • Маршрутизация: ядро без policy routing (ip rule → Operation not supported) → только /32 host-routes через wwan0 в main; default нет (ip route get 8.8.4.4 → unreachable); ip route get 172.16.42.2 → usb0.
  • Проход 1 (beedata): DNS OK (ya.ru, www.google.com через оба DNS Beeline), ping 77.88.8.8 5/5 (avg 49 ms), 1.1.1.1 5/5 (44 ms), HTTP ya.ru 302; HTTPS rc=60 «certificate is not yet valid» — часы RAM-Linux ≈1970 (не сеть: TLS-сертификат получен). Disconnect OK.
  • Часы: date -u -s @<epoch 480s> (только системное время ядра, hwclock/RTC не трогали).
  • Проход 2 (beedata2, те же параметры connect): ping 5/5 оба; HTTPS ya.ru HTTP/2 302 (капча Яндекса), https://www.google.com/generate_204 → 204, https://1.1.1.1/cdn-cgi/trace → 200 TLSv1.3, ssl_verify=0 везде; HTTP ya.ru 302. tcpdump wwan0: 152 пакета, TX 79 / RX 71, DNS 16, ICMP 20, tcp443 102, tcp80 12, SYN 4 / SYN-ACK 4, TLS handshake records 6. Во время данных модем перешёл на B1 EARFCN 550, PCI 147, ECI , TAC (RSRP −105, RSRQ −17, SNR −6.4).
  • BAM-DMUX: active во время трафика, после disconnect suspended; Failed to resume/-110/-22/EAGAIN/SSR/wdog: 0. MPSS running.
  • Disconnect: successfully disconnected, connected: no, /32 routes и адрес удалены, resolv.conf очищен, wwan0 DOWN; MM registered/home, QMI registered+PS attached.
  • NV modemst1/2, fsg, fsc, persist BEFORE==AFTER (оба прохода, == эталоны B2); eMMC writes_completed 0 / sectors_written 0. USB NCM ping OK всё время.
  • Итог: SIM detect, online, automatic registration, PS attach, bearer, IPv4, wwan0 TX/RX, DNS, ICMP, HTTP, HTTPS, clean disconnect — PASS. Замечание на будущее: для TLS в RAM-Linux выставлять время (NTP через wwan0 или date с хоста) до HTTPS.

Сессия 23 — B5 (direct boot из eMMC): Phase 0–1 audit (2026-09-30) — STOP на Phase 1, записей нет

Ничего не записано, к плате не обращались (только анализ файлов зеркала).

  • Блокер 1 (доказан): текущий aboot = lk1st-aurora (e4addbf8…, == readback S1 и == sha из Linux S13) собран с LK2ND_FORCE_FASTBOOT=1 (lk2nd-build/src/build-lk1st-msm8916/config.h; строка «Fastboot mode was forced with compile-time flag.» в aboot-lk1st-aurora.mbn и в UART S1/S2/S3). app/aboot/aboot.c:5647 безусловно ставит boot_into_fastboot=true → normal_boot (lk2nd_boot()/boot_linux_from_mmc()) не выполняется НИКОГДА. ⇒ любая запись только в boot не меняет поведение power-on: lk1st остаётся в fastboot. B5 без изменения aboot невозможен.
  • Блокер 2 (доказан): golden aurora-mm1.img 38c960ef… = 20 606 976 B (Image.gz-dtb 8 658 738 + initramfs.cpio.gz 11 944 942, page 2048)

    boot 16 777 216 B (LBA 396384, 32768 сект.). Даже тот же cpio (40 307 200 B) в xz -9e = 8 340 976 B → итог ≈17.0 MB > 16 MiB. zstd -19 хуже.

  • Попутно (для будущего дизайна): без FORCE_FASTBOOT lk1st сначала вызывает lk2nd_scan_devices() — ext2-mount (RO в LK) всех leaf-разделов ≥ LK2ND_BOOT_MIN_SIZE (+boot) и поиск extlinux/extlinux.conf, затем boot_linux_from_mmc() из boot; при ошибке → «Could not do normal boot» → fastboot. Клавиши lk1st msm8916: RESIN (кнопка RESET Aurora) = KEY_VOLUMEDOWN → fastboot; GPIO107 (pull-up, active-low) = KEY_VOLUMEUP → recovery.

Сессия 24 — B5a (minimal direct boot proof): A1–A3 + подготовка A4 (2026-09-30 14:20–14:40) — ЗАПИСЕЙ НЕТ, ждёт GO

Артефакты b5a/ (SHA256SUMS, копия на 480s сверена), логи logs/b5a/A3/*, UART logs/uart/b5a-a3-20260930-142659.*.

  • A1 сборка: чистые клоны lk2nd 23.1 e9c8b217 (tag 23.1, git clean), тот же toolchain/команда. Контроль воспроизводимости: FORCE=1 → unsigned 58d20d78 (== прошитый), qtestsign 0eef3b5 -v 3 aboot → 003c484e, pad1M → e4addbf8 == текущий aboot (бит-в-бит). Кандидат: та же команда без LK2ND_FORCE_FASTBOOT=1 → unsigned 33c452e4…, signed aboot-lk1st-aurora-autoboot.mbn 327196 B 7b3fb5b3…, pad1M 3b8cd266…0f85. config.h diff = одна строка -#define LK2ND_FORCE_FASTBOOT 1. Все .o без debug-info идентичны, кроме app/aboot/aboot.o (aboot_init: в FORCE-сборке lk2nd_boot/normal path выкинуты как мёртвый код; в autoboot — есть). Строка «Fastboot mode was forced…» в autoboot-бинарнике отсутствует (0 вхождений).
  • Normal boot flow (исходник, autoboot): multislot нет (нет _a/b) → keys (lk2nd device node не матчится: lk1st без LK2ND_COMPATIBLE, cmdline пуст → generic): VOL_UP = GPIO107 pull-up active-low → recovery (там lk2nd = fastboot); VOL_DOWN = PM8916 RESIN (кнопка RESET) → fastboot; обе → EDL; KEY_HOME → false. reboot mode = PON_SOFT_RB_SPARE (обнуляется при полном обесточивании). ABOOT_STANDALONE: devinfo/misc/BCB/ffbm/format-bit не читаются. → lk2nd_boot(): ext2-mount только чтение (ext2 fs_api без write; lk2nd bdev без write; bcache dirty не ставится) на leaf-разделах ≥16 MiB + boot, ищет extlinux; не найдено → boot_linux_from_mmc(): header ANDROID!, page 2048, imagesize ≤ partition, target_use_signed_kernel && !unlocked → не проверяется (standalone unlocked), gzip-распаковка в scratch, update_ker_tags_rdisk_addr (ABOOT_FORCE 0x80080000 → лог «0x80000000»/0x82000000/0x81E00000), dt_size=0 → dev_tree_appended → boot_linux. Тот же scratch-буфер/распаковка/адреса/appended-DTB, что в cmd_boot (fastboot boot), которым emmc1 PASS (сессия 13). Ошибка → «Could not do normal boot» → fastboot.
  • A2 кандидат boot: linux/artifacts/ramboot-emmc1/aurora-emmc1.img 93f61ce7… 9 631 744 B: ANDROID! v0, page 2048, kernel Image.gz+DTB 8 608 417 B (gzip → arm64 Image 22 945 800 B, image_size 0x1670000, text_offset 0; appended DTB 65 425 B = 23f6464f…, model «JZ08AU Aurora (RAM boot EMMC1)»), ramdisk gzip 1 017 983 B, dt_size 0, cmdline earlycon console=ttyMSM0,115200n8 ignore_loglevel loglevel=8 rdinit=/init. b5a/boot-emmc1-16MiB.img = образ + нули до 16 777 216 B → e9579f33…ebff.
  • A3 (живое чтение Firehose, 14:27–14:35): вход mm1 RAM-Linux → reboot -f → lk1st → fastboot oem reboot-edl → 9008. Все чтения rc=0, 15/15 == documented: boot 1342def7 (stock, == partitions/boot.bin), aboot e4addbf8, GPT p 6e850a5d / b 795952a1 (== S2 кандидаты побайтно), sbl1 6a661ec9, rpm 5a9b857b, tz 8481892f, hyp 1a963047, tzbak@305184 c6f7db26, recovery 0dfa60a0, modemst1 637a71d1, modemst2 9bb10190, fsg b0a3b7e4, fsc 5f70bf18, persist ee48a843. printgpt: boot 0xc18c000/0x1000000, aboot 0x8100000/0x100000.
  • Находка (не блокер B5a): warm reboot -f из mainline → lk1st иногда висит после target_init() до «MMC card» ~15 с → сброс SoC → вторая попытка OK (сейчас 14:27:22→14:27:37; ранее сессия 19 02:49:13→02:49:28). 2 из ~6 warm reboot; на cold boot не наблюдалось. Причина не установлена.
  • Подготовлено (НЕ запускалось): b5a/A4-write.sh (7cda9d18…; гейты → boot → readback cmp → aboot → readback cmp → сверка остальных с A3), b5a/A4-rollback.sh (47de97b1…).

Сессия 25 — B5a: запись boot+aboot и 3 cold boot (2026-09-30 14:40–14:59) — B5a PASS

  • Pre-GO offline/RO проверка extlinux (logs/b5a/A4pre/scan-check.{py,out}): lk2nd 23.1 ищет только <part>/extlinux/extlinux.conf; scan list = GPT-разделы ≥16 MiB + boot (вложенных MBR-subdevice нет ни в одном, у mmc1 protective MBR не проходит validate). Живые Firehose-дампы modem 04ada779 (==эталон), system f09ded23, cache 817118e4, userdata 1e021a0c + A3 persist/recovery + кандидат boot; ext-FS: system/persist/cache/userdata — debugfs (RO) «File not found» для /extlinux и /extlinux/extlinux.conf, то же на backup session 1. modem (FAT), boot, recovery — не ext.
  • b5a/A4-write.sh (7cda9d18) без изменений, EDL-сессия из A3: гейты OK → boot Wrote … sector 396384, readback e9579f33 cmp BOOT_MATCH → aboot Wrote … sector 264192, readback 3b8cd266 cmp ABOOT_MATCH → GPT p/b, tzbak, sbl1, rpm, tz, hyp, recovery, modemst1/2, fsg, fsc, persist == A3. Логи logs/b5a/A4/.
  • Состояние флеша теперь: aboot = lk1st-aurora-autoboot (3b8cd266…, без FORCE_FASTBOOT); boot = emmc1 + нули (e9579f33…); остальное как после S3/сессии 4b.
  • Cold boot ×3 (полное обесточивание USB+АКБ пользователем, без хоста/fastboot/reboot -f), UART logs/uart/b5a-cold{1,2,3}-*.log: по одному SBL1, Start → SBL1 End → lk1st welcome to lk → MMC → таблица block devices (== GPT) → boot: Trying to boot from the file system → decompress → appended DTB → PSCI v1.0 → booting linux … ramdisk (1017983) (~1.0 с от lk) → Linux 7.2.7 «JZ08AU Aurora (RAM boot EMMC1)», 4 CPU, 445132K/524288K, MemTotal 482692 kB, eMMC 27 разделов, EMMC-RO-SUMMARY 30/30 all_ro=YES, mmcblk0 writes 0, UDC configured, NCM ping 5/5 (~2.7 ms), shell по UART. 14:52 / 14:54 / 14:57 — 3/3 PASS. Безвредно: Failed detecting MMC/SDC @ slot2 (lk2nd опрашивает пустой SD-слот); окно UART ~280–820 мс lk повреждено (строка «Loading (boot) image» не читается).
  • Как попасть в fastboot теперь: зажать RESET (RESIN = KEY_VOLUMEDOWN) при включении (по коду; на железе не проверялось). Аварийно: HW EDL D+→GND. Откат: b5a/A4-rollback.sh.
  • B5b (extlinux/cache, exact golden mm1) НЕ начат — ждёт отдельного GO.

Сессия 26 — B5b (exact golden mm1 через extlinux): B1–B6 аудит + кандидат (2026-09-30 15:00–15:50) — ЗАПИСЕЙ НЕТ, ждёт GO

Артефакты b5b/ (SHA256SUMS), эмулятор и прогоны b5b/emu/. Плата: emmc1 Linux (B5a baseline), к flash только чтение.

  • B1 (исходник lk2nd 23.1): lk2nd_scan_devices() идёт по списку bio в порядке list_add_head → userdata(p26), recovery(p25), cache(p24), persist, system, boot(p21), modem(p0) (прочие <16 MiB пропускаются; wrp0 не leaf). Для каждого: fs_mount ext2 → lk2nd_try_extlinux("/extlinux/extlinux.conf"); ничего не размонтирует; find_mount/mount сравнивают префикс без границы «/» (ERR_ALREADY_MOUNTED) — до cache ничего не монтируется, конфликтов нет. ext2-драйвер LK: только rev≤1; ro_compat кроме sparse_super|large_file → mount -3; incompat не проверяет (extents/64bit/flex_bg/meta_bg/inline_data прочитает мусором); только прямые/IND/DIND/TIND блоки; group desc 32 B; каталоги линейно (dir_entry_2, filetype ок); write API нет. Парсер extlinux: ключи (регистр не важен) label, default, kernel|linux, initrd, append, fdt|devicetree, fdtdir, fdtoverlays; без DEFAULT → первый label; FDT обязателен (appended DTB в этом пути не используется); пути: абсолютный → "/" + path (// схлопывается), относительный → "/extlinux/"; нужны LF и завершающий \n (иначе «Failed to parse»). Загрузка: kernel файл → scratch 0x90000000 (256 MiB) → gzip (трейлер игнорируется) → kernel @DDR+text_offset(0), initrd @ROUNDDOWN(0x3200000−size,4K), DTB @initrd−2 MiB (max 2 MiB); kernel_max = tags_offset−kernel_offset. Любая ошибка до boot_linux → return → следующий раздел → «Bootable file system not found. Reverting to android boot.» → boot_linux_from_mmc(). Далее общий boot_linux() (как у Android-пути: update_device_tree, ASSERT при сбое DT).
  • B2 golden linux/artifacts/ramboot-mm1/aurora-mm1.img 38c960ef…: v0, page 2048, kernel @2048 8 658 738 B 0ff9c802 (= Image.gz-dtb: gzip 8 592 969 B 9c20a372 + appended DTB @file 8 595 017, 65 769 B a10056c5), ramdisk @8 660 992 11 944 942 B 250bf8ee, паддинги нулевые. Image 23 015 432 B 4603b02f, image_size 0x1680000, text_offset 0. Всё == build-артефактам mm1. Выбор: kernel-файл = точный payload Image.gz-dtb, fdt = точный appended DTB, initrd = точный initramfs, append = точный cmdline.
  • B3 cache: LBA 2133088, 262144 сект., 134 217 728 B (0x4118c000). Живой sha 817118e4 (Firehose A4pre + sha256 /dev/mmcblk0p25 на плате — совпали; поток nc префикс OK). ext4 (Android make_ext4fs): has_journal ext_attr resize_inode filetype extent sparse_super large_file uninit_bg, 4K, inode 256, UUID 57f8f4bc-…, 1554/32768 блоков, содержимое: /backup (пусто), /recovery/last_log (5836 B, stock recovery сессии 3), /recovery/last_install (0). Ценности нет; ≠ session-1 (6a8ab0bd). Несовместим с lk2nd (mount -3, extents). Backup: b5b/backup/cache-current-817118e4.bin (RO).
  • B4 кандидат b5b/cache-extlinux-mm1.img 409bbb11…14ed9, 134 217 728 B, воспроизводим (b5b/mkfs-candidate.sh 045cc857: mke2fs 1.47.2 -t ext2 -O none,filetype,sparse_super, 4K, inode 128, 64 inodes, 1 group, фикс. UUID/hash_seed/время + debugfs sif времён). Файлы: /extlinux/extlinux.conf e14e9ad6 (173 B), /Image.gz-dtb 0ff9c802, /aurora-mm1.dtb a10056c5, /initramfs.cpio.gz 250bf8ee (+lost+found). inode flags 0x0 (block map, IND/DIND). e2fsck -fn rc=0.
  • Эмулятор b5b/emu/lk2nd-scan-emu: реальные boot.c/extlinux.c/util.c, lk2nd bdev wrapper/util, lib/bio, lib/partition, lib/fs, lib/fs/ext2, lib/bcache, lib/zlib_inflate из дерева 23.1 + шимы (bdev из образов по GPT A3, write→abort). S0 (текущий flash): таблица устройств == UART cold boot, mount rc: userdata/cache/persist/system −3, recovery/boot/modem −1 → Android boot (как на плате). S1 (кандидат): «Trying to boot 'mm1'» → boot_linux: kernel 4603b02f @DDR+0, image end +0x1680000, DTB a10056c5 @+0x249B000, initrd 250bf8ee @+0x269B000, cmdline точный. F1–F11 (нет conf/kernel/initrd/dtb, мусор, нет fdt, CRLF, нет \n, битый gzip, нули, битый sb) → все → «Reverting to android boot» (emmc1).
  • Не эмулируется (остаточный риск): зависание/краш LK на повреждённых метаданных; ASSERT в boot_linux (DT) → panic → EDL; ядро стартовало, но Linux упал — fallback нет.
  • Подготовлено (НЕ запускалось): b5b/B5b-write.sh c0ebd361, b5b/B5b-rollback.sh 72d3deb1. Вход в EDL — только HW (D+→GND).

Сессия 27 — B5b: запись cache + cold boot #1 PASS, cold boot #2 HANG (2026-09-30 15:27–15:42) — STOP для анализа

  • GO пользователя: заменить cache целиком. HW EDL (D+→GND) → b5b/B5b-write.sh c0ebd361 без изменений: Serial 0x<SAHARA_SERIAL>, cache 0x4118c000/0x8000000, GPT==A3, boot e9579f33, aboot 3b8cd266, cache 817118e4 (pre) → Wrote … sector 2133088 → readback 409bbb11 cmp CACHE_MATCH → GPT p/b, tzbak, boot, aboot, sbl1, rpm, tz, hyp, recovery, modemst1/2, fsg, fsc, persist == A3; modem, system, userdata == A4pre. Логи logs/b5b/W/, logs/b5b/B5b-write.out.
  • Cold boot #1 (logs/uart/b5b-cold1-20260930-153540.log): 15:36:57 SBL1 → lk1st → booting linux @ 0x80000000, ramdisk @ 0x8269b000 (11944942), tags/device tree @ 0x8249b000 (адреса только extlinux-пути; == эмулятор; golden fastboot: 0x82000000/0x81e00000) → Linux 7.2.7-aurora-bam1 #5 … 04:59:18 (== golden в сессии 22), «JZ08AU Aurora (RAM boot BAM1)», 4 CPU (0-3), Memory 353708K/524288K (== golden), /proc/cmdline == APPEND, EMMC-RO 30/30, writes 0, NCM ping 5/5, shell, remoteproc offline, MM/rmtfs не запущены (штатно для mm1). PASS. Строка «Trying to boot 'mm1'» — в повреждённом окне UART lk 280–950 мс. Ещё 3 SBL1-старта (15:37:22, 15:37:37, 15:37:54) — выпадение аккумулятора (со слов пользователя, контакт нестабилен); все 3 тоже прошли extlinux → mm1; в зачёт не идут.
  • Cold boot #2 (logs/uart/b5b-cold2-20260930-153935.log): 15:41:10 SBL1 Start … QHEE/Image Loaded ×3, QSEE, SBL1 End 15:41:11 → тишина (нет «UART_DM Initialized»/ «welcome to lk»), USB не энумерируется (>40 с). Зависание ДО lk1st (TZ/qhypstub/ранний lk) — до любого чтения cache. Первый такой случай во всех UART-логах проекта (скан всех *.log: SBL1 End без lk — только этот). Причина не установлена (кандидат: нестабильный контакт АКБ). Ничего не писалось, отката не было.
  • Cold boot #2 повтор (АКБ закреплён) 15:43:50: SBL1 → lk1st → extlinux-адреса (0x8269b000/0x8249b000) → mm1: ядро #5 == golden, BAM1, CPU 0-3, 353708K, cmdline == APPEND, RO 30/30, writes 0, NCM 5/5, shell, remoteproc offline, MM/rmtfs нет. PASS.
  • Cold boot #3 (logs/uart/b5b-cold3-20260930-154444.log): 15:45:06 SBL1 Start → pm_device_init (Delta 17202 µs вместо обычных ~11.2–11.8 ms) → boot_config → sbl1_ddr_set_params → Pre_DDR_clock_init Delta → тишина (зависание внутри stock SBL1 до pm_driver_init/Image Load, т.е. до загрузки TZ/HYP/aboot и до чтения cache). 15:49:29 новый старт → SBL1 → lk1st → extlinux → mm1: все проверки как в #2 — PASS.
  • Итог наблюдений: все 6 загрузок, дошедших до lk1st, прошли extlinux → точный golden mm1. 2 ранних зависания (15:41 после SBL1 End; 15:45 внутри SBL1 DDR-init) — оба до кода/данных, изменённых в B5a/B5b; совпадают по времени с нестабильным контактом АКБ. Причина не доказана.
  • 15:49:29 — повторное обесточивание пользователем (подтверждено), не самовосстановление.
  • B5b = PASS / CLOSED (решение пользователя 2026-09-30). Baseline flash: aboot 3b8cd266 (lk1st autoboot), boot e9579f33 (emmc1, fallback), cache 409bbb11 (ext2 extlinux → exact golden mm1), остальное == A3. Power-on без хоста → mm1.
  • ОТКРЫТО (отдельный вопрос, без GO не исследуется): ранние зависания при включении до lk1st — 15:41 (после SBL1 End) и 15:45 (внутри SBL1 DDR-init, pm_device_init 17202 µs vs ~11.3–11.8 ms), на фоне нестабильного контакта АКБ. Также открыт warm reboot -f hang (сессия 24).

Session 28 — B6 RAM-only modem lifecycle (2026-09-30 16:09–16:47 on 480s clock) — B6I NOT REACHED: re-attach alternates PASS/FAIL. Nothing written to flash.

Board: golden mm1 via extlinux (B5 baseline), a single Linux boot for the whole session. Scripts live only in board /tmp. Sources in b6/ (SHA256SUMS), logs in logs/b6/all/ (b6/c1..c6, aurora-modem.d/lifecycle.log, rmtfs.log, mm-*.log with IMSI masked), UART logs/uart/b6-20260930-160910.log. System clock set from 480s (date -u -s @…, RTC untouched) — for HTTPS only.

  • Reconstructed flow (Aurora 14–22 + JZ02 openrc/stopcycle/wwanfix + rmtfs v1.3 source): RO gates → rmtfs -r -P -s -v (with -s rmtfs itself writes "start"; on SIGTERM it does pwrite "stop" to remoteproc state and only then exits → MSS stops while rmtfs is still alive, rmtfs exits last) → MSS running (0.7 s) → wwan0qmi0+wwan0 (0.8 s) +2 s (JZ02 start_post guard) → [NEW gate] UIM card present + USIM ready → qmicli online (one successful SET; retries only on DeviceNotReady — the first 2–3 SETs ~3 s after MSS boot get DeviceNotReady(52)) → NAS registered+PS attached → kill qmi-proxy → udevd/dbus/polkitd/MM → MM modem detected (38–51 s) → MM state disabled is OK (session 22 pass 1: simple-connect enables it) → one simple-connect → IPv4 from bearer, /32 routes only. Stop: simple-disconnect → [NEW] mmcli --disable (low-power/detach) → delete our /32 routes, flush+down all wwan* → SIGTERM MM (+qmi-proxy) → BAM-DMUX suspended → SIGTERM rmtfs (MSS stop → exit).
  • Findings while debugging: this mmcli has no --list-bearers ("error: no actions specified" — also in session 22/JZ02 logs, so the JZ02 wwan-quiesce bearer check was a no-op); mmcli colours values even without a tty (state: ESC[32mconnected) → strip before grep; udevd rewrites /dev/disk/by-partlabel/* as relative links → use readlink -f.
  • PASS cycles (c1, c3, c5): registration 8–53 s, START OK 75–124 s; DNS (ya.ru, google via Beeline DNS), ping 77.88.8.8 3/3 and 1.1.1.1 3/3, HTTP ya.ru 302, HTTPS google 204 + 1.1.1.1 trace 200; STOP 4.0–4.6 s: bearer disconnected, routes/address removed, 0/8 wwan UP, MM/qmi-proxy/rmtfs gone, BAM-DMUX suspended, MSS offline; NCM ping OK.
  • All 6 harness cycles + 5 debug starts (11 MSS boots/stops in one boot): Failed to resume/-110/-22/EAGAIN/crash/fatal/watchdog/Oops = 0; Channel already open: 0..7 on every MSS boot after the first (as on JZ02, harmless); eMMC writes_completed 0 / sectors_written 0; modemst1/2, fsg, fsc, persist == boot == B2 references; 30/30 eMMC devices getro=1.
  • Blocker: attach after MSS restart strictly alternates: c1 PASS, c2 FAIL, c3 PASS, c4 FAIL, c5 PASS, c6 FAIL (and the same across the earlier debug starts). FAIL = 250-99 LTE 'limited', PS detached, not-registered-searching / registration-denied, Forbidden no — the session 21 signature. Not fixed by explicit detach (c3→c4) or by 120 s re-attach holdoff (c5→c6). Every attach right after a successful session was rejected; every attach right after a rejected one succeeded. Hypothesis (not proven): "amnesic EFS" — with rmtfs -r, each rmtfs restart discards the RAM shadow (modem_fs2 write after attach), so every MSS boot presents the stale NAS context from disk (GUTI/KSI/NAS COUNT); the MME rejects it while it still holds the newer context, and a reject clears it. EMM reject cause not obtained (QMI GET has none).
  • Board final state: controller OFF, MSS offline, rmtfs/MM not running (udevd/dbus/polkitd left running), wwan all DOWN, USB NCM OK.