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.
7.4 KiB
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.mdmake -j$(nproc) TOOLCHAIN_PREFIX=arm-none-eabi- LK2ND_DTBS="msm8916-512mb-mtp.dtb" LK2ND_FORCE_FASTBOOT=1 lk2nd-msm8916LK2ND_DTBS— относительноlk2nd/device/dts/msm8916(префиксmsm8916/молча даёт образ без QCDT). Нашout/lk2nd.imgsha256555826ea…d782; с нулями до 16 MiB →0dfa60a0…11e1. - lk1st для
aboot(текущий, autoboot = безLK2ND_FORCE_FASTBOOT):
Разница с forced-fastboot вариантом — одна строка config.h (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)b5a/config.diff). Воспроизводимость проверена: FORCE-сборка дала бит-в-бит прошитый ранее образ (e4addbf8). Наши autoboot: unsigned33c452e4, signed7b3fb5b3, pad1M3b8cd266(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.
Ограничение lk2nd: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.gzimage_size< 30 MiB (DTB кладётся на 0x81E00000). Наш mm1/bam1:Image.gz9c20a372…, 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 trixiebusybox-static 1:1.37.0-6+b9 arm64(deb sha256c833be48…).- Пакеты 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. qhypstub — open source (github.com/msm8916-mainline/qhypstub), можно собрать самому; наш бинарник взят из того же набора, что на JZ02, его точная upstream-ревизия не установлена — сверяйте sha256.