OpenWrt support for Zyxel NWA90AX

The 2nd floor needed an additional wifi access point, and so I purchased a used Zyxel NWA90AX for 60€ on kleinanzeigen.de.

Before buying I checked that it is supported by OpenWrt and found that NWA90AX Pro is supported, but it uses a totally different chipset. The NWA50AX is also supported and has the same hardware as the NWA90AX:

NWA90AX: Identical hardware as in NWA50AX, but with added features like Captive portal for Guest access and WPA Enterprise for AD/Radius (Credential) authentication.

I followed the NWA50AX instructions (especially flashing the vendor firmware to get the Current Image to 1), but then flashing failed with:

errno: -25007
errmsg: Firmware content error!

I immediately suspected that the firmware contains a list of compatible models, but needed 5 days and many detours to - accidentially - find the model code 77 e1 of the NWA90AX.

Now the access point provides beautiful 5 + 2.4 GHz wireless lan with the latest OpenWrt firmware. The patch that adds support is awaiting review.

Zyxel NWA90AX

Accidental discovery

I downloaded every available NWA50AX and NWA90AX firmware to check which 50 version I can flash over the same 90 version.

Version NWA50AX NWA90AX
6.25(8) NWA50AX_6.25(ABYW.8)C0.zip
6.27(2) - NWA90AX_6.27(ACCV.2)C0.zip
6.29(3) NWA50AX_6.29(ABYW.3)C0.zip NWA90AX_6.29(ACCV.3)C0.zip
6.29(4) NWA50AX_6.29(ABYW.4)C0.zip NWA90AX_6.29(ACCV.4)C0.zip
7.00(1) - NWA90AX_7.00(ACCV.1)C0.zip
7.00(2) NWA50AX_7.00(ABYW.2)C0.zip NWA90AX_7.00(ACCV.2)C0.zip
7.10(1) - NWA90AX_7.10(ACCV.1)C0.zip
7.10(3) NWA50AX_7.10(ABYW.3)C0.zip NWA90AX_7.10(ACCV.3)C0.zip

Only the latest V7.10(3) was the one whose 50 version I could flash onto my 90 hardware.

While installing the firmware versions, I had the browser developer console's network tab open and saw the following:

## Checking hash(es) for FIT Image at 752a9000 ...
   Hash(es) for Image 0 (script): sha256+

   Hash(es) for Image 1 (Bootloader): sha256+

   Hash(es) for Image 2 (firmware): sha256+

   Hash(es) for Image 3 (rootfs_data): sha256+

   Hash(es) for Image 4 (logs): sha256+

   Hash(es) for Image 5 (myzyxel): sha256+

   Hash(es) for Image 6 (bootconfig): sha256+

   Hash(es) for Image 7 (mrd): sha256+

Content-Type: text/html

<html><head></head><body>
var zyshdata0=[{'_model':'NWA90AX','_firmware_version':'V6.29(ACCV.4)','_build_date':'2024-01-10 14:37:56'}];
var errno0=0;
var errmsg0='OK';
</body></html>
Upgrade started
Current time: Sat Sep 27 15:54:56 DGMT 2025
----- kernel cmdline -----
console=ttyS0,115200 loglevel=1 bootImage=1 bootVer=V1.03 rootfstype=squashfs,jffs2
------- FW version -------
FIRMWARE_VER=6.29(ACCV.4)
BUILD_DATE=2024-01-10 14:37:56
MODEL_ID=NWA90AX
COMPATIBLE_PRODUCT_MODEL_0=77E1
COMPATIBLE_PRODUCT_MODEL_1=FFFF
COMPATIBLE_PRODUCT_MODEL_2=FFFF
COMPATIBLE_PRODUCT_MODEL_3=FFFF
COMPATIBLE_PRODUCT_MODEL_4=FFFF

I don't know if that was a bug in this specific firmware, but the upgrade log was sent to the browser - not only the part within the <html>. But this was where I found the NWA90AX's model code.

Written by Christian Weiske.

Comments? Please send an e-mail.