# AXP313A / cpufreq candidate kernel The production application version is intentionally unchanged. This directory describes the separately named `6.1.31-matrix-axp313a1` kernel used to repair the WalnutPi ZeroW PMIC binding. Source inputs are fixed to: - WalnutPi Linux branch `6.1.31`, commit `30ff3fd5cf45417622b447a12e7a947402ffe34d`. - Upstream MFD commit `75c8cb2f4cb218aaf4ea68cab08d6dbc96eeae15`. - Upstream regulator commit `60fd7eb89670d2636ac3156881acbd103c6eba6a`. - Upstream identifier fix `4628b804555773daa982d9578d89fe04fcdde374`. The build used the official GitHub archive named `walnutpi-linux-6.1.31-30ff3fd5.tar.gz`; its measured SHA-256 is `8659bb3d64313c4693c3605374167a8145186e5c9d43eb771a52a7359699302f`. The fixed archive is registered at `发布更新相关/其他依赖/kernel-source/walnutpi-linux-6.1.31-30ff3fd5/` so the kernel can be rebuilt without network access. It is a build input and is never copied into an IMG or OTA. The exact production files accepted by the browser and real HUB75 GPIO tests are registered at `发布更新相关/其他依赖/aarch64-kernel/6.1.31-matrix-axp313a1/`. Future IMG exports install this precompiled payload and do not rebuild the kernel unless patches, DTS, or kernel configuration change. `scripts/build_axp313a_kernel.sh` accepts an already extracted source tree and a copy of the running board's `/boot/config-6.1.31`. It never downloads dependencies. The three verbatim upstream patches, the WalnutPi 6.1 reconciliation patch, and the board DTS patches are verified against `patches/SHA256SUMS` before use. WalnutPi's branch already contains a partial AXP313A backport, so the reconciliation patch asserts that baseline and completes the three pinned upstream changes using the vendor kernel's older power-off API. The follow-up DTS patch keeps the bootloader's DLDO1 VCC-IO rail explicitly always-on at 3.3V; DCDC3 remains at the measured bootloader value of 1.10V so the candidate does not raise a non-CPU rail. The final local build-only patch replaces a vendor UWE5622 Makefile's output-tree-relative include lookup with Kbuild's `$(srctree)` path. It is required only so the unchanged board configuration can be built in the isolated `O=` directory; it does not change driver logic. A second mechanical build-only patch applies the same `$(srctree)` correction to the five Realtek module directories identified in the first config audit. A third patch covers the separately enabled RTL8192EU directory. A fourth covers the enabled `CONFIG_88XXAU=m`/RTL8812AU directory found by auditing every vendor entry in the wireless parent Makefile, rather than only symbols prefixed `RTL`. Its PHYDM include root is fixed in a separate final patch so each discovered build assumption remains independently auditable. These patches do not change C source, feature selection, or runtime paths. The RTL88x2CS `CONFIG_RTL8822C` branch has one additional `TopDIR` include fixed to `$(srctree)` after the full module build reached that otherwise output-tree-relative file. The install path is deliberately separate from the vendor kernel: - `/boot/Image-matrix-axp313a1` - `/boot/sun50i-h616-walnutpi-1b-matrix-axp313a1.dtb` - `/boot/sun50i-h616-walnutpi-1b-emmc-matrix-axp313a1.dtb` - `/lib/modules/6.1.31-matrix-axp313a1` The managed boot script consumes `/boot/matrix-kernel-good` once before each candidate boot. Only `matrix-axp313a-health.service` recreates it after the kernel, AXP313A, cpufreq, application, and HUB75 checks pass. If the candidate fails and reboots, the absent marker selects the original `Image` and original DTB. Original boot files are retained as `.matrix-original` copies.