Adding OpenWrt Support for Netgear RAX120 (Nighthawk AX12)

I think that the problem with variables is caused by errors in dts files:

/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:564.5-15: Warning (reg_format): /soc@0/mdio@90000/switch@10/ports/port@0:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:572.5-15: Warning (reg_format): /soc@0/mdio@90000/switch@10/ports/port@1:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:578.5-15: Warning (reg_format): /soc@0/mdio@90000/switch@10/ports/port@2:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:584.5-15: Warning (reg_format): /soc@0/mdio@90000/switch@10/ports/port@3:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:590.5-15: Warning (reg_format): /soc@0/mdio@90000/switch@10/ports/port@4:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:596.5-15: Warning (reg_format): /soc@0/mdio@90000/switch@10/ports/port@5:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:602.5-15: Warning (reg_format): /soc@0/mdio@90000/switch@10/ports/port@6:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:517.27-520.4: Warning (unit_address_format): /soc@0/mdio@90000/ethernet-phy@05: unit name should not have leading 0s
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/image-ipq8074-rt-ax89x.dtb: Warning (pci_device_reg): Failed prerequisite 'reg_format'
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/image-ipq8074-rt-ax89x.dtb: Warning (pci_device_bus_num): Failed prerequisite 'reg_format'
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/image-ipq8074-rt-ax89x.dtb: Warning (i2c_bus_reg): Failed prerequisite 'reg_format'
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/image-ipq8074-rt-ax89x.dtb: Warning (spi_bus_reg): Failed prerequisite 'reg_format'
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:563.11-569.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@0: Relying on default #address-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:563.11-569.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@0: Relying on default #size-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:571.11-575.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@1: Relying on default #address-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:571.11-575.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@1: Relying on default #size-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:577.11-581.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@2: Relying on default #address-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:577.11-581.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@2: Relying on default #size-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:583.11-587.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@3: Relying on default #address-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:583.11-587.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@3: Relying on default #size-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:589.11-593.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@4: Relying on default #address-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:589.11-593.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@4: Relying on default #size-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:595.11-599.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@5: Relying on default #address-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:595.11-599.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@5: Relying on default #size-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:601.11-608.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@6: Relying on default #address-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts:601.11-608.6: Warning (avoid_default_addr_size): /soc@0/mdio@90000/switch@10/ports/port@6: Relying on default #size-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8072-wpq873.dts:472.13-477.4: Warning (pci_device_reg): /soc@0/pci@10000000/bridge@1,0: PCI unit address format error, expected "0,0"
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8072-haze.dts:302.13-317.4: Warning (pci_device_reg): /soc@0/pci@10000000/bridge@1,0: PCI unit address format error, expected "0,0"
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8072-ax9000.dts:565.13-581.4: Warning (pci_device_reg): /soc@0/pci@10000000/bridge@1,0: PCI unit address format error, expected "0,0"
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-nbg7815.dts:240.7-28: Warning (reg_format): /soc@0/spi@78b5000/flash@0/partitions/partition@650000/nvmem-layout/aqr-fw@0:reg: property has invalid length (8 bytes) (#address-cells == 2, #size-cells == 1)
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/image-ipq8074-nbg7815.dtb: Warning (pci_device_reg): Failed prerequisite 'reg_format'
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/image-ipq8074-nbg7815.dtb: Warning (pci_device_bus_num): Failed prerequisite 'reg_format'
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/image-ipq8074-nbg7815.dtb: Warning (i2c_bus_reg): Failed prerequisite 'reg_format'
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/image-ipq8074-nbg7815.dtb: Warning (spi_bus_reg): Failed prerequisite 'reg_format'
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-nbg7815.dts:238.23-241.8: Warning (avoid_default_addr_size): /soc@0/spi@78b5000/flash@0/partitions/partition@650000/nvmem-layout/aqr-fw@0: Relying on default #address-cells value
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/linux-6.6.47/arch/arm64/boot/dts/qcom/ipq8074-nbg7815.dts:238.23-241.8: Warning (avoid_default_addr_size): /soc@0/spi@78b5000/flash@0/partitions/partition@650000/nvmem-layout/aqr-fw@0: Relying on default #size-cells value
Pseudo file "dev" exists in source filesystem "/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/root-qualcommax/dev".
Ignoring, exclude it (-e/-ef) to override.
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/tmp/openwrt-qualcommax-ipq807x-netgear_rax120v2-initramfs-uImage.itb.its:48.15-55.5: Warning (unit_address_vs_reg): /configurations/config@hk01: node has a unit name, but no reg or ranges property
/git/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-qualcommax_ipq807x/netgear_rax120v2-uImage.itb.its:48.15-55.5: Warning (unit_address_vs_reg): /configurations/config@hk01: node has a unit name, but no reg or ranges property

but I'm not sure how to fix that.

Config:

	configurations {
		default = "config@hk01";
		config@hk01 {
			description = "OpenWrt netgear_rax120v2";
			kernel = "kernel-1";
			fdt = "fdt-1";
			
			
			
		};
		
	};

I don't think so, those are just warnings from dtc.

That has nothing to do with the actual image build.

Yes you right.

We call this function for each device at the beginning: https://github.com/openwrt/openwrt/blob/main/include/image.mk#L782
Variables are overwritten during this step.
As result, the last occurrence of a specified variable is used later during image preparation.

Hi community,

Wondering if anyone has more info on the following topics, I was not able to find info myself:

  • I noticed few commits that seem to work towards enabling the cooling fan on RX120v2 (here and here), but seems that fan itself is not running yet, at least on my device. Is it the case that this feature needs more development or am I simply missing some user configuration?
  • I have noticed in other threads, mainly the "custom builds" Qualcommax NSS thread, that there has been some progress in getting 5GHz WiFi power up, for example by replacing the board-2.bin file. From what I understand so far these fixes are with some level of risk and not clean enough to bring them into snapshot builds. Any clue if some fix is nearby and known to dev team which will make it into main git?

From what I can gather, @BrainSlayer has developed a patch that patches the board info from the device into an actually useful BDF for OpenWRT.
Haven't personally tested it myself but some folks that have compiled the patch for other devices report it works.

As for the board-2 and cal-ahb files, I used the generic one for RAX120 and the cal-ahb from MX4200 and the only main annoyance is that it drags along the MAC addresses from the source MX4200 instead of taking the one from the device.
This has caused me issues in my home network that uses 2 RAX120s , one as main router and the other one as AP because MAC addresses would conflict and block the network.
The workaround for that was to make them generate a random MAC address for each interface.

the mac addresses are patched into the caldata by openwrt scripts. but these scripts operate modell specific. so you may need todo adjustments to patch the caldata with the correct ones. this is very simple

Thank you a lot for testing the different files and sharing results. It certainly helped me. I just got time to play with the router again and ended up with the following setup for now:

  • using firmware 2.12 (very early to tell, but seems it has fixed the very regular and very annoying firmware crashes I had before. Maybe I was unlucky with client devices, as other forum members seemed to call this router stable much earlier than I could)
  • board-2.bin downloaded from same source as the firmware
  • cal-ahb file from MX4200 shared by you in this post

While I do not want to celebrate prematurely, it seems like WiFi is finally working reliably. I do not know if the signal coverage is as good as it should be, but it does seem no worse than previous routers, covers all of the area I need, speed is stable, network runs seemingly fast and not a single crash so far.

1 Like

hello everyone

i have a RAX120v2 with "OpenWrt SNAPSHOT (r27230-a70555fb4f)" almost everything works fine, but, have 2 little problems, 1st one it´s the cooling fan isn´t working (i have it cooled with a 80mm fan below the router...) 2nd, the 2,4Ghz WiFi stays connected fine, but after sometime, the internet connection drops and stay connected but no internet,something that doesn't happen with the 5Ghz connection. I am using default cal-ahb and board-2 from villahed94 post 417

Please consider updating this post. I was looking for an OpenWRT-compatible router, and considered RAX120. This post mentioned that we can check whether there's FCC-ID at the bottom of the device to see if it's v1 or v2, and yes - I checked the device before purchasing it, and it does have FCC ID, exactly as the one listed.
However, now I've got it, but after enabling telnet and getting into the device, it's version 1, which makes it useless. Sure, I should have done more investigation on this, but please update this post to make sure people won't make the same mistake.

1 Like

I've noticed that all v1 I've seen don't have wall mounting slots on the bottom (all v2 have them) - what about your unit?

I think mine does have these:

I found some older review which does indicate that some older version didn't have them: https://dongknows.com/netgear-nighthawk-ax12-ax6000-rax120-router-review/
This one's bottom-right number ends in -01. Mine ends in -02.

Checking listing on ebay, it seems like that some ends in -03, and they have the mounts as well: https://www.ebay.com/itm/326074332915
This one is -01 and has no mount: https://www.ebay.com/itm/266937124978
This one is -02 and has mount: https://www.ebay.com/itm/335585362011
This one is -02 and has omunt: https://www.ebay.com/itm/325808444919

I think someone mentioned above that there's a v2 with -03. Maybe both -01 and -02 are v1, while -03 is v2, and both -02 and -03 have mounts?

1 Like

Mine ends with -03 and also has mounts.
Seeing this post, I enabled telnet and checked and behold -

It's RAX120 v1 :smiling_face_with_tear:

1 Like

Will RAX120 be in the official list of 24.xx ?

1 Like

Since it's already in snapshots, it will.

2 Likes

you are right, and just found it https://downloads.openwrt.org/releases/24.10-SNAPSHOT/targets/qualcommax/ipq807x/

can't wait to try official release version on my router. hopefully no more manual .bin file replacement from #417.

Fyi for those looking to buy RAX120, I have purchased several for myself and family, and i have been burned with a v1. I "thought" i knew enough to avoid v1, but it didnt work.

There are only 2 reliable ways to verify a v2 prior to actually buying it and verifying yourself:

  1. For sales listings that you can decipher the SN off back, you can do a oem warranty status check through oem site which will tell you exact hardware version for the device. This only works if the device has been registered at some point in its history.
  2. Ask the seller to check the device's admin page for hardware info to verify v2. Some sellers very helpful, some companies could care less. Its hit or miss.

Ive purchased using both methods and havent been burned yet, no more useless v1's.

1 Like

Well, after a long while, I decided to give it a go again. Since I didn't remember how was the installation, I had to re-read all this forum again. I found that the only image that worked for installing from OEM firmware (V1.2.9.52) was from May15, 2024, downloaded from Agustin Lorenzo. Since it's a very old compilation, opkg does not work, so I downloaded the latest snapshot, in this case r28062-be3e7a84bd. After using for first time APK, I installed all the packages I needed and restored my backup. Everything went smooth until I realized that NONE of the radios work, so back to OEM.

Just writing down this in case anyone wants to follow the upgrade path

Good luck!

is this fix now?

SO I managed to find a V2 and it was on firmware 1.2.8.x. I hesitated to upgrade in fear of them blocking third-party firmware, but I did anyway. Not sure if it the "web-ui-factory.img" would upload on older versions, but it will NOT on 1.2.9.52. Shows this:

Will I have to use the TFPT method to do this now or is there a workaround?

THANKS