-
released this
2026-10-31 01:43:22 +00:00 | 1 commits to main since this releasev0.2.7 makes English the factory default:
option lang 'en'is now baked directly into the luci base config (feeds/luci luci-base root/etc/config/luci), so LuCI is English on every boot regardless of browser - no runtime script needed. This replaces the flaky uci-defaults approach.Image 13,490,079 B (0xCDD79F), sha
b1e7682ae1ac3a8dfaaad5de205e5a69c571fd575b08ea426256a46e3a5a0837. Bootable size, and retains the 5 GHz firmware (mt7663pr2h.binbaked in via kmod-mt7663-firmware-ap). Also: no auto-failsafe, LAN lan1-3 + wan.Deploy:
tftp 0x43000000 openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage nand erase 0x3a00000 0x2000000 nand write 0x43000000 0x3a00000 0xCDD79F resetAfter boot: English LuCI at http://192.168.1.1, and
dmesg | grep mt76should show the 5 GHz firmware loaded (phy1 on a real channel iniwinfo).Also attached:
bootloader-mod-final3.bin(recommended size-agnostic bootloader) andHANDOVER.md.Known remaining: random MACs; LAN port LEDs not yet mapped.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
released this
2026-10-31 01:38:40 +00:00 | 1 commits to main since this releaseThe proper 5 GHz fix:
mt7663pr2h.binis now baked into the image via thekmod-mt7663-firmware-appackage (no runtime loader, no separate firmware blob flash). Thekmod-mt7916-firmware(unused WiFi-6 blobs) was disabled in.config.Image is 13,486,975 B (0xCDCB7F) - bootable (below the ~13.6 MB early-boot ceiling) and contains the 5 GHz firmware, so it should boot and bring up 5 GHz (MT7613BE) on first probe. sha256
52f3dedfe95330dbffd3400ba481b0861d2eebb8e3cbe1e8fc5ee6d90f980049.Also includes: English LuCI (
lang en), no auto-failsafe, LAN lan1-3 + wan.Deploy (single kernel flash, no blob step):
tftp 0x43000000 openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage nand erase 0x3a00000 0x2000000 nand write 0x43000000 0x3a00000 0xCDCB7F resetAfter boot:
dmesg | grep mt76should show firmware loaded (no 'not found') andiwinfophy1 on a real 5 GHz channel.Note: an earlier v0.2.5 used a runtime firmware loader from NAND (now superseded) - ignore it. MT7916 blobs may still linger (stale rootfs); harmless wasted space, image still boots. Also attached
bootloader-mod-final3.bin(recommended, size-agnostic) andHANDOVER.md.Known remaining: random MACs (board EEPROM MAC not yet wired in); LAN port LEDs not yet mapped.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
released this
2026-10-31 01:02:17 +00:00 | 1 commits to main since this releaseAdds working 5 GHz (MT7613BE) WITHOUT growing the bootable initramfs (which caused the early-boot hang).
The MT7663 firmware is now stored RAW on NAND at absolute 0x4780000 (kernel2/mtd7 offset 0xd80000). A boot
uci-defaultsscript (98-5ghz-fw) reads it into/lib/firmware/mediatek/mt7663pr2h.binand reloadsmt7615ebefore the wireless config comes up, so phy1 initialises with firmware.Two artifacts to flash:
mt7663pr2h.bin- the 5 GHz firmware blob,nand writeto 0x4780000 (0x4401E bytes).openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage- v0.2.5 kernel (13,634,551 B / 0xD00BF7), sha7b7cebdda64d0d1f19686199e2fba3b51896ad2750d58daa27b6e911ae446ad3.
Also includes: English LuCI (
option lang 'en'), no auto-failsafe, LAN lan1-3 + wan, bootable size.Flash:
tftp 0x43000000 mt7663pr2h.bin nand erase 0x4780000 0x20000 nand write 0x43000000 0x4780000 0x4401E tftp 0x43000000 openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage nand erase 0x3a00000 0x2000000 nand write 0x43000000 0x3a00000 0xD00BF7 resetAfter boot phy1 (5 GHz) should show a real channel + Tx power and a visible SSID.
Also attached:
bootloader-mod-final3.bin(size-agnostic bootloader - recommended, avoids the truncation-on-bigger-image hang) andHANDOVER.md.Known remaining: radios use random MACs (board EEPROM MAC not yet wired in).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-10-30 17:23:10 +00:00 | 1 commits to main since this releaseClean rebuild of the recommended bootable image. This is the one to flash if the device must simply boot.
What it contains:
- no auto-failsafe (WPS key disabled in DTS)
- LAN on lan1-3 + wan (02_network f670l case)
- English LuCI (uci-defaults
99-luci-ensetsluci.main.lang=eneach boot) - Bootable size (13,635,551 B), same memory footprint as the proven v0.2.2 - does NOT force firmware into the size-limited rescue initramfs.
Note on 5 GHz: the MT7663 firmware is deliberately kept out of the initramfs (bundling it grows the image past the early-boot limit and hangs
Starting kernel, as seen in v0.2.3). 5 GHz is 2-plane/2.4 GHz only in this build until the firmware is delivered via a persistent rootfs (separate bring-up).Artifacts:
openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage- 13,635,551 B (0xD00FDF), sha256e625951157db63e157997006876505522b965a20b8c23383130ab74e350aa99b.bootloader-mod-final3.bin- size-agnostic bootloader (reads full 32 MiB slot so any image size boots).HANDOVER.md.
Deploy (raw kernel, size-agnostic bootloader):
tftp 0x43000000 openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage nand erase 0x3a00000 0x2000000 nand write 0x43000000 0x3a00000 0xD00FDF resetAfter boot: English LuCI at http://192.168.1.1, LAN up, 2.4 GHz. If on bootloader-mod-final2 (specific-size), you would need to match the size; final3 is size-agnostic.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-10-30 16:38:58 +00:00 | 1 commits to main since this releaseUpdate to v0.2.2: adds the MediaTek 5 GHz (MT7613BE/MT7663) firmware so the radio actually transmits/scans.
The 5 GHz phy1 was probing but had no firmware (
mt7663pr2h.binmissing,mt7663pr2h_rebb.binfallback also missing), so it showed Channel 0 / 0 dBm and could not beacon or scan. This build ships/lib/firmware/mediatek/mt7663pr2h.bin(+ the_rebbfallback) in the initramfs (verified present in the built vmlinux-initramfs).Keeps all prior fixes (no auto-failsafe, LAN on lan1-3 + wan, English LuCI via uci-defaults).
Artifacts:
openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage— 13,793,439 B (0xD2789F), sha25674a273b4ca4e898c15bff16359ea62a7100561a6346b86532b015c3963ccc74a.bootloader-mod-final2.bin— unchanged, re-attached.HANDOVER.md.
Deploy (bootloader unchanged; just update the raw kernel):
tftp 0x43000000 openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage nand erase 0x3a00000 0x2000000 nand write 0x43000000 0x3a00000 0xD2789F # = 13,793,439 B resetAfter boot,
iwinfo/dmesgon phy1 should show a real channel + Tx power, and 5 GHz SSIDs become visible.Note: both radios still use random MACs (board EEPROM MAC not yet wired into OpenWrt) - a separate bring-up item.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-10-30 15:47:14 +00:00 | 1 commits to main since this releaseUpdate to v0.2.1: forces LuCI UI language to English on every boot.
A uci-defaults script (
99-luci-en) in the image runsuci set luci.main.lang=enat each boot, so LuCI is English even on the initramfs (no persistent overlay needed). All v0.2.1 fixes are included (no auto-failsafe, LAN on lan1-3 + wan, LuCI).Artifacts:
openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage— rebuilt kernel, sha2562f0d01709b37b531bc1bf6ea4b34db05e793863f5595a648c8b4d1f9188b0139, 13,632,727 B (0xD004D7).bootloader-mod-final2.bin— unchanged v0.2.0 bootloader, re-attached.HANDOVER.md.
Deploy (bootloader unchanged; just update the raw kernel):
tftp 0x43000000 openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage nand erase 0x3a00000 0x2000000 nand write 0x43000000 0x3a00000 0xD004D7 # = 13,632,727 B (use tftp-reported size) resetAfter boot: normal boot, LAN 192.168.1.1, LuCI at http://192.168.1.1 in English.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-10-30 15:35:09 +00:00 | 1 commits to main since this releaseUpdate to v0.2.0 with two OpenWrt board bring-up fixes (knight v0.2.1 image).
The v0.2.0 bootloader (bootloader-mod-final2.bin) stays the same; this is a rebuilt initramfs with the fixes below.
What's fixed (vs v0.2.0):
- Auto-failsafe: the WPS key GPIO (gpio1 line 4, active-low) reads as permanently "pressed", so OpenWrt entered failsafe every boot. The
key-wpsnode is disabled in the board DTS. Failsafe is still reachable via the consolefkey. - LAN bring-up:
02_networknow has azte,zxhn-f670lcase -> LAN bridge onlan1 lan2 lan3, WAN onwan(previously it fell to the defaultlan4which does not exist, so the NIC was misconfigured). LuCI is confirmed included (luci,uhttpd).
Artifacts:
openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage— the rebuilt, fixed OpenWrt kernel (sha256fb809a263f29e61bf9064899298a9a71998a1df70f6459abed37d92baa829478).bootloader-mod-final2.bin— the v0.2.0 patched bootloader, re-attached for a complete deploy.HANDOVER.md— full procedure and notes.
Deploy (no bootloader change needed if v0.2.0 already installed; just update the raw kernel):
tftp 0x43000000 openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage nand erase 0x3a00000 0x2000000 nand write 0x43000000 0x3a00000 0xD00B6F # = 13,634,415 bytes (use the size tftp reports) resetFresh install (also write the bootloader): see v0.2.0 release notes.
CAUTION: the bootloader write (0x0-0x180000) remains the one permanent-brick-risk operation. See HANDOVER.md §9.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Auto-failsafe: the WPS key GPIO (gpio1 line 4, active-low) reads as permanently "pressed", so OpenWrt entered failsafe every boot. The
-
Persistent OpenWrt boot Stable
released this
2026-10-30 14:54:32 +00:00 | 2 commits to main since this releasePersistent OpenWrt boot on the ZTE ZXHN F670L (ZX279128S).
The vendor
fsloadwhole-flash JFFS2 loader cannot reconstruct the large incompressible OpenWrt0uImageon-device (corrupt from ~chunk 33 regardless of inode/compression/isolation; byte-perfect offline). This release therefore boots the kernel from a RAW NAND copy via a patched bootloader, bypassingfsload.Artifacts
bootloader-mod-final2.bin— patched bootloader: defaultbootcmddoessetenv bootargs console=ttyAMA0,115200n8; nand read 0x43000000 0x3a00000 0xcfeb8f; bootm 0x43000000;and thefsload_skip_bad_offsetflood is NOP'd. Install at NAND offset 0x0.openwrt-f670l-initramfs.uImage— OpenWrt kernel (13,626,255 B), written RAW to NAND0x3a00000.f670l-flash— on-device partition/flash tool.HANDOVER.md— full procedure, RE notes, and caveats.
Install
tftp 0x43000000 openwrt-f670l-initramfs.uImage nand erase 0x3a00000 0x2000000 nand write 0x43000000 0x3a00000 0xcfeb8f tftp 0x44000000 bootloader-mod-final2.bin nand erase 0x0 0x180000 nand write 0x44000000 0x0 0x180000 # power-cycle -> OpenWrt boots automaticallyCAUTION: the bootloader write (0x0-0x180000) is the one operation with permanent brick risk if done wrong; there is no backup U-Boot copy. See HANDOVER.md §9.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v0.1.0 Stable
released this
2026-10-28 14:53:35 +00:00 | 14 commits to main since this releaseF670L OpenWrt port v0.1.0 — ZTE ZXHN F670L (Sanechips ZX279128S) GPON ONT.
Reverse-engineered the F670L boot/update model (slot = version header + little-endian ZTE JFFS2 with kernel file '0uImage', boot selected by NVRAM BootImageNum) and built a working OpenWrt image + a guarded flash tool.
Assets
- openwrt-f670l-slot.bin — OpenWrt Linux 6.18.55 + LuCI WebUI packed as a valid F670L slot (inactive kernel1 target)
- openwrt-sanechips-generic-zte_zxhn-f670l-squashfs-sysupgrade.bin — sysupgrade image
- openwrt-sanechips-generic-zte_zxhn-f670l-initramfs.uImage — RAM-boot/rescue
- f670l-flash — static ARM tool (info / boot / write-slot / read-slot)
Verified on-device
SMP (dual A9), SPI-NAND 256MiB, 4x GbE, MT7603E (2.4G) + MT7663 (5G) radios.
USB is disabled on this SoC family (probing it resets the watchdog).Key facts (F670L-FLASH-RE.md)
- slots: kernel1 @0x01a00000, kernel2 @0x03a00000, 32MiB each
- boot: BootImageNum @0x00200000 (0=kernel1, 1=kernel2)
- kernel: '0uImage' inside LE ZTE JFFS2, zlib compr=6, load 0x40008000
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads