uzbek-plus/docs/BUILD.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

83 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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

# BUILD — воспроизводимая пересборка
Всё ниже собирается из публичных исходников + файлов этого репозитория. Готовые бинарники в репозиторий не кладутся;
для сверки даны sha256 наших сборок. Где точная команда в проекте не записывалась — это помечено **(не записано)**:
функционально эквивалентный результат получится, побайтовое совпадение не гарантируется.
## 1. lk2nd / lk1st (lk2nd 23.1)
- Источник: https://github.com/msm8916-mainline/lk2nd.git, tag **23.1**, commit `e9c8b21735c13dd7ace808b1e35451638f0a0c6d`.
- Toolchain: `arm-none-eabi-gcc 14.2.1 20241119` (Debian 15:14.2.rel1-1), GNU Make 4.4.1, DTC 1.7.2.
- **lk2nd для `recovery`** (fastboot, для RAM boot): см. `lk2nd-build/BUILD.md`
```
make -j$(nproc) TOOLCHAIN_PREFIX=arm-none-eabi- LK2ND_DTBS="msm8916-512mb-mtp.dtb" LK2ND_FORCE_FASTBOOT=1 lk2nd-msm8916
```
`LK2ND_DTBS` — относительно `lk2nd/device/dts/msm8916` (префикс `msm8916/` молча даёт образ без QCDT).
Наш `out/lk2nd.img` sha256 `555826ea…d782`; с нулями до 16 MiB → `0dfa60a0…11e1`.
- **lk1st для `aboot`** (текущий, autoboot = без `LK2ND_FORCE_FASTBOOT`):
```
make -j$(nproc) TOOLCHAIN_PREFIX=arm-none-eabi- LK2ND_BUNDLE_DTB=msm8916-512mb-mtp.dtb lk1st-msm8916
# подписать выход сборки lk1st тестовым ключом: qtestsign (github.com/msm8916-mainline/qtestsign, commit 0eef3b5), режим `-v 3 aboot`
# (точный путь входного .mbn в проекте не записан — это emmc_appsboot.mbn из каталога сборки lk1st-msm8916)
# затем дополнить нулями до размера раздела aboot (1 MiB)
```
Разница с forced-fastboot вариантом — одна строка config.h (`b5a/config.diff`). Воспроизводимость проверена:
FORCE-сборка дала бит-в-бит прошитый ранее образ (`e4addbf8`). Наши autoboot: unsigned `33c452e4`, signed `7b3fb5b3`,
pad1M `3b8cd266` (`b5a/SHA256SUMS`, лог `b5a/build-autoboot.log`).
## 2. Ядро Linux 7.2.7 arm64
- Источник: Linux stable **v7.2.7**, commit `f42acb3678424d1e08f6ed27c0d8ba8a125e14d6` (git.kernel.org stable).
- Патч: `linux/patches/rpmsg_wwan_ctrl-port-race.patch` (присвоение `wwan_port` до `rpmsg_create_ept`; без него — NULL deref
в `wwan_port_rx` при раннем открытии порта).
- Toolchain: `aarch64-linux-gnu-gcc (Debian 14.2.0-19) 14.2.0`. Собирать на локальном диске (virtiofs даёт clock skew).
- Config: полный итоговый `.config` каждой стадии — `linux/artifacts/<stage>/kernel.config` (надёжный якорь);
история: `defconfig` + `linux/aurora-ramboot1-v2.config`, затем по очереди фрагменты `aurora-usb1/emmc1/modem1/qmi1/bam1.config`
(`scripts/kconfig/merge_config.sh` поверх предыдущего `.config`; дельты — `linux/ramboot-*.config.diff`). MODULES=n.
```
git -C linux-stable checkout f42acb3678424d1e08f6ed27c0d8ba8a125e14d6
patch -p1 < linux/patches/rpmsg_wwan_ctrl-port-race.patch
mkdir out && cp linux/artifacts/ramboot-mm1/kernel.config out/.config
make O=out ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- olddefconfig
make O=out ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) Image.gz
```
Ограничение lk2nd: `image_size` < 30 MiB (DTB кладётся на 0x81E00000). Наш mm1/bam1: `Image.gz` `9c20a372…`, image_size 0x1680000.
## 3. DTB
`linux/dts/msm8916-jz08-aurora-*.dts` — наши DTS поверх upstream `msm8916.dtsi`/`msm8916-pm8916.dtsi` из того же дерева 7.2.7.
Сборка вне дерева: `linux/build-dtb.sh <basename>` (cpp + dtc, `src` = дерево ядра). Golden mm1 использует
`msm8916-jz08-aurora-bam1.dtb` (`a10056c5…`). Отличия стадий — `linux/ramboot-*.dts.diff`.
## 4. initramfs
- `busybox`: Debian trixie `busybox-static 1:1.37.0-6+b9 arm64` (deb sha256 `c833be48…`).
- Пакеты Alpine **v3.24 aarch64**: точные версии и sha256 — `linux/initramfs-*/dl/APK-SHA256SUMS`
(mm1: 36 пакетов: rmtfs 1.3, qrtr, libqmi/qmi-utils 1.38.0_git20260414, ModemManager 1.25.95_git20260527, dbus, polkit, eudev,
**modemmanager-udev** обязателен). Замыкание зависимостей — `linux/*-apk-closure*.txt`.
- `linebuf.so` (построчная буферизация stdout для логов rmtfs): `linux/initramfs-qmi1/src/linebuf.c`.
- Наши файлы: `init`, `root/bin/*` (modem-up, mm-up, nv-check, qmi-b3, …), `root/etc/passwd|group`.
- Сборка: распаковать `.apk` (tar.gz) в `root/`, положить busybox и наши файлы, затем
`gen_init_cpio linux/initramfs-mm1/initramfs.list | gzip -9 -n > initramfs.cpio.gz` **(точные флаги сжатия не записаны)**.
`initramfs.list` перечисляет ровно то, что попадает в образ. Наш mm1: `250bf8ee…` (11 944 942 B).
- Принцип init: **первым делом** `blockdev --setro` на все mmcblk* (проверка getro=1), modem FAT монтируется только `ro`,
`firmware_class.path=/firmware/image`; никаких mount/fsck/mkfs/trim на eMMC.
## 5. Android boot image (для `fastboot boot` и раздела boot)
Формат v0, page 2048, kernel = `Image.gz` + appended DTB (`cat Image.gz <dtb> > Image.gz-dtb`), ramdisk = `initramfs.cpio.gz`,
cmdline `earlycon console=ttyMSM0,115200n8 ignore_loglevel loglevel=8 rdinit=/init` (`linux/artifacts/*/cmdline.txt`).
Инструмент сборки **(не записано; любой mkbootimg v0)**. Проверка/распаковка: `tools/bootimg.py`.
Наши: golden `aurora-mm1.img` `38c960ef…`, rescue `aurora-emmc1.img` `93f61ce7…` (в `boot` — он же + нули до 16 MiB = `e9579f33…`).
## 6. Образ cache (ext2 + extlinux) — детерминированный
`b5b/mkfs-candidate.sh` (mke2fs 1.47.2, фиксированные UUID/hash_seed/время) из `b5b/components/`
(`Image.gz-dtb`, `aurora-mm1.dtb`, `initramfs.cpio.gz`, `cmdline.txt`) → `cache-extlinux-mm1.img` **`409bbb11…`**, ровно 134 217 728 B.
Ограничения ext2-драйвера lk2nd (rev ≤ 1, без extents/64bit/flex_bg, FDT обязателен, LF + завершающий `\n`) — NOTES сессия 26.
Перед записью прогоните эмулятор сканирования lk2nd: `b5b/emu/` (реальный код lk2nd 23.1 + шимы, список исходников `srclist`).
## 7. Бинарники bootchain, которые не собираются здесь
DB410c TZ и qhypstub — см. [BLOBS.md](BLOBS.md). qhypstub — open source (github.com/msm8916-mainline/qhypstub), можно собрать самому;
наш бинарник взят из того же набора, что на JZ02, его точная upstream-ревизия не установлена — сверяйте sha256.