Table of Contents

MikroTik RouterBoard RB941-2nD / RB941-2nD-TC (hAP lite) / RB951Ui-2nD (Full hAP)

Supported Versions

Hardware

Model CPU CPU Speed RAM (MByte) Serial Flash(NOR) (MByte) Ethernet PoE Wireless USB UART JTAG
RB941-2nD QCA9531 650 MHz 32MB DDR1 200MHz (Winbond W9425G6JH-5) 16 (W25Q128) AR8227 BuildIn Switch (10M/100M) NONE QCA9531 NONE 1x onboard(ttl) 1x onboard
RB941-2nD-TC QCA9533 650 MHz 32MB DDR1 200MHz (Winbond W9425G6KH-5) 16 (W25Q128) AR8227 BuildIn Switch (10M/100M) NONE QCA9531 NONE 1x onboard(ttl) 1x onboard
RB951Ui-2nD QCA9531 650 MHz 64MB DDR2 300MHz(NANYL NT5TU32M16EG-AC) 16 (W25Q128) AR934X BuildIn Switch (10M/100M) From port 5 QCA9531 USB 2.0 1x onboard(ttl) 1x onboard

RB941-2nD (hAP lite)

RB941-2nD-TC (hAP lite)

RB951Ui-2nD (Full hAP)

Installation

Caveats highlighted in Common Procedures for Mikrotik RouterBoard Products apply.

Create image (optional)

$ mkdir /home/$USER/mikrotik/
$ cd /home/$USER/mikrotik/
$ git clone git://git.openwrt.org/openwrt.git
$ cd /home/$USER/mikrotik/trunk

If you want to use LuCI(Web interface):

$ ./scripts/feeds update packages luci
$ ./scripts/feeds install luci

If you get errors on dependencies later, run:

$ ./scripts/feeds update -a
$ ./scripts/feeds install -a  

Configure image for booting from RAM and NOR flash

$ make menuconfig

Target System = AR7XXX Subtarget = Mikrotik device with NAND/NOR flash Target Profile = Default Profile Target Images = choose ramdisk and squashfs If you use LuCI then select proper items in LuCI submenu

$ make kernel_menuconfig CONFIG_TARGET=subtarget 

Machine selection System type = Atheros AR71XX/AR724X/AR913X based boards Atheros AR71XX/AR724X/AR913X machine selection - Enable MikroTik RouterBOARD 941-2nd support Device Drivers → Memory Technology Device (MTD) support → SPI-NOR device support - Unselect Use small 4096 B erase sectors File systems - Unselect yaffs2 file system support Device Drivers → Character devices → Serial drivers - Unselect ALL Kernel hacking → Default kernel command string - rootfstype=squashfs,jffs2 noinitrd

$ make

Run OpenWrt in RAM

Create script: nano /tftp/loader.sh

#!/bin/bash
USER=user #CHANGE THIS
sudo /sbin/ip addr replace 192.168.1.10/24 dev eno1
sudo /sbin/ip link set dev eno1 up
sudo dnsmasq -i eno1 --dhcp-range=192.168.1.100,192.168.1.200 \
--dhcp-boot=openwrt-ar71xx-mikrotik-rb-941-2nd-initramfs-kernel.bin \
--enable-tftp --tftp-root=/home/$USER/mikrotik/trunk/bin/ar71xx/ -d -u $USER -p0 -K --log-dhcp --bootp-dynamic

Your rb941-2nd should boot into OpenWrt with IP 192.168.1.1

If the above method to force TFTPing the initramfs image doesn't work, then:

Flash OpenWrt to Mikrotik

After openwrt build you should have this files in bin/ar71xx/:

To flash openwrt-ar71xx-mikrotik-rb-941-2nd-squashfs-sysupgrade.bin:

Using ssh:
  login into router via 'ssh -l root 192.168.1.1' and then copy it(using wget or nc or...) to /tmp/
  Do: $ sysupgrade /tmp/openwrt-ar71xx-mikrotik-rb-941-2nd-squashfs-sysupgrade.bin  
  After reboot you should be able to login via 'ssh -l root 192.168.1.1'
Using LuCI:  
  Go to http://192.168.1.1 and login as root and no password
  Select System -> Backup / Flash Firmware and then do Flash new firmware image using openwrt-ar71xx-mikrotik-rb-941-2nd-squashfs-sysupgrade.bin file

Note that with the RB941-2nD-TC and if you netbooted openwrt-18.06.2-ar71xx-mikrotik-rb-nor-flash-16M-initramfs-kernel.bin you might encounter this error message:

$ sysupgrade -n openwrt-18.06.2-ar71xx-mikrotik-rb-nor-flash-16M-squashfs-sysupgrade.bin 
Device unknown not supported by this image
Supported devices: rb-750-r2 rb-750up-r2 rb-750p-pbr2 rb-911-2hn rb-911-5hn rb-941-2nd rb-951ui-2nd rb-952ui-5ac2nd rb-962uigs-5hact2hnt rb-lhg-5nd rb-map-2nd rb-mapl-2nd rb-wap-2nd
Image check 'fwtool_check_image' failed.

In this case netboot a current snapshot, i.e. openwrt-ar71xx-mikrotik-rb-nor-flash-16M-initramfs-kernel.bin. Then you can sysupgrade any OpenWrt release.

Note also that newer RB941-2nD and RB941-2nD-TC expose slightly changed information in /proc/cpuinfo which is why e.g. the switch is not currently configured in the 18.06.2 release of OpenWrt. This was fixed in Git commit 6578f3c9 on February 8th, 2019, so you need to use a current snapshot of OpenWrt until 19.XX.X comes out or the fix is eventually backported into the 18.06.X series.

How to enable Serial Port

There is (unsoldered) serial port on the board, which can be used with 3.3V TTL converter. Port settings are 115200/8N1. However, by default serial port is not enabled (there is no data on it). It is possible to enable it and get full access to the mikrotik bootloader menu, including memory test, CPU frequency selection and boot sequence. To enable serial port you will have to:

  1. Use RouterBoot 3.27 or earlier versions. 3.29, 3.33 and 3.36 are broken, but it is possible to reflash the boot loader using openwrt.
  2. Download and backup “hard_config” partition. Find byte sequence 00 04 00 15 00 28 40 01 and replace it to 00 04 00 15 00 28 40 00 to enable serial port
  3. You should rebuild kernel without .mask_flags = MTD_WRITEABLE in the mach-rb941.c for the “hard_config” partition. Flash patched hard_config partition using mtd tool to the device.

That`s it, after reboot you should see loader prompt:

RouterBOOT booter 3.22

RouterBOARD 941-2nD

CPU frequency: 650 MHz
Memory speed: 200 MHz
 Memory size:  32 MiB
Storage size:  16 MiB

Press any key within 2 seconds to enter setup.

RouterBOOT-3.22
What do you want to configure?
d - boot delay
k - boot key
s - serial console
n - silent boot
o - boot device
f - cpu frequency
r - reset booter configuration
e - format storage
w - repartition nand
g - upgrade firmware
i - board info
p - boot protocol
b - booter options
t - do memory testing
x - exit setup
your choice:

loading kernel from nand... OK
setting up elf image... OK
jumping to kernel code

How reflash boot loader

It is possible to change device boot loader from the OpenWrt, e.g. to downgrade it for enabling serial access. There are 2 bootloaders in the board: routerboot2 (main loader) and routerboot (backup loader, on the beginning on the flash). I am recommending to experiment with the main (routerboot2) loader which is located on the mtd3 partition, because if it is damaged board can still be booted using routerboot. If routerboot is damaged you will have to reflash the memory chip using programmer. You can choose which loader to use using rbcfg tool or from the routeros menu. To force boot from the backup loader turn device on with button pressed and wait ~30 seconds.

To change the loader you will have to:

This post shows how to update to the latest 6.43.7 bootloader on rb-941-2nd-tc with the routeros interface

https://forum.mikrotik.com/viewtopic.php?f=2&t=159749&p=785169#p785169


Bootlogs

RouterOS bootlog (with serial console enabled)

RouterBOOT booter 3.22 RouterBOARD 941-2nD CPU frequency: 650 MHz Memory speed: 200 MHz Memory size: 32 MiB Storage size: 16 MiB Press any key within 2 seconds to enter setup.. loading kernel from nand... OK setting up elf image... OK jumping to kernel code Starting... Generating SSH 2048bit RSA host key... Generating SSH 1024bit DSA host key... Starting services... MikroTik 6.38.1 (stable) MikroTik Login:


OpenWrt bootlog

[ 0.000000] Linux version 4.4.42 (builder@3d0c773196e1) (gcc version 5.4.0 (LEDE GCC 5.4.0 r3011-5faad30) ) #0 Thu Jan 19 15:29:00 2017 [ 0.000000] bootconsole [early0] enabled [ 0.000000] CPU0 revision is: 00019374 (MIPS 24Kc) [ 0.000000] SoC: Qualcomm Atheros QCA9533 ver 2 rev 0 [ 0.000000] Determined physical RAM map: [ 0.000000] memory: 02000000 @ 00000000 (usable) [ 0.000000] User-defined physical RAM map: [ 0.000000] memory: 02000000 @ 00000000 (usable) [ 0.000000] Initrd not found or empty - disabling initrd [ 0.000000] No valid device tree found, continuing without [ 0.000000] Zone ranges: [ 0.000000] Normal [mem 0x0000000000000000-0x0000000001ffffff] [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000000000000-0x0000000001ffffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000001ffffff] [ 0.000000] On node 0 totalpages: 8192 [ 0.000000] free_area_init_node: node 0, pgdat 8046a3d0, node_mem_map 81000000 [ 0.000000] Normal zone: 64 pages used for memmap [ 0.000000] Normal zone: 0 pages reserved [ 0.000000] Normal zone: 8192 pages, LIFO batch:0 [ 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] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128 [ 0.000000] Kernel command line: console=ttyS0,115200 no-nand parts=1 boot_part_size=16777216 gpio=8586815 HZ=325000000 mem=32M kmac=6C:3B:6B:67:B0:1A board=H951L ver=3.22 hw_opt=00284000 boot=1 mlc=8 rootfstype=squashfs noinitrd [ 0.000000] PID hash table entries: 128 (order: -3, 512 bytes) [ 0.000000] Dentry cache hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Inode-cache hash table entries: 2048 (order: 1, 8192 bytes) [ 0.000000] Writing ErrCtl register=00000000 [ 0.000000] Readback ErrCtl register=00000000 [ 0.000000] Memory: 27360K/32768K available (3287K kernel code, 168K rwdata, 812K rodata, 204K init, 198K bss, 5408K 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] Clocks: CPU:650.000MHz, DDR:400.000MHz, AHB:200.000MHz, Ref:25.000MHz [ 0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 5880801374 ns [ 0.000009] sched_clock: 32 bits at 325MHz, resolution 3ns, wraps every 6607641598ns [ 0.008855] Calibrating delay loop... 432.53 BogoMIPS (lpj=2162688) [ 0.071953] pid_max: default: 32768 minimum: 301 [ 0.077325] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes) [ 0.084837] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes) [ 0.095927] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.107908] NET: Registered protocol family 16 [ 0.114644] MIPS: machine is MikroTik RouterBOARD 941-2nD [ 0.353974] clocksource: Switched to clocksource MIPS [ 0.361124] NET: Registered protocol family 2 [ 0.366904] TCP established hash table entries: 1024 (order: 0, 4096 bytes) [ 0.374888] TCP bind hash table entries: 1024 (order: 0, 4096 bytes) [ 0.382111] TCP: Hash tables configured (established 1024 bind 1024) [ 0.389459] UDP hash table entries: 256 (order: 0, 4096 bytes) [ 0.396134] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) [ 0.403585] NET: Registered protocol family 1 [ 0.408627] PCI: CLS 0 bytes, default 32 [ 0.413522] futex hash table entries: 256 (order: -1, 3072 bytes) [ 0.420612] Crashlog allocated RAM at address 0x1f00000 [ 0.441048] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 0.447755] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc. [ 0.461989] io scheduler noop registered [ 0.466516] io scheduler deadline registered (default) [ 0.472627] Serial: 8250/16550 driver, 1 ports, IRQ sharing disabled [ 0.480320] console [ttyS0] disabled [ 0.504529] serial8250.0: ttyS0 at MMIO 0x18020000 (irq = 11, base_baud = 1562500) is a 16550A [ 0.514336] console [ttyS0] enabled [ 0.521883] bootconsole [early0] disabled [ 0.533439] m25p80 spi0.0: found w25q128, expected m25p80 [ 0.539107] m25p80 spi0.0: w25q128 (16384 Kbytes) [ 0.543983] Creating 7 MTD partitions on "spi0.0": [ 0.548936] 0x000000000000-0x00000000e000 : "routerboot" [ 0.556696] 0x00000000e000-0x00000000f000 : "hard_config" [ 0.564111] 0x00000000f000-0x000000010000 : "bios" [ 0.570836] 0x000000010000-0x00000001f000 : "routerboot2" [ 0.578241] 0x00000001f000-0x000000020000 : "soft_config" [ 0.585657] 0x000000020000-0x000000a00000 : "rootfs" [ 0.592511] mtd: device 5 (rootfs) set to be root filesystem [ 0.598494] 1 squashfs-split partitions found on MTD device rootfs [ 0.604897] 0x000000200000-0x000000a00000 : "rootfs_data" [ 0.612234] 0x000000a00000-0x000001000000 : "kernel" [ 0.643533] libphy: ag71xx_mdio: probed [ 1.236313] ag71xx-mdio.1: Found an AR934X built-in switch [ 1.279879] eth0: Atheros AG71xx at 0xba000000, irq 5, mode:GMII [ 1.288077] NET: Registered protocol family 10 [ 1.296683] NET: Registered protocol family 17 [ 1.301356] bridge: automatic filtering via arp/ip/ip6tables has been deprecated. Update your scripts to load br_netfilter if you need this. [ 1.314579] 8021q: 802.1Q VLAN Support v1.8 [ 1.329950] VFS: Mounted root (squashfs filesystem) readonly on device 31:5. [ 1.338702] Freeing unused kernel memory: 204K (8048d000 - 804c0000) [ 2.350341] init: Console is alive [ 2.354218] init: - watchdog - [ 3.258291] init: - preinit - [ 3.752774] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready [ 3.780183] random: procd: uninitialized urandom read (4 bytes read, 6 bits of entropy available) [ 5.846475] eth0: link up (1000Mbps/Full duplex) [ 5.860766] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 7.112036] jffs2: notice: (340) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found. [ 7.129786] mount_root: switching to jffs2 overlay [ 7.142825] urandom-seed: Seeding with /etc/urandom.seed [ 7.328366] eth0: link down [ 7.342795] procd: - early - [ 7.347789] procd: - watchdog - [ 7.963696] procd: - ubus - [ 8.018674] random: ubusd: uninitialized urandom read (4 bytes read, 13 bits of entropy available) [ 8.028502] random: ubusd: uninitialized urandom read (4 bytes read, 13 bits of entropy available) [ 8.037959] random: ubusd: uninitialized urandom read (4 bytes read, 13 bits of entropy available) [ 8.047761] random: ubusd: uninitialized urandom read (4 bytes read, 13 bits of entropy available) [ 8.057186] random: ubusd: uninitialized urandom read (4 bytes read, 13 bits of entropy available) [ 8.067365] random: ubusd: uninitialized urandom read (4 bytes read, 13 bits of entropy available) [ 8.076954] random: ubusd: uninitialized urandom read (4 bytes read, 13 bits of entropy available) [ 8.086697] procd: - init - [ 8.380579] ip6_tables: (C) 2000-2006 Netfilter Core Team [ 8.398410] Loading modules backported from Linux version wt-2016-10-03-1-g6fcb1a6 [ 8.406307] Backport generated by backports.git backports-20160324-9-g0e38f5c [ 8.417203] ip_tables: (C) 2000-2006 Netfilter Core Team [ 8.431720] nf_conntrack version 0.5.0 (430 buckets, 1720 max) [ 8.475120] xt_time: kernel timezone is -0000 [ 8.545359] PPP generic driver version 2.4.2 [ 8.552548] NET: Registered protocol family 24 [ 8.605430] ath: EEPROM regdomain: 0x0 [ 8.605454] ath: EEPROM indicates default country code should be used [ 8.605462] ath: doing EEPROM country->regdmn map search [ 8.605484] ath: country maps to regdmn code: 0x3a [ 8.605495] ath: Country alpha2 being used: US [ 8.605503] ath: Regpair used: 0x3a [ 8.617140] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht' [ 8.623419] ieee80211 phy0: Atheros AR9531 Rev:2 mem=0xb8100000, irq=47 [ 9.606118] random: jshn: uninitialized urandom read (4 bytes read, 16 bits of entropy available) [ 9.688917] random: ubusd: uninitialized urandom read (4 bytes read, 16 bits of entropy available) [ 14.725676] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready [ 14.755625] device eth0.1 entered promiscuous mode [ 14.760591] device eth0 entered promiscuous mode [ 14.783228] IPv6: ADDRCONF(NETDEV_UP): br-lan: link is not ready [ 14.831813] IPv6: ADDRCONF(NETDEV_UP): eth0.2: link is not ready [ 16.326106] eth0: link up (1000Mbps/Full duplex) [ 16.330917] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 16.339023] br-lan: port 1(eth0.1) entered forwarding state [ 16.344921] br-lan: port 1(eth0.1) entered forwarding state [ 16.350779] IPv6: ADDRCONF(NETDEV_CHANGE): eth0.2: link becomes ready [ 16.404087] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready [ 18.343998] br-lan: port 1(eth0.1) entered forwarding state


References

Tags

How to add tags