NETGEAR EAX17
The NETGEAR EAX17 is an 802.11ax (Wi-Fi 6) wall-plug range extender based on the MediaTek MT7981B SoC (Filogic 820). It is sold under multiple SKUs that share the same hardware platform and firmware: EAX11v3, EAX12v2, EAX14v3, EAX15v3, EAX16, EAX17, EAX19. The GPL source tarball published by Netgear is named EAX17_EAX16_EAX15v3_GPL_V1.0.1.34_src.tar.gz, confirming the shared codebase. The OpenWrt firmware-selector lists a single build for all seven SKUs.
This page documents installation on the EAX17. The procedure is expected to apply identically to the other SKUs in the family, but has not been independently confirmed on all of them — confirmations welcome.
Supported Versions
Hardware Highlights
Installation
→ Install OpenWrt (generic explanation)
Use OpenWrt 25.12.3 or later (or a snapshot dated 2026-04-08 or later). Earlier 25.12.x releases (25.12.0 through 25.12.2) ship a broken
factory.img for the EAX17 due to an incorrect rootfs hash in the FIT node when CONFIG_TARGET_PER_DEVICE_ROOTFS is enabled in buildbot builds. The fix was merged in PR #22839 and backported to 25.12.3.
Note: the OEM web interface accepts the OpenWrt factory.img but the resulting device state appears bricked from the user's perspective — LAN unreachable, WebUI no longer responding. The flash itself completes successfully, but only one of the two dual-boot slots is written, leaving the device in the same broken mixed-boot state as a single nmrpflash run (OpenWrt kernel attempting to mount the original Netgear stock rootfs). The situation is fully recoverable with nmrpflash afterwards, but there is no good reason to take this detour — install directly via nmrpflash from the start.
Installation procedure (no UART required)
This procedure has been confirmed on factory-fresh EAX17 devices. It uses only nmrpflash over Ethernet — no serial console, no case opening, no soldering.
Prerequisites
- A computer (Linux or macOS) with an Ethernet port.
- The OpenWrt
factory.imgfor the EAX17, version 25.12.3 or later, downloaded from the firmware-selector. - Direct Ethernet connection between the computer and the EAX17 (no switch in between). No static IP configuration is required on the computer —
nmrpflashnegotiates addressing with the device's bootloader directly.
Step-by-step
- Unplug the EAX17 from mains.
- On the computer, start
nmrpflash(replace<iface>with your Ethernet interface name, e.g.eth0on Linux,en6on macOS):sudo nmrpflash -i <iface> -f openwrt-25.12.3-mediatek-filogic-netgear_eax17-squashfs-factory.img
- When
nmrpflashprintsWaiting for Ethernet connection, plug the EAX17 back into mains. - Observe the front LED. Expected sequence: solid red → blinking red (NMRP transfer in progress) → blinking green (image accepted, internal flash in progress).
- Wait at least 60 seconds on blinking green. The device does not auto-reboot after NMRP. Unplugging too early will corrupt the flash.
- Unplug and replug the EAX17 to trigger a reboot.
- Run
nmrpflasha second time with the samefactory.img. This writes OpenWrt to the other slot of the Netgear dual-boot UBI layout. Same LED sequence, same wait, same manual power-cycle. - The device now boots OpenWrt (LED becomes solid green), but Ethernet is initially unreachable: the UBIFS overlay still contains stock-userspace configuration from the first mixed boot.
- Press the recessed Reset pinhole (paperclip or pin) for 5 seconds. The device reboots and comes up cleanly on
192.168.1.1with working LAN and DHCP. Wi-Fi radios are disabled by default and must be configured explicitly.
Total wall-clock time: approximately 5 minutes.
Why two flashes plus reset
The EAX17 uses a Netgear dual-boot UBI layout with two slots (kernel/rootfs and kernel2/rootfs2). NMRP writes to the inactive slot. After the first flash, the bootloader switches to the freshly-written slot and boots the OpenWrt kernel — but it passes a Netgear-specific boot_param.boot_image_slot parameter on the kernel command line that the OpenWrt kernel does not honor. The kernel falls back to OpenWrt's standard mount_root logic and mounts the UBI volume literally named rootfs (slot 0), which on first install still contains the original Netgear stock rootfs. The result is the OpenWrt kernel running on top of stock userspace.
A second NMRP flash writes OpenWrt to the other slot as well, so that both slots now contain OpenWrt and the kernel mounts an OpenWrt rootfs regardless of which slot is active.
The post-install reset is required because the UBIFS overlay (rootfs_data) was populated by stock Netgear init scripts during the first mixed boot. Those leftover files shadow OpenWrt's defaults — most visibly preventing br-lan from coming up with 192.168.1.1 and the DHCP server from starting. A firstboot (via the physical pinhole Reset button) wipes the overlay and lets OpenWrt regenerate clean defaults.
For background discussion of this mechanism, see the EAX15v3 / EAX17 support thread on the OpenWrt forum.
Flash Layout
cat /proc/mtd dev: size erasesize name mtd0: 00100000 00020000 "bl2" mtd1: 00080000 00020000 "u-boot-env" mtd2: 00200000 00020000 "factory" mtd3: 00200000 00020000 "fip" mtd4: 05000000 00020000 "ubi" mtd5: 00200000 00020000 "facenv" mtd6: 00600000 00020000 "rae" mtd7: 00020000 00020000 "pot" mtd8: 00040000 00020000 "log"
The ubi partition (80 MiB) contains 6 UBI volumes. The table below reflects the post-installation state (i.e. after the full installation procedure including the factory reset). Sizes are dynamic for kernel/rootfs slots — they are resized at each sysupgrade to fit the flashed image exactly — and for rootfs_data, which is recreated and expanded to claim all remaining free PEBs during firstboot.
| Volume ID | Name | Size (typical) | Purpose |
|---|---|---|---|
| 0 | u-boot-env | 620 KiB (5 LEBs) | Active U-Boot environment (the MTD u-boot-env partition is the initial / backup location) |
| 1 | kernel | 4.3 MiB (36 LEBs) | Slot 0 kernel FIT image |
| 2 | rootfs | 4.4 MiB (37 LEBs) | Slot 0 squashfs rootfs |
| 3 | kernel2 | 4.3 MiB (36 LEBs) | Slot 1 kernel FIT image |
| 4 | rootfs2 | 4.4 MiB (37 LEBs) | Slot 1 squashfs rootfs |
| 5 | rootfs_data | 56 MiB (463 LEBs) | UBIFS writable overlay (/overlay); claims all remaining PEBs after firstboot |
Upgrading OpenWrt
<note warning> Customised images produced by the firmware-selector (with custom package lists) may fail to boot on the EAX17 even when the image itself is correctly sized, due to the FIT rootfs hash not being regenerated when image-builder rebuilds the squashfs with different packages. Symptoms are identical to the original PR #22839 bug.
The reliable workaround is to flash the standard (non-customised) image and then install additional packages at runtime via apk (the package manager used in OpenWrt 25.12 and later, replacing opkg). The 46 MiB rootfs_data overlay provides plenty of headroom for typical extender setups.
</note>
LuCI Web Upgrade Process
- Browse to
http://192.168.1.1/cgi-bin/luci/admin/system/upgrade/ - Upload the
sysupgrade.binimage - Wait for reboot
Terminal Upgrade Process
cd /tmp wget https://downloads.openwrt.org/releases/25.12.4/targets/mediatek/filogic/openwrt-25.12.4-mediatek-filogic-netgear_eax17-squashfs-sysupgrade.bin sysupgrade /tmp/openwrt-25.12.4-mediatek-filogic-netgear_eax17-squashfs-sysupgrade.bin
Debricking
The EAX17 bootloader supports NMRP (Netgear Memory Recovery Protocol), which listens during the early boot window regardless of the firmware state. As long as the bootloader itself is intact, nmrpflash can recover the device by flashing the stock Netgear firmware (available from the Netgear support site) using exactly the same procedure as the OpenWrt installation above. After a successful recovery to stock, OpenWrt can be re-installed using the procedure in Installation procedure.
Failsafe mode
Failsafe mode is entered by pressing 8 followed by Enter on the serial console during the early boot window. As serial console access requires opening the case and connecting to the UART pads (see Serial below), the practical recovery path for most users is the NMRP procedure documented above.
Basic configuration
→ Basic configuration After flashing, proceed with this.
Set up your network role (typically as a dumb AP / extender behind an existing router), configure wireless, etc.
Network interfaces
The default network configuration is:
| Interface Name | Description | Default configuration |
|---|---|---|
| br-lan | LAN & WiFi | 192.168.1.1/24 |
| eth0 | LAN port (single) | bridged into br-lan |
| phy0 | 2.4 GHz radio | Disabled |
| phy1 | 5 GHz radio | Disabled |
The EAX17 has a single Ethernet port that serves as LAN by default. For typical extender deployment behind an existing router, you may want to:
- Set
br-lanto a static IP within your existing LAN, or to DHCP client. - Disable the DHCP server on the device (
/etc/init.d/odhcpd disable). - Disable the firewall (
/etc/init.d/firewall disable). - Enable and configure the Wi-Fi radios to join your existing network's SSIDs (both radios are disabled out of the box).
Buttons
→ hardware.button on howto use and configure the hardware button(s).
The Netgear EAX17 has the following buttons:
| BUTTON | Event |
|---|---|
| Reset (recessed pinhole) | reset |
| WPS | wps |
Hardware
Opening the case
→ Warranty
The case is held by four screws hidden behind the product sticker on the power supply block (the side with the mains plug socket). Peel back the sticker to expose the screws, unscrew them, and the case opens without further effort — no plastic spudger or pry tool needed.
Opening the case is not required for OpenWrt installation. The NMRP procedure above works on factory-sealed devices.
Serial
A 4-pin UART header is exposed on the main board, labelled J1, with silkscreen markings RX, TX, GND, 3.3VA. Pin ordering and identification:
| Pin (left to right) | Function | Notes |
|---|---|---|
| 1 | RX | Input to SoC |
| 2 | TX | Output from SoC (boot log) |
| 3 | GND | Verify with multimeter continuity to chassis |
| 4 | 3.3VA | Do not connect — board is mains-powered |
The silkscreen labels on early production boards can be ambiguous. Identify GND and 3.3VA with a multimeter before connecting anything: powered off, the GND pad has continuity to the Ethernet jack shield; powered on, the 3.3VA pad sits at a stable 3.3 V. Mistaking 3.3VA for GND will back-feed the regulator rail through your USB-UART adapter.
On some retail units, the 0 Ω jumpers between the SoC UART lines and the J1 header pads are not populated. If you see no signal on TX during boot despite correct wiring, inspect the small SMD footprints between the J1 header and the SoC: if they are bare copper pads, bridge each footprint with a solder blob to connect the SoC UART lines to the J1 header.
| Serial parameters | 115200, 8N1, 3.3V |
|---|
Bootlogs
OpenWrt bootlog (post-flash-2, pre-reset)
This bootlog was captured after the second nmrpflash completed, before the final factory reset. Both kernel and userspace are pure OpenWrt — note the boot_param.boot_image_slot=0 on the kernel command line confirming the bootloader is using slot 0 (volumes kernel and rootfs), the mt798x-wmac Wi-Fi driver initialising cleanly, and the standard OpenWrt Please press Enter to activate this console. prompt. The reason a reset is still required at this stage is that the UBIFS overlay (rootfs_data) was populated during the post-flash-1 mixed boot with Netgear stock-userspace config files, which shadow OpenWrt defaults — most visibly preventing br-lan from being assigned 192.168.1.1.
A post-reset bootlog (with clean overlay) would be a useful addition — contributions welcome.
UBI partition 'ubi' already selected Trying to boot from image slot 0 Read 64 bytes from volume kernel to 0000000046000000 Read 4325323 bytes from volume kernel to 0000000046000000 ## Checking hash(es) for FIT Image at 46000000 ... Hash(es) for Image 0 (kernel-1): crc32+ sha1+ Hash(es) for Image 1 (fdt-1): crc32+ sha1+ Read 48 bytes from volume rootfs to 000000004641ffcc Read 5105650 bytes from volume rootfs to 000000004641ffcc Hash(es) for rootfs: sha1+ Firmware integrity verification passed ## Loading kernel from FIT Image at 46000000 ... Using 'config-1' configuration Trying 'kernel-1' kernel subimage Description: ARM64 OpenWrt Linux-6.12.85 Type: Kernel Image Compression: lzma compressed Data Start: 0x460000e8 Data Size: 4300937 Bytes = 4.1 MiB Architecture: AArch64 OS: Linux Load Address: 0x48000000 Entry Point: 0x48000000 Hash algo: crc32 Hash value: e9fddeda Hash algo: sha1 Hash value: 364a5c094658a51191dcff96a6de9d740cd08a08 Verifying Hash Integrity ... crc32+ sha1+ OK ## Loading fdt from FIT Image at 46000000 ... Using 'config-1' configuration Trying 'fdt-1' fdt subimage Description: ARM64 OpenWrt netgear_eax17 device tree blob Type: Flat Device Tree Compression: uncompressed Data Start: 0x4641a2b4 Data Size: 22884 Bytes = 22.3 KiB Architecture: AArch64 Hash algo: crc32 Hash value: db415a6a Hash algo: sha1 Hash value: a53aacfc7b7c9cec0e31c5063145222a8da3bba4 Verifying Hash Integrity ... crc32+ sha1+ OK Booting using the fdt blob at 0x4641a2b4 Working FDT set to 4641a2b4 Uncompressing Kernel Image Loading Device Tree to 000000005f7ef000, end 000000005f7f7963 ... OK Working FDT set to 5f7ef000 Starting kernel ... [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034] [ 0.000000] Linux version 6.12.85 (builder@buildhost) (aarch64-openwrt-linux-musl-gcc (OpenWrt GCC 14.3.0 r32912-6639b15f62) 14.3.0, GNU ld (GNU Binutils) 2.44) #0 SMP Mon May 4 22:30:45 2026 [ 0.000000] Machine model: Netgear EAX17 [ 0.000000] OF: reserved mem: 0x0000000042ff0000..0x0000000042ffffff (64 KiB) map non-reusable ramoops@42ff0000 [ 0.000000] OF: reserved mem: 0x0000000043000000..0x000000004302ffff (192 KiB) nomap non-reusable secmon@43000000 [ 0.000000] OF: reserved mem: 0x0000000047c80000..0x0000000047d7ffff (1024 KiB) nomap non-reusable wmcpu-reserved@47c80000 [ 0.000000] OF: reserved mem: 0x0000000047d80000..0x0000000047dbffff (256 KiB) nomap non-reusable wo-emi@47d80000 [ 0.000000] OF: reserved mem: 0x0000000047dc0000..0x0000000047ffffff (2304 KiB) nomap non-reusable wo-data@47dc0000 [ 0.000000] Zone ranges: [ 0.000000] DMA [mem 0x0000000040000000-0x000000005fffffff] [ 0.000000] DMA32 empty [ 0.000000] Normal empty [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000040000000-0x0000000042ffffff] [ 0.000000] node 0: [mem 0x0000000043000000-0x000000004302ffff] [ 0.000000] node 0: [mem 0x0000000043030000-0x0000000047c7ffff] [ 0.000000] node 0: [mem 0x0000000047c80000-0x0000000047ffffff] [ 0.000000] node 0: [mem 0x0000000048000000-0x000000005fffffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x000000005fffffff] [ 0.000000] psci: probing for conduit method from DT. [ 0.000000] psci: PSCIv1.1 detected in firmware. [ 0.000000] psci: Using standard PSCI v0.2 function IDs [ 0.000000] psci: MIGRATE_INFO_TYPE not supported. [ 0.000000] psci: SMC Calling Convention v1.2 [ 0.000000] percpu: Embedded 20 pages/cpu s42584 r8192 d31144 u81920 [ 0.000000] pcpu-alloc: s42584 r8192 d31144 u81920 alloc=20*4096 [ 0.000000] pcpu-alloc: [0] 0 [0] 1 [ 0.000000] Detected VIPT I-cache on CPU0 [ 0.000000] CPU features: detected: GIC system register CPU interface [ 0.000000] CPU features: kernel page table isolation disabled by kernel configuration [ 0.000000] alternatives: applying boot alternatives [ 0.000000] Kernel command line: boot_param.reserve_rootfs_data ubi.rootfs_volume=rootfs boot_param.boot_kernel_part=kernel boot_param.boot_rootfs_part=rootfs boot_param.upgrade_kernel_part=kernel2 boot_param.upgrade_rootfs_part=rootfs2 boot_param.env_part=u-boot-env boot_param.rootfs_data_part=rootfs_data boot_param.boot_image_slot=0 boot_param.upgrade_image_slot=1 boot_param.dual_boot [ 0.000000] Dentry cache hash table entries: 65536 (order: 7, 524288 bytes, linear) [ 0.000000] Inode-cache hash table entries: 32768 (order: 6, 262144 bytes, linear) [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 131072 [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off [ 0.000000] software IO TLB: SWIOTLB bounce buffer size adjusted to 0MB [ 0.000000] software IO TLB: area num 2. [ 0.000000] software IO TLB: mapped [mem 0x000000005fd6a000-0x000000005fdea000] (0MB) [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] rcu: Hierarchical RCU implementation. [ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2. [ 0.000000] Tracing variant of Tasks RCU enabled. [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies. [ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2 [ 0.000000] RCU Tasks Trace: Setting shift to 1 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=2. [ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0 [ 0.000000] GICv3: GIC: Using split EOI/Deactivate mode [ 0.000000] GICv3: 640 SPIs implemented [ 0.000000] GICv3: 0 Extended SPIs implemented [ 0.000000] Root IRQ handler: 0xffffffc080010080 [ 0.000000] GICv3: GICv3 features: 16 PPIs [ 0.000000] GICv3: GICD_CTRL.DS=0, SCR_EL3.FIQ=0 [ 0.000000] GICv3: CPU0: found redistributor 0 region 0:0x000000000c080000 [ 0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention. [ 0.000000] arch_timer: cp15 timer(s) running at 13.00MHz (phys). [ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x2ff89eacb, max_idle_ns: 440795202429 ns [ 0.000000] sched_clock: 56 bits at 13MHz, resolution 76ns, wraps every 4398046511101ns [ 0.000088] Calibrating delay loop (skipped), value calculated using timer frequency.. 26.00 BogoMIPS (lpj=130000) [ 0.000097] pid_max: default: 32768 minimum: 301 [ 0.003060] Mount-cache hash table entries: 1024 (order: 1, 8192 bytes, linear) [ 0.003068] Mountpoint-cache hash table entries: 1024 (order: 1, 8192 bytes, linear) [ 0.005231] cacheinfo: Unable to detect cache hierarchy for CPU 0 [ 0.006104] rcu: Hierarchical SRCU implementation. [ 0.006112] rcu: Max phase no-delay instances is 1000. [ 0.006287] Timer migration: 1 hierarchy levels; 8 children per group; 1 crossnode level [ 0.006528] smp: Bringing up secondary CPUs ... [ 0.006899] Detected VIPT I-cache on CPU1 [ 0.006950] GICv3: CPU1: found redistributor 1 region 0:0x000000000c0a0000 [ 0.006982] CPU1: Booted secondary processor 0x0000000001 [0x410fd034] [ 0.007075] smp: Brought up 1 node, 2 CPUs [ 0.007081] SMP: Total of 2 processors activated. [ 0.007083] CPU: All CPU(s) started at EL2 [ 0.007087] CPU features: detected: 32-bit EL0 Support [ 0.007090] CPU features: detected: CRC32 instructions [ 0.007117] alternatives: applying system-wide alternatives [ 0.007256] CPU features: emulated: Privileged Access Never (PAN) using TTBR0_EL1 switching [ 0.007395] Memory: 494452K/524288K available (9536K kernel code, 992K rwdata, 1832K rodata, 448K init, 316K bss, 28016K reserved, 0K cma-reserved) [ 0.010882] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.010900] futex hash table entries: 512 (order: 3, 32768 bytes, linear) [ 0.010960] 29440 pages in range for non-PLT usage [ 0.010963] 520960 pages in range for PLT usage [ 0.012461] pinctrl core: initialized pinctrl subsystem [ 0.014888] NET: Registered PF_NETLINK/PF_ROUTE protocol family [ 0.015334] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations [ 0.015362] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations [ 0.015383] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations [ 0.015804] thermal_sys: Registered thermal governor 'fair_share' [ 0.015808] thermal_sys: Registered thermal governor 'bang_bang' [ 0.015812] thermal_sys: Registered thermal governor 'step_wise' [ 0.015814] thermal_sys: Registered thermal governor 'user_space' [ 0.015977] ASID allocator initialised with 65536 entries [ 0.016908] pstore: Using crash dump compression: deflate [ 0.016913] pstore: Registered ramoops as persistent store backend [ 0.016916] ramoops: using 0x10000@0x42ff0000, ecc: 0 [ 0.018367] /soc/interrupt-controller@c000000: Fixed dependency cycle(s) with /soc/interrupt-controller@c000000 [ 0.035143] cryptd: max_cpu_qlen set to 1000 [ 0.036641] SCSI subsystem initialized [ 0.036810] libata version 3.00 loaded. [ 0.038758] clocksource: Switched to clocksource arch_sys_counter [ 0.041062] NET: Registered PF_INET protocol family [ 0.041178] IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear) [ 0.042625] tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 4096 bytes, linear) [ 0.042640] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear) [ 0.042649] TCP established hash table entries: 4096 (order: 3, 32768 bytes, linear) [ 0.042680] TCP bind hash table entries: 4096 (order: 5, 131072 bytes, linear) [ 0.042790] TCP: Hash tables configured (established 4096 bind 4096) [ 0.043008] MPTCP token hash table entries: 512 (order: 2, 12288 bytes, linear) [ 0.043122] UDP hash table entries: 256 (order: 1, 8192 bytes, linear) [ 0.043137] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear) [ 0.043351] NET: Registered PF_UNIX/PF_LOCAL protocol family [ 0.043378] PCI: CLS 0 bytes, default 64 [ 0.044836] workingset: timestamp_bits=46 max_order=17 bucket_order=0 [ 0.050015] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 0.050024] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc. [ 0.105855] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251) [ 0.117030] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled [ 0.121078] printk: legacy console [ttyS0] disabled [ 0.141465] 11002000.serial: ttyS0 at MMIO 0x11002000 (irq = 72, base_baud = 2500000) is a ST16650V2 [ 0.141513] printk: legacy console [ttyS0] enabled [ 0.937018] random: crng init done [ 0.943367] loop: module loaded [ 0.948582] spi-nand spi0.0: Winbond SPI NAND was found. [ 0.953953] spi-nand spi0.0: 128 MiB, block size: 128 KiB, page size: 2048, OOB size: 96 [ 0.962353] 9 fixed-partitions partitions found on MTD device spi0.0 [ 0.969019] Creating 9 MTD partitions on "spi0.0": [ 0.973813] 0x000000000000-0x000000100000 : "bl2" [ 0.979722] 0x000000100000-0x000000180000 : "u-boot-env" [ 0.985945] 0x000000180000-0x000000380000 : "factory" [ 0.992552] 0x000000380000-0x000000580000 : "fip" [ 0.998781] 0x000000580000-0x000005580000 : "ubi" [ 1.044671] ubi0: default fastmap pool size: 30 [ 1.049227] ubi0: default fastmap WL pool size: 15 [ 1.054009] ubi0: attaching mtd4 [ 1.330868] ubi0: scanning is finished [ 1.339768] ubi0: attached mtd4 (name "ubi", size 80 MiB) [ 1.345176] ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes [ 1.352053] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048 [ 1.358838] ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096 [ 1.365786] ubi0: good PEBs: 640, bad PEBs: 0, corrupted PEBs: 0 [ 1.371788] ubi0: user volume: 6, internal volumes: 1, max. volumes count: 128 [ 1.379001] ubi0: max/mean erase counter: 8/3, WL threshold: 4096, image sequence number: 1755855793 [ 1.388119] ubi0: available PEBs: 390, total reserved PEBs: 250, PEBs reserved for bad PEB handling: 20 [ 1.397508] ubi0: background thread "ubi_bgt0d" started, PID 270 [ 1.398548] block ubiblock0_2: created from ubi0:2(rootfs) [ 1.409031] ubiblock: device ubiblock0_2 (rootfs) set to be root filesystem [ 1.416110] 0x000005580000-0x000005780000 : "facenv" [ 1.422623] 0x000005780000-0x000005d80000 : "rae" [ 1.430966] 0x000005d80000-0x000005da0000 : "pot" [ 1.436173] 0x000005da0000-0x000005de0000 : "log" [ 1.560469] i2c_dev: i2c /dev entries driver [ 1.566514] mtk-wdt 1001c000.watchdog: Watchdog enabled (timeout=31 sec, nowayout=0) [ 1.621675] NET: Registered PF_INET6 protocol family [ 1.627423] Segment Routing with IPv6 [ 1.631138] In-situ OAM (IOAM) with IPv6 [ 1.635099] NET: Registered PF_PACKET protocol family [ 1.640181] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this. [ 1.653347] 8021q: 802.1Q VLAN Support v1.8 [ 1.806763] mtk_soc_eth 15100000.ethernet eth0: mediatek frame engine at 0xffffffc082080000, irq 75 [ 1.816683] clk: Disabling unused clocks [ 1.820912] PM: genpd: Disabling unused power domains [ 1.830999] VFS: Mounted root (squashfs filesystem) readonly on device 254:0. [ 1.838341] Freeing unused kernel memory: 448K [ 1.842867] Run /sbin/init as init process [ 1.846954] with arguments: [ 1.849943] /sbin/init [ 1.852640] with environment: [ 1.855769] HOME=/ [ 1.858117] TERM=linux [ 2.039789] init: Console is alive [ 2.043324] init: - watchdog - [ 2.346241] kmodloader: loading kernel modules from /etc/modules-boot.d/* [ 2.361455] gpio_button_hotplug: loading out-of-tree module taints kernel. [ 2.372160] kmodloader: done loading kernel modules from /etc/modules-boot.d/* [ 2.380093] init: - preinit - [ 2.709279] mtk_soc_eth 15100000.ethernet eth0: PHY [mdio-bus:00] driver [MediaTek MT7981 PHY] (irq=POLL) [ 2.722863] mtk_soc_eth 15100000.ethernet eth0: configuring for phy/gmii link mode [ 2.731533] mtk_soc_eth 15100000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx Press the [f] key and hit [enter] to enter failsafe mode Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level [ 6.914741] UBIFS (ubi0:3): Mounting in unauthenticated mode [ 6.920525] UBIFS (ubi0:3): background thread "ubifs_bgt0_3" started, PID 744 [ 6.968490] UBIFS (ubi0:3): UBIFS: mounted UBI device 0, volume 3, name "rootfs_data" [ 6.976361] UBIFS (ubi0:3): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes [ 6.986270] UBIFS (ubi0:3): FS size: 7237632 bytes (6 MiB, 57 LEBs), max 67 LEBs, journal size 1015809 bytes (0 MiB, 6 LEBs) [ 6.997478] UBIFS (ubi0:3): reserved for root: 341850 bytes (333 KiB) [ 7.003915] UBIFS (ubi0:3): media format: w5/r0 (latest is w5/r0), UUID EEEDC40A-2A02-4ABA-96E8-E7A11119B9E0, small LPT model [ 7.019454] mount_root: switching to ubifs overlay [ 7.028779] overlayfs: null uuid detected in lower fs '/', falling back to xino=off,index=off,nfs_export=off. [ 7.042631] urandom-seed: Seed file not found (/etc/urandom.seed) [ 7.098973] procd: - early - [ 7.101921] procd: - watchdog - [ 7.650260] procd: - watchdog - [ 7.660552] procd: - ubus - [ 7.814808] procd: - init - Please press Enter to activate this console. [ 8.157076] kmodloader: loading kernel modules from /etc/modules.d/* [ 8.188435] crypto-safexcel 10320000.crypto: EIP97:230(0,1,4,4)-HIA:270(0,5,5),PE:150/433(alg:7fcdfc00)/0/0/0 [ 8.214599] Loading modules backported from Linux version v6.18.7-0-g5dfbc5357 [ 8.221853] Backport generated by backports.git c8a37ce [ 8.356933] urngd: v1.0.2 started. [ 8.583987] mt798x-wmac 18000000.wifi: HW/SW Version: 0x8a108a10, Build Time: 20240823161240a [ 8.761315] mt798x-wmac 18000000.wifi: WM Firmware Version: ____000000, Build Time: 20240823161304 [ 8.854559] mt798x-wmac 18000000.wifi: WA Firmware Version: DEV_000000, Build Time: 20240823161841 [ 8.952588] mt798x-wmac 18000000.wifi: registering led 'mt76-phy0' [ 9.013102] mt798x-wmac 18000000.wifi: registering led 'mt76-phy1' [ 9.098940] PPP generic driver version 2.4.2 [ 9.104365] NET: Registered PF_PPPOX protocol family [ 9.113187] kmodloader: done loading kernel modules from /etc/modules.d/* [ 14.176230] mtk_soc_eth 15100000.ethernet eth0: Link is Down [ 14.226604] mtk_soc_eth 15100000.ethernet eth0: PHY [mdio-bus:00] driver [MediaTek MT7981 PHY] (irq=POLL) [ 14.240513] mtk_soc_eth 15100000.ethernet eth0: configuring for phy/gmii link mode [ 14.249987] br-lan: port 1(eth0) entered blocking state [ 14.255228] br-lan: port 1(eth0) entered disabled state [ 14.260586] mtk_soc_eth 15100000.ethernet eth0: entered allmulticast mode [ 14.267553] mtk_soc_eth 15100000.ethernet eth0: entered promiscuous mode [ 18.409422] mtk_soc_eth 15100000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx [ 18.409454] br-lan: port 1(eth0) entered blocking state [ 18.423097] br-lan: port 1(eth0) entered forwarding state BusyBox v1.37.0 (2026-05-13 22:42:09 UTC) built-in shell (ash) _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- OpenWrt 25.12.4, r32933-4ccb782af7 Dave's Guitar ----------------------------------------------------- OpenWrt recently switched to the "apk" package manager! OPKG Command APK Equivalent Description ------------------------------------------------------------------ opkg install <pkg> apk add <pkg> Install a package opkg remove <pkg> apk del <pkg> Remove a package opkg upgrade apk upgrade Upgrade all packages opkg files <pkg> apk info -L <pkg> List package contents opkg list-installed apk info List installed packages opkg update apk update Update package lists opkg search <pkg> apk search <pkg> Search for packages ------------------------------------------------------------------ For more information visit: https://openwrt.org/docs/guide-user/additional-software/opkg-to-apk-cheatsheet root@OpenWrt:~#
Notes
- Family of devices: The OpenWrt firmware-selector lists a single
netgear_eax17build supporting EAX11v3, EAX12v2, EAX14v3, EAX15v3, EAX16, EAX17, and EAX19. The installation procedure documented here is expected to apply to all SKUs in the family but has been independently confirmed only on the EAX17 as of writing. - Image-builder customisation: As noted in the upgrading section, custom-package images produced by the firmware-selector / image-builder may fail to boot due to FIT rootfs hash mismatch. Use the standard image and add packages via
apkat runtime. - Discussion thread: OpenWrt support for Netgear EAX15 v3 (MT7981) — covers the EAX17 family port history and ongoing development.
