are some developers interested in getting OpenWRT to work on the Zyxel NR7302?
A few insights on how to flash the device and also access the modem recovery mode (but needs soldering of at least two wires for USB 2.0 and a GND connection) has been made.
If anyone is interested in starting the project?
The devices are selling relatively cheap on eBay for around 80 EUR without password stickers, but there is already a method to retrieve admin/root password.
root@NR7302:~# iw phy
Wiphy phy0
wiphy index: 0
max # scan SSIDs: 9
max scan IEs length: 2304 bytes
max # sched scan SSIDs: 0
max # match sets: 0
max # scan plans: 1
max scan plan interval: -1
max scan plan iterations: 0
Retry short limit: 7
Retry long limit: 4
Coverage class: 0 (up to 0m)
Available Antennas: TX 0 RX 0
Supported interface modes:
* IBSS
* managed
* AP
* P2P-client
* P2P-GO
Band 1:
Capabilities: 0x1962
HT20/HT40
Static SM Power Save
RX HT20 SGI
RX HT40 SGI
RX STBC 1-stream
Max AMSDU length: 7935 bytes
DSSS/CCK HT40
Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
Minimum RX AMPDU time spacing: 16 usec (0x07)
HT Max RX data rate: 150 Mbps
HT TX/RX MCS rate indexes supported: 0-7
Frequencies:
* 2412 MHz [1] (17.0 dBm)
* 2417 MHz [2] (17.0 dBm)
* 2422 MHz [3] (17.0 dBm)
* 2427 MHz [4] (17.0 dBm)
* 2432 MHz [5] (17.0 dBm)
* 2437 MHz [6] (17.0 dBm)
* 2442 MHz [7] (17.0 dBm)
* 2447 MHz [8] (17.0 dBm)
* 2452 MHz [9] (17.0 dBm)
* 2457 MHz [10] (17.0 dBm)
* 2462 MHz [11] (17.0 dBm)
* 2467 MHz [12] (17.0 dBm)
* 2472 MHz [13] (17.0 dBm)
* 2484 MHz [14] (disabled)
valid interface combinations:
* #{ managed, P2P-client } <= 2, #{ AP, P2P-GO } <= 1,
total <= 2, #channels <= 1
Supported extended features:
We would need some help to create a dts and openwrt firmware though, but root access is possible. I don't know if this is already publically mentioned somewhere and I would rather not burn the information myself.
Thanks.
I managed to create a dts file from the /sys/firmware/fdt of this device, which gave quite a lot of warnings:
output.dts: Warning (reg_format): /soc/qcom,glink/modem/qcom,gpr:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
output.dts: Warning (reg_format): /soc/qcom,glink/modem/qcom,gpr/spf_core:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
output.dts: Warning (reg_format): /soc/qcom,glink/modem/qcom,gpr/audio-pkt:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
output.dts: Warning (reg_format): /soc/qcom,glink/modem/qcom,gpr/audio_prm:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
output.dts: Warning (unit_address_vs_reg): /memory: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /reserved-memory/llcc_tcm_region: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/dload_mode: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/clock-controller@0: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/rsc@17830000/clock-controller@1: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/qcom,smp2p-modem@1799000c: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/qcom,glink/modem/qcom,gpr: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,glink/modem/qcom,gpr/spf_core: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,glink/modem/qcom,gpr/audio-pkt: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,glink/modem/qcom,gpr/audio_prm: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/pmk8350_ref_gnd: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/pmk8350_vref_1p25: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/pmk8350_die_temp: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/pmk8350_xo_therm: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/pmx65_pa_therm1: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/pmx65_pa_therm2: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/pmx65_mdm_case_therm: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/pmx65_ambient_therm: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/pmx65_qtm_skin_therm: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/pmx65_die_temp: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/adc0: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/adc1: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/vadc@3100/vph_pwr: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/adc_tm@3400/pmx65_pa_therm1: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/adc_tm@3400/pmx65_pa_therm2: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/adc_tm@3400/pmx65_mdm_case_therm: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/adc_tm@3400/pmx65_ambient_therm: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,spmi@c440000/qcom,pmk8350@0/adc_tm@3400/pmx65_qtm_skin_therm: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,lpm-levels/qcom,pm-cluster@0/qcom,pm-cpu@0: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/qcom,pcie@1c00000/pcie0_rp: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,pcie@1c00000/pcie0_rp/cnss_pci: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/qcom,pcie@1c00000/pcie0_rp/pcie0_generic_ep: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/i2c@837000/tavil_codec: node has a reg or ranges property, but no unit name
output.dts: Warning (unit_address_vs_reg): /soc/i2c@837000/tavil_codec/wcd_pinctrl@5: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/msm_cdc_pinctrl@49: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/aqc_rx@eth0: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/aqc_tx@eth0: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/r8125_rx@eth0: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/r8125_tx@eth0: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/qcom,cnss-qca6490@b0000000/mhi_events/mhi_event@0: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/qcom,cnss-qca6490@b0000000/mhi_events/mhi_event@1: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /soc/qcom,cnss-qca6490@b0000000/mhi_events/mhi_event@2: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_format): /reserved-memory/aop_regions@0x8fe00000: unit name should not have leading "0x"
output.dts: Warning (unit_address_format): /reserved-memory/secdata_region@0x8fcfd000: unit name should not have leading "0x"
output.dts: Warning (unit_address_format): /reserved-memory/ipa_fw_region@0x8fced000: unit name should not have leading "0x"
output.dts: Warning (unit_address_format): /soc/clock-controller@0x100000: unit name should not have leading "0x"
output.dts: Warning (unit_address_format): /soc/mailbox@0x17811000: unit name should not have leading "0x"
output.dts: Warning (unit_address_format): /soc/qcom,ipa@03e00000: unit name should not have leading 0s
output.dts: Warning (unit_address_format): /soc/tpdm@06990000: unit name should not have leading 0s
output.dts: Warning (pci_device_reg): Failed prerequisite 'reg_format'
output.dts: Warning (pci_device_bus_num): Failed prerequisite 'reg_format'
output.dts: Warning (simple_bus_reg): Failed prerequisite 'reg_format'
output.dts: Warning (i2c_bus_reg): Failed prerequisite 'reg_format'
output.dts: Warning (spi_bus_reg): Failed prerequisite 'reg_format'
output.dts: Warning (avoid_default_addr_size): /soc/qcom,glink/modem/qcom,gpr: Relying on default #address-cells value
output.dts: Warning (avoid_default_addr_size): /soc/qcom,glink/modem/qcom,gpr: Relying on default #size-cells value
output.dts: Warning (avoid_default_addr_size): /soc/qcom,glink/modem/qcom,gpr/spf_core: Relying on default #address-cells value
output.dts: Warning (avoid_default_addr_size): /soc/qcom,glink/modem/qcom,gpr/spf_core: Relying on default #size-cells value
output.dts: Warning (avoid_default_addr_size): /soc/qcom,glink/modem/qcom,gpr/audio-pkt: Relying on default #address-cells value
output.dts: Warning (avoid_default_addr_size): /soc/qcom,glink/modem/qcom,gpr/audio-pkt: Relying on default #size-cells value
output.dts: Warning (avoid_default_addr_size): /soc/qcom,glink/modem/qcom,gpr/audio_prm: Relying on default #address-cells value
output.dts: Warning (avoid_default_addr_size): /soc/qcom,glink/modem/qcom,gpr/audio_prm: Relying on default #size-cells value
output.dts: Warning (avoid_unnecessary_addr_size): Failed prerequisite 'avoid_default_addr_size'
output.dts: Warning (unique_unit_address): Failed prerequisite 'avoid_default_addr_size'
output.dts: Warning (interrupts_property): /soc/wcd9xxx-irq: Missing interrupt-controller or interrupt-map property
output.dts: Warning (graph_child_address): /soc/replicator@6046000/out-ports: graph node has single child node 'port@0', #address-cells/#size-cells are not necessary
output.dts: Warning (graph_child_address): /soc/funnel@680c000/in-ports: graph node has single child node 'port@0', #address-cells/#size-cells are not necessary
output.dts: Warning (graph_child_address): /soc/funnel@6005000/in-ports: graph node has single child node 'port@0', #address-cells/#size-cells are not necessary
output.dts: Warning (graph_child_address): /soc/funnel@69e2000/in-ports: graph node has single child node 'port@0', #address-cells/#size-cells are not necessary
The final output dts is available here:
Though it looks not very clean in contrast to the ones for new devices.
By the way, the mentioned Github documentation of this device is found here:
Hi everyone, and thanks to @fmaurer for pointing me to this thread.
This device looks interesting (and cheap), however we are not dealing with a Qualcomm wireless SoC (IPQ) here, this is Snapdragon X65 (Codename Lemur, successor of the SDX55 alias SDX Prairie). I have a few devices with SDX55 already (D-Link DWR-2101 portable router and DWP-1010 outdoor CPE), but the next steps for these would probably be adding support in postmarketOS.
SDX55 is even in mainline, and there are some devices (5G modules) supported, but adding this new target to OpenWrt would probably be a lot of effort (though I hope to see it one day).
These routers are not even like Android phones without screen (which have an application processor that talks to the baseband processor), these things are just the baseband processor.
As seen in the log, they run QTI Linux, which even uses a preempt kernel since it has to take care of many real-time tasks in the modem, and load binary blobs into the modem hardware underneath etc..
So, it's definitely feasible to run a customized Linux on this thing (and learning postmarketOS has been on my list for years), but I'm not sure how much of the kernel patches requires by gluon would be adaptable to postmarketOS, or how simple it would be to support this new target in OpenWrt.
//edit:
Since last year, I've been struggling with DWR-978, which is MT7622 + SDX55 conencted via MHI (both PCIE and USB), it kind of works sometimes but is annoying, e.g. some pins need to be pulled before performing reboot otherwise the modem won't come up... when it does not, triggering a pci rescan in the kernel would find it, but modemmanager would not see it etc...
There is also sdx65.dtsi already, these have been mainlined by the linaro project, according to their status page most basic peripherals should work:
it just needs someone to port this as a new target to OpenWrt, and I'm not sure about the PREEMPT stuff (and lots of binary blobs required to get cellular working at all).