Ubiquiti UniFi AP Outdoor SWX-M2

This device is NOT RECOMMENDED for future use with OpenWrt due to low flash/ram.
DO NOT BUY DEVICES WITH 8MB FLASH / 64MB RAM if you intend to flash an up-to-date and secure OpenWrt version onto it! See 8/64 warning for details.

This device does not have sufficient resources (flash and/or RAM) to provide secure and reliable operation.
This means that you will not be able to install many packages, and that you might experience crashes due to OOM situations more or less often. See OpenWrt on 8/64 devices what you can do now.

The first version of UniFi AP Outdoor has the FCC ID SWX-M2. The hardware is very similar to NanoStation M2 (FCC ID SWX-M2N) and UniFi AP Outdoor Plus (FCC ID SWX-UAPOUTDOOR). The UniFi AP Outdoor (SWX-M2) can be flashed with NanoStation M2 OpenWrt images.

The latest OpenWrt version built for the NanoStation M2 having only 32MB of RAM is 22.03.x. The UniFi AP Outdoor has 64MB of RAM. The hardware is also very similar to the UniFi AP Outdoor Plus model, which is supported in newer OpenWrt versions. It hasn't been tested yet, but it has a chance of working. However, images need an adaptation to 8MB flash layout of the non-Plus model vs. Plus's 16MB.

A 24.10.0 image as also been tested by using a NanoStation M2 image built with the Image Builder:

make image PROFILE=ubnt_nanostation-m PACKAGES=luci

The CPU is possibly AR7242 as in UniFi AP Outdoor Plus.

Similar devices:

generic.flashing.tftp

1. Connect cable to the main/LAN port of the device and set the interface's IP to 192.168.1.25 and netmask to 255.255.255.0.

2. Hold the device's reset button while turning the power on for approximately 10 seconds to put it into the TFTP mode.

3. TFTP-put the factory image with curl -T firmware.bin tftp://192.168.1.20 or equivalent.

Specific values needed for TFTP

Bootloader TFTP server IPv4 address 192.168.1.20
Firmware TFTP image factory image
TFTP transfer window seems not limited if TFTP mode triggered
TFTP window start approximately 10-15 seconds after power on
TFTP client required IP address any from subnet 192.168.1.0/24 except 192.168.1.20

4. After the image is transferred, it is flashed and the device should restart itself into OpenWrt.

The port labelled main corresponds to interface eth0 (LAN by default) and the secondary port to eth1 (WAN by default).

U-Boot unifi-v1.5.2.206-g44e4c8bc (Aug 29 2014 - 18:01:57) DRAM: 64 MB Flash: 8 MB PCIe WLAN Module found (tries: 1). Net: eth0, eth1 Board: Copyright Ubiquiti Networks Inc. 2014 Hit any key to stop autoboot: 0 Board: Ubiquiti Networks AR7241 board (e532-7.0101.002a) UBNT application initialized ## Booting image at 9f050000 ... Image Name: MIPS Ubiquiti Linux-2.6.32.33 Created: 2017-05-08 16:56:12 UTC Image Type: MIPS Linux Kernel Image (lzma compressed) Data Size: 921641 Bytes = 900 kB Load Address: 80002000 Entry Point: 80002000 Verifying Checksum at 0x9f050040 ...OK Uncompressing Kernel Image ... OK Starting kernel ... Booting...


With openwrt-22.03.7-ath79-tiny-ubnt_nanostation-m-squashfs-factory.bin image.

U-Boot unifi-v1.5.2.206-g44e4c8bc (Aug 29 2014 - 18:01:57) DRAM: 64 MB Flash: 8 MB PCIe WLAN Module found (tries: 1). Net: eth0, eth1 Board: Copyright Ubiquiti Networks Inc. 2014 Hit any key to stop autoboot: 0 Board: Ubiquiti Networks AR7241 board (e532-7.0101.002a) UBNT application initialized ## Booting image at 9f050000 ... Image Name: MIPS OpenWrt Linux-5.10.221 Created: 2024-07-15 22:25:54 UTC Image Type: MIPS Linux Kernel Image (lzma compressed) Data Size: 1772407 Bytes = 1.7 MB Load Address: 80060000 Entry Point: 80060000 Verifying Checksum at 0x9f050040 ...OK Uncompressing Kernel Image ... OK Starting kernel ... [ 0.000000] Linux version 5.10.221 (builder@buildhost) (mips-openwrt-linux-musl-gcc (OpenWrt GCC 11.2.0 r20341-591b7e93d3) 11.2.0, GNU ld (GNU Binutils) 2.37) #0 Mon Jul 15 22:25:54 2024 [ 0.000000] printk: bootconsole [early0] enabled [ 0.000000] CPU0 revision is: 00019374 (MIPS 24Kc) [ 0.000000] MIPS: machine is Ubiquiti Nanostation M (XM) [ 0.000000] SoC: Atheros AR7241 rev 1 [ 0.000000] Initrd not found or empty - disabling initrd [ 0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes. [ 0.000000] Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes [ 0.000000] Zone ranges: [ 0.000000] Normal [mem 0x0000000000000000-0x0000000003ffffff] [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000000000000-0x0000000003ffffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000003ffffff] [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 16256 [ 0.000000] Kernel command line: console=ttyS0,115200 rootfstype=squashfs,jffs2 [ 0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes, linear) [ 0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes, linear) [ 0.000000] Writing ErrCtl register=00000000 [ 0.000000] Readback ErrCtl register=00000000 [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off [ 0.000000] Memory: 57860K/65536K available (4382K kernel code, 560K rwdata, 672K rodata, 1224K init, 199K bss, 7676K reserved, 0K cma-reserved) [ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] NR_IRQS: 51 [ 0.000000] CPU clock: 390.000 MHz [ 0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 9801335621 ns [ 0.000015] sched_clock: 32 bits at 195MHz, resolution 5ns, wraps every 11012737021ns [ 0.008013] Calibrating delay loop... 259.27 BogoMIPS (lpj=1296384) [ 0.084194] pid_max: default: 32768 minimum: 301 [ 0.089040] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.096343] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.106910] dyndbg: Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build [ 0.118325] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.128164] futex hash table entries: 256 (order: -1, 3072 bytes, linear) [ 0.135013] pinctrl core: initialized pinctrl subsystem [ 0.146955] NET: Registered protocol family 16 [ 0.152594] thermal_sys: Registered thermal governor 'step_wise' [ 0.224976] clocksource: Switched to clocksource MIPS [ 0.238002] NET: Registered protocol family 2 [ 0.242763] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear) [ 0.251441] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear) [ 0.259870] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.267545] TCP bind hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.274580] TCP: Hash tables configured (established 1024 bind 1024) [ 0.281148] UDP hash table entries: 256 (order: 0, 4096 bytes, linear) [ 0.287742] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear) [ 0.295184] NET: Registered protocol family 1 [ 0.299572] PCI: CLS 0 bytes, default 32 [ 0.312874] workingset: timestamp_bits=30 max_order=14 bucket_order=0 [ 0.326085] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 0.331896] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc. [ 0.344428] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252) [ 0.353338] pinctrl-single 18040028.pinmux: 64 pins, size 8 [ 0.360531] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled [ 0.371095] printk: console [ttyS0] disabled [ 0.375572] 18020000.uart: ttyS0 at MMIO 0x18020000 (irq = 9, base_baud = 12187500) is a 16550A [ 0.384269] printk: console [ttyS0] enabled [ 0.384269] printk: console [ttyS0] enabled [ 0.392682] printk: bootconsole [early0] disabled [ 0.392682] printk: bootconsole [early0] disabled [ 0.428199] spi-nor spi0.0: mx25l6405d (8192 Kbytes) [ 0.433291] 6 fixed-partitions partitions found on MTD device spi0.0 [ 0.439805] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions [ 0.446526] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions [ 0.454029] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions [ 0.460768] OF: Bad cell count for /ahb/spi@1f000000/flash@0/partitions [ 0.468616] Creating 6 MTD partitions on "spi0.0": [ 0.473448] 0x000000000000-0x000000040000 : "u-boot" [ 0.485619] 0x000000040000-0x000000050000 : "u-boot-env" [ 0.492561] 0x000000050000-0x0000007a0000 : "firmware" [ 0.502039] 2 uimage-fw partitions found on MTD device firmware [ 0.508073] Creating 2 MTD partitions on "firmware": [ 0.513070] 0x000000000000-0x0000001c0000 : "kernel" [ 0.519572] 0x0000001c0000-0x000000750000 : "rootfs" [ 0.528204] mtd: setting mtd4 (rootfs) as root device [ 0.533491] 1 squashfs-split partitions found on MTD device rootfs [ 0.539801] 0x000000580000-0x000000750000 : "rootfs_data" [ 0.546814] 0x0000007a0000-0x0000007b0000 : "board_config" [ 0.556226] 0x0000007b0000-0x0000007f0000 : "cfg" [ 0.562492] 0x0000007f0000-0x000000800000 : "art" [ 0.936124] ag71xx 19000000.eth: Could not connect to PHY device. Deferring probe. [ 1.621827] switch0: Atheros AR724X/AR933X built-in rev. 2 switch registered on mdio.0 [ 1.671785] ag71xx 1a000000.eth: connected to PHY at fixed-0:00 [uid=00000000, driver=Generic PHY] [ 1.681932] eth0: Atheros AG71xx at 0xba000000, irq 5, mode: gmii [ 1.691977] NET: Registered protocol family 10 [ 1.708908] Segment Routing with IPv6 [ 1.712822] NET: Registered protocol family 17 [ 1.717482] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this. [ 1.730981] 8021q: 802.1Q VLAN Support v1.8 [ 1.736743] PCI host bridge /ahb/apb/pcie-controller@180c0000 ranges: [ 1.743286] MEM 0x0000000010000000..0x0000000013ffffff [ 1.748629] IO 0x0000000000000000..0x0000000000000000 [ 1.754170] PCI host bridge to bus 0000:00 [ 1.758355] pci_bus 0000:00: root bus resource [mem 0x10000000-0x13ffffff] [ 1.765280] pci_bus 0000:00: root bus resource [io 0x0000] [ 1.770882] pci_bus 0000:00: root bus resource [??? 0x00000000 flags 0x0] [ 1.777719] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff] [ 1.785764] pci 0000:00:00.0: [168c:002a] type 00 class 0x028000 [ 1.791848] pci 0000:00:00.0: reg 0x10: [mem 0x10000000-0x1000ffff 64bit] [ 1.798864] pci 0000:00:00.0: supports D1 [ 1.802896] pci 0000:00:00.0: PME# supported from D0 D1 D3hot [ 1.810639] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 00 [ 1.817373] pci 0000:00:00.0: BAR 0: assigned [mem 0x10000000-0x1000ffff 64bit] [ 2.245588] ag71xx 19000000.eth: connected to PHY at mdio.0:1f:04 [uid=004dd041, driver=Qualcomm Atheros AR9331 built-in PHY] [ 2.258482] eth1: Atheros AG71xx at 0xb9000000, irq 4, mode: mii [ 2.266033] clk: Disabling unused clocks [ 2.296739] VFS: Mounted root (squashfs filesystem) readonly on device 31:4. [ 2.314155] Freeing unused kernel memory: 1224K [ 2.318745] This architecture does not have kernel memory protection. [ 2.325235] Run /sbin/init as init process [ 3.747183] init: Console is alive [ 3.751336] init: - watchdog - [ 3.755040] init: Watchdog has previously reset the system [ 5.999969] kmodloader: loading kernel modules from /etc/modules-boot.d/* [ 6.093173] usbcore: registered new interface driver usbfs [ 6.098930] usbcore: registered new interface driver hub [ 6.104428] usbcore: registered new device driver usb [ 6.120452] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 6.131845] fsl-ehci: Freescale EHCI Host controller driver [ 6.140258] ehci-platform: EHCI generic platform driver [ 6.153941] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 6.163424] ohci-platform: OHCI generic platform driver [ 6.170466] kmodloader: done loading kernel modules from /etc/modules-boot.d/* [ 6.188492] init: - preinit - [ 8.027413] random: jshn: uninitialized urandom read (4 bytes read) [ 8.177258] random: jshn: uninitialized urandom read (4 bytes read) cat: can't open '/sys/class/ieee80211/phy0/macaddress': No such file or directory [ 8.332243] random: jshn: uninitialized urandom read (4 bytes read) [ 9.118606] random: procd: uninitialized urandom read (4 bytes read) 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 [ 11.136840] eth1: link up (100Mbps/Full duplex) [ 11.141458] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready [ 13.445317] mount_root: jffs2 not ready yet, using temporary tmpfs overlay [ 13.458623] urandom-seed: Seed file not found (/etc/urandom.seed) [ 13.669824] eth1: link down [ 13.693077] procd: - early - [ 13.696619] procd: - watchdog - [ 13.700339] procd: Watchdog has previously reset the system [ 14.491098] procd: - watchdog - [ 14.494439] procd: Watchdog has previously reset the system [ 14.561654] procd: - ubus - [ 14.743368] random: ubusd: uninitialized urandom read (4 bytes read) [ 14.754712] random: ubusd: uninitialized urandom read (4 bytes read) [ 14.762081] random: ubusd: uninitialized urandom read (4 bytes read) [ 14.774035] procd: - init - Please press Enter to activate this console. [ 16.280103] random: jshn: uninitialized urandom read (4 bytes read) [ 16.379908] random: ubusd: uninitialized urandom read (4 bytes read) [ 16.468402] random: ubus: uninitialized urandom read (4 bytes read) [ 16.576089] kmodloader: loading kernel modules from /etc/modules.d/* [ 17.560511] Loading modules backported from Linux version v5.15.162-0-gf45bea23c39cb [ 17.568409] Backport generated by backports.git v5.15.162-1-0-g9fa1c65c [ 18.531775] PPP generic driver version 2.4.2 [ 18.556697] NET: Registered protocol family 24 [ 18.817472] ath9k 0000:00:00.0: Direct firmware load for ath9k-eeprom-pci-0000:00:00.0.bin failed with error -2 [ 18.827691] ath9k 0000:00:00.0: Falling back to sysfs fallback for: ath9k-eeprom-pci-0000:00:00.0.bin [ 19.422643] ath: phy0: Ignoring endianness difference in EEPROM magic bytes. [ 19.452180] ieee80211 phy0: Atheros AR9280 Rev:2 mem=0x(ptrval), irq=13 [ 19.555715] kmodloader: done loading kernel modules from /etc/modules.d/* [ 23.705742] urngd: v1.0.2 started. [ 28.932675] random: crng init done [ 28.936227] random: 33 urandom warning(s) missed due to ratelimiting [ 72.462816] jffs2_scan_eraseblock(): End of filesystem marker found at 0x0 [ 72.495085] jffs2_build_filesystem(): unlocking the mtd device... [ 72.495186] done. [ 72.503330] jffs2_build_filesystem(): erasing all blocks after the end marker... [ 75.462349] br-lan: port 1(eth1) entered blocking state [ 75.475210] br-lan: port 1(eth1) entered disabled state [ 75.480965] device eth1 entered promiscuous mode [ 75.661669] eth0: link up (1000Mbps/Full duplex) [ 75.686836] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 79.617024] eth1: link up (100Mbps/Full duplex) [ 79.621656] br-lan: port 1(eth1) entered blocking state [ 79.626978] br-lan: port 1(eth1) entered forwarding state [ 79.688368] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready [ 93.950857] done. [ 93.952870] jffs2: notice: (1938) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found. [ 94.381312] overlayfs: upper fs does not support tmpfile.


This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/04/13 18:26
  • by romainreignier