OpenWrt Forum Archive

Topic: D-Link DAP-1520

The content of this topic has been archived on 31 Mar 2018. There are no obvious gaps in this topic, but there may still be some posts missing at the end.

Hi everyone,

Main specs:
CPU: MediaTek MT7620 @ 580MHz
RAM: 64MB DDR2 (Winbond W9751G6KB-25 64471X600ZY2)
Flash: 8MB (MXIC MX 25L640GE)
External WiFi: MediaTek MT7610EN
UART: 57600 8N1

I got a D-Link DAP-1520 for free from my ISP as a sign up bonus. Since I use OpenWrt, and this doesn't (yet) run OpenWrt, I had no use for it, so I ripped it apart.

The device is powered by 5V from an integrated AC->DC power supply. There is a unpopulated 4 pin 2.54mm UART header on the board (upper right from front, upper left from rear), which you can see the SoC console from. I soldered the pins you see in the photos.

I have attached the full boot log below. The device requires at least 2A @ 5V to complete booting and bring the WiFi radios up. If the power source cannot supply that much, it will typically power cycle around the initialization of the 5GHz radio.

U-Boot 1.1.3 (Aug  8 2013 - 10:32:46)

Board: Ralink APSoC DRAM:  64 MB
relocate_code Pointer at: 83fb0000
enable ephy clock...done. rf reg 29 = 5
SSC disabled.
spi_wait_nsec: 29 
spi device id: c2 20 17 c2 20 (2017c220)
find flash: MX25L6405D
raspi_read: from:30000 len:1000 
*** Warning - bad CRC, using default environment

============================================ 
Ralink UBoot Version: 4.1.1.0
-------------------------------------------- 
ASIC 7620_MP (Port5<->None)
DRAM component: 512 Mbits DDR, width 16
DRAM bus: 16 bit
Total memory: 64 MBytes
Flash component: SPI Flash
Date:Aug  8 2013  Time:10:32:46
Cameo Version: v1.00 Build:01
Module Name: D-Link DAP-1520A1
============================================ 
icache: sets:512, ways:4, linesz:32 ,total:65536
dcache: sets:256, ways:4, linesz:32 ,total:32768 

 ##### The CPU freq = 580 MHZ #### 
 estimate memory size =64 Mbytes
raspi_read: from:50000 len:40 
raspi_read: from:4f0000 len:40 

=================================================
Check image validation:
Image1 Header Magic Number --> OK
Image2 Header Magic Number --> OK
Image1 Header Checksum --> OK
Image2 Header Checksum --> OK
Image1 Data Checksum --> raspi_read: from:50040 len:ddf98 
OK
Image2 Data Checksum --> raspi_read: from:4f0040 len:ca8f4 
OK
Image1 Stable Flag --> Not stable
Image1 Try Counter --> 0

Image1: OK Image2: OK
Both images are OK!!!

=================================================

Please choose the operation: 
   1: Load system code to SDRAM via TFTP. 
   2: Load system code then write to Flash via TFTP. 
   3: Boot system code via Flash (default).
   4: Entr boot command line interface.
   7: Load Boot Loader code then write to Flash via Serial. 
   9: Load Boot Loader code then write to Flash via TFTP. 
 1  0 
   
3: System Boot system code via Flash.
## Booting image at bc050000 ...
raspi_read: from:50000 len:40 
   Image Name:   Linux Kernel Image
   Image Type:   MIPS Linux Kernel Image (lzma compressed)
   Data Size:    909208 Bytes = 887.9 kB
   Load Address: 80000000
   Entry Point:  8000c310
raspi_read: from:50040 len:ddf98 
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
No initrd
## Transferring control to Linux (at address 8000c310) ...
## Giving linux memsize in MB, 64

Starting kernel ...


LINUX started...

 THIS IS ASIC
Linux version 2.6.36.x (root@ubuntu-10) (gcc version 3.4.2) #1 Fri Aug 22 16:26:27 CST 2014

 The CPU feqenuce set to 580 MHz

 MIPS CPU sleep mode enabled.
 PCIE: bypass PCIe DLL.
 PCIE: Elastic buffer control: Addr:0x68 -> 0xB4
 disable all power about PCIe
CPU revision is: 00019650 (MIPS 24Kc)
Determined physical RAM map:
 memory: 04000000 @ 00000000 (usable)
Zone PFN ranges:
  Normal   0x00000000 -> 0x00004000
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
    0: 0x00000000 -> 0x00004000
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
Kernel command line: console=ttyS1,57600n8 root=/dev/mtdblock5 console=ttyS0,57600 root=31:05 rootfstype=squashfs init=/sbin/init
PID hash table entries: 256 (order: -2, 1024 bytes)
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
Primary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes
Writing ErrCtl register=0007efde
Readback ErrCtl register=0007efde
Memory: 62028k/65536k available (2225k kernel code, 3508k reserved, 338k data, 168k init, 0k highmem)
NR_IRQS:128
MTK/Ralink System Tick Counter init... cd:80271d98, m:214748, s:32
console [ttyS1] enabled
Calibrating delay loop... 386.04 BogoMIPS (lpj=772096)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
NET: Registered protocol family 16
RALINK_GPIOMODE = 1a311d
RALINK_GPIOMODE = 18311d
PPLL_CFG1=0xe90000
MT7620 PPLL lock
PPLL_DRV =0x80080504
start PCIe register access
RALINK_PCI_PCICFG_ADDR = 1000f0

*************** MT7620 PCIe RC mode *************
bio: create slab <bio-0> at 0
vgaarb: loaded
pci 0000:00:00.0: BAR 8: assigned [mem 0x20000000-0x201fffff]
pci 0000:00:00.0: BAR 1: assigned [mem 0x20200000-0x2020ffff]
pci 0000:00:00.0: BAR 1: set to [mem 0x20200000-0x2020ffff] (PCI address [0x20200000-0x2020ffff]
pci 0000:01:00.0: BAR 0: assigned [mem 0x20000000-0x200fffff]
pci 0000:01:00.0: BAR 0: set to [mem 0x20000000-0x200fffff] (PCI address [0x20000000-0x200fffff]
pci 0000:01:00.1: BAR 0: assigned [mem 0x20100000-0x201fffff]
pci 0000:01:00.1: BAR 0: set to [mem 0x20100000-0x201fffff] (PCI address [0x20100000-0x201fffff]
pci 0000:00:00.0: PCI bridge to [bus 01-01]
pci 0000:00:00.0:   bridge window [io  disabled]
pci 0000:00:00.0:   bridge window [mem 0x20000000-0x201fffff]
pci 0000:00:00.0:   bridge window [mem pref disabled]
BAR0 at slot 0 = 0
bus=0x0, slot = 0x0
res[0]->start = 0
res[0]->end = 0
res[1]->start = 20200000
res[1]->end = 2020ffff
res[2]->start = 0
res[2]->end = 0
res[3]->start = 0
res[3]->end = 0
res[4]->start = 0
res[4]->end = 0
res[5]->start = 0
res[5]->end = 0
bus=0x1, slot = 0x0
res[0]->start = 20000000
res[0]->end = 200fffff
res[1]->start = 0
res[1]->end = 0
res[2]->start = 0
res[2]->end = 0
res[3]->start = 0
res[3]->end = 0
res[4]->start = 0
res[4]->end = 0
res[5]->start = 0
res[5]->end = 0
bus=0x1, slot = 0x0
res[0]->start = 20100000
res[0]->end = 201fffff
res[1]->start = 0
res[1]->end = 0
res[2]->start = 0
res[2]->end = 0
res[3]->start = 0
res[3]->end = 0
res[4]->start = 0
res[4]->end = 0
res[5]->start = 0
res[5]->end = 0
Switching to clocksource Ralink external timer
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
squashfs: version 4.0 (2009/01/31) Phillip Lougher
msgmni has been set to 121
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
io scheduler noop registered (default)
Ralink gpio driver initialized
Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0x10000500 (irq = 37) is a 16550A
serial8250: ttyS1 at MMIO 0x10000c00 (irq = 12) is a 16550A
brd: module loaded
deice id : c2 20 17 c2 20 (2017c220)
MX25L6405D(c2 2017c220) (8192 Kbytes)
mtd .name = raspi, .size = 0x00800000 (0M) .erasesize = 0x00000008 (0K) .numeraseregions = 65536
Creating 9 MTD partitions on "raspi":
0x000000000000-0x000000800000 : "ALL"
0x000000000000-0x000000030000 : "u-boot"
0x000000030000-0x000000040000 : "nvram"
0x000000040000-0x000000050000 : "Factory"
0x000000050000-0x000000140000 : "linux4"
0x000000140000-0x0000004e0000 : "rootfs"
0x0000004e0000-0x0000004f0000 : "LANG"
0x0000004f0000-0x0000005c0000 : "linux4b"
0x0000005c0000-0x000000800000 : "rootfsb"
rdm_major = 253
SMACCR1 -- : 0x0000000c
SMACCR0 -- : 0x43762077
Ralink APSoC Ethernet Driver Initilization. v3.0  256 rx/tx descriptors allocated, mtu = 1500!
SMACCR1 -- : 0x0000000c
SMACCR0 -- : 0x43762077
PROC INIT OK!
TCP cubic registered
NET: Registered protocol family 10
IPv6 over IPv4 tunneling driver
NET: Registered protocol family 17
VFS: Mounted root (squashfs filesystem) readonly on device 31:5.
Freeing unused kernel memory: 168k freed
init started:  BusyBox v1.01 (2014.08.22-08:26+0000) multi-call binary
Algorithmics/MIPS FPU Emulator v1.5
devpts: called with bogus options
init NVRAM_SPACE from mtdblock size
init nvram memory map size: 0x10000 order of pages: 0x4
nvram module init:
    /dev/nvram major number 225 glues to mtd: "nvram" size: 0x00010000
    nvram_space: 0x00010000 mapped via mmap(2)
openfile :/etc/sysinfo
openfile :/etc/nvram.default


BusyBox v1.01 (2014.08.22-08:26+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

/ # rm: cannot remove `/var/wizard_lang.js': No such file or directory
umount: cannot umount /tmp/lang_pack: No such file or directory
eth2: Cannot assign requested address
Raeth v3.0 (Tasklet,SkbRecycle)

phy_tx_ring = 0x03f4b000, tx_ring = 0xa3f4b000

phy_rx_ring0 = 0x03f4c000, rx_ring0 = 0xa3f4c000
SMACCR1 -- : 0x000054b8
SMACCR0 -- : 0x0a7d19a6
CDMA_CSG_CFG = 81000000
GDMA1_FWD_CFG = 20710000
umount: cannot umount /tmp/lang_pack: No such file or directory
mount: mounting /dev/mtdblock6 on /tmp/lang_pack failed
eth2: Cannot assign requested address
device eth2 entered promiscuous mode
TFTP main
standard_tftp_server launched on port 69.
killall: syslogd: no process killed
killall: klogd: no process killed
Sat Jan  1 00:00:00 UTC 2011
/tmp/password has been created
br0: port 1(eth2) entering forwarding state
br0: port 1(eth2) entering forwarding state
Set: phy[0].reg[0] = 3900
Set: phy[1].reg[0] = 3900
Set: phy[2].reg[0] = 3900
Set: phy[3].reg[0] = 3900
Set: phy[4].reg[0] = 3900
Set: phy[0].reg[0] = 3100
2011-01-01 00:00:00: (network.c.247) warning: please use server.use-ipv6 only for hostnames, not without server.bind / empty address; your config will break if the kernel default for IPV6_V6ONLY changes 
rt2860v2_ap: module license 'unspecified' taints kernel.
Disabling lock debugging due to kernel taint


=== pAd = c04cd000, size = 1278080 ===

<-- RTMPAllocTxRxRingMemory, Status=0
<-- RTMPAllocAdapterBlock, Status=0
AP Driver version-2.7.1.6_edcca_monitor_20131222


=== pAd = c0b02000, size = 2010752 ===

<-- RTMPAllocTxRxRingMemory, Status=0
<-- RTMPAllocAdapterBlock, Status=0
device_id =0x7650
==>MT76x0_WLAN_ChipOnOff(): OnOff:1, pAd->WlanFunCtrl:0x0, Reg-WlanFunCtrl=0xff000002
MACVersion = 0x76502000
RX DESC a3672000  size = 2048
RTMP_TimerListAdd: add timer obj c05a1e20!
RTMP_TimerListAdd: add timer obj c053b694!
RTMP_TimerListAdd: add timer obj c053f78c!
RTMP_TimerListAdd: add timer obj c053f84c!
RTMP_TimerListAdd: add timer obj c053f90c!
RTMP_TimerListAdd: add timer obj c053f9cc!
RTMP_TimerListAdd: add timer obj c053fa8c!
RTMP_TimerListAdd: add timer obj c053fb4c!
RTMP_TimerListAdd: add timer obj c053fc0c!
RTMP_TimerListAdd: add timer obj c053fccc!
RTMP_TimerListAdd: add timer obj c053fd8c!
RTMP_TimerListAdd: add timer obj c053fe4c!
RTMP_TimerListAdd: add timer obj c053ff0c!
RTMP_TimerListAdd: add timer obj c053ffcc!
RTMP_TimerListAdd: add timer obj c054008c!
RTMP_TimerListAdd: add timer obj c054014c!
RTMP_TimerListAdd: add timer obj c054020c!
RTMP_TimerListAdd: add timer obj c05402cc!
RTMP_TimerListAdd: add timer obj c0569e9c!
RTMP_TimerListAdd: add timer obj c056df94!
RTMP_TimerListAdd: add timer obj c056e054!
RTMP_TimerListAdd: add timer obj c056e114!
RTMP_TimerListAdd: add timer obj c056e1d4!
RTMP_TimerListAdd: add timer obj c056e294!
RTMP_TimerListAdd: add timer obj c056e354!
RTMP_TimerListAdd: add timer obj c056e414!
RTMP_TimerListAdd: add timer obj c056e4d4!
RTMP_TimerListAdd: add timer obj c056e594!
RTMP_TimerListAdd: add timer obj c056e654!
RTMP_TimerListAdd: add timer obj c056e714!
RTMP_TimerListAdd: add timer obj c056e7d4!
RTMP_TimerListAdd: add timer obj c056e894!
RTMP_TimerListAdd: add timer obj c056e954!
RTMP_TimerListAdd: add timer obj c056ea14!
RTMP_TimerListAdd: add timer obj c056ead4!
RTMP_TimerListAdd: add timer obj c053b668!
RTMP_TimerListAdd: add timer obj c053b6c0!
RTMP_TimerListAdd: add timer obj c053f760!
RTMP_TimerListAdd: add timer obj c053f820!
RTMP_TimerListAdd: add timer obj c053f8e0!
RTMP_TimerListAdd: add timer obj c053f9a0!
RTMP_TimerListAdd: add timer obj c053fa60!
RTMP_TimerListAdd: add timer obj c053fb20!
RTMP_TimerListAdd: add timer obj c053fbe0!
RTMP_TimerListAdd: add timer obj c053fca0!
RTMP_TimerListAdd: add timer obj c053fd60!
RTMP_TimerListAdd: add timer obj c053fe20!
RTMP_TimerListAdd: add timer obj c053fee0!
RTMP_TimerListAdd: add timer obj c053ffa0!
RTMP_TimerListAdd: add timer obj c0540060!
RTMP_TimerListAdd: add timer obj c0540120!
RTMP_TimerListAdd: add timer obj c05401e0!
RTMP_TimerListAdd: add timer obj c05402a0!
RTMP_TimerListAdd: add timer obj c0569e70!
RTMP_TimerListAdd: add timer obj c0569ec8!
RTMP_TimerListAdd: add timer obj c056df68!
RTMP_TimerListAdd: add timer obj c056e028!
RTMP_TimerListAdd: add timer obj c056e0e8!
RTMP_TimerListAdd: add timer obj c056e1a8!
RTMP_TimerListAdd: add timer obj c056e268!
RTMP_TimerListAdd: add timer obj c056e328!
RTMP_TimerListAdd: add timer obj c056e3e8!
RTMP_TimerListAdd: add timer obj c056e4a8!
RTMP_TimerListAdd: add timer obj c056e568!
RTMP_TimerListAdd: add timer obj c056e628!
RTMP_TimerListAdd: add timer obj c056e6e8!
RTMP_TimerListAdd: add timer obj c056e7a8!
RTMP_TimerListAdd: add timer obj c056e868!
RTMP_TimerListAdd: add timer obj c056e928!
RTMP_TimerListAdd: add timer obj c056e9e8!
RTMP_TimerListAdd: add timer obj c056eaa8!
RTMP_TimerListAdd: add timer obj c053b63c!
RTMP_TimerListAdd: add timer obj c0569e44!
RTMP_TimerListAdd: add timer obj c053f7b8!
RTMP_TimerListAdd: add timer obj c053f878!
RTMP_TimerListAdd: add timer obj c053f938!
RTMP_TimerListAdd: add timer obj c053f9f8!
RTMP_TimerListAdd: add timer obj c053fab8!
RTMP_TimerListAdd: add timer obj c053fb78!
RTMP_TimerListAdd: add timer obj c053fc38!
RTMP_TimerListAdd: add timer obj c053fcf8!
RTMP_TimerListAdd: add timer obj c053fdb8!
RTMP_TimerListAdd: add timer obj c053fe78!
RTMP_TimerListAdd: add timer obj c053ff38!
RTMP_TimerListAdd: add timer obj c053fff8!
RTMP_TimerListAdd: add timer obj c05400b8!
RTMP_TimerListAdd: add timer obj c0540178!
RTMP_TimerListAdd: add timer obj c0540238!
RTMP_TimerListAdd: add timer obj c05402f8!
RTMP_TimerListAdd: add timer obj c053b710!
RTMP_TimerListAdd: add timer obj c053b73c!
RTMP_TimerListAdd: add timer obj c053b768!
RTMP_TimerListAdd: add timer obj c056dfc0!
RTMP_TimerListAdd: add timer obj c056e080!
RTMP_TimerListAdd: add timer obj c056e140!
RTMP_TimerListAdd: add timer obj c056e200!
RTMP_TimerListAdd: add timer obj c056e2c0!
RTMP_TimerListAdd: add timer obj c056e380!
RTMP_TimerListAdd: add timer obj c056e440!
RTMP_TimerListAdd: add timer obj c056e500!
RTMP_TimerListAdd: add timer obj c056e5c0!
RTMP_TimerListAdd: add timer obj c056e680!
RTMP_TimerListAdd: add timer obj c056e740!
RTMP_TimerListAdd: add timer obj c056e800!
RTMP_TimerListAdd: add timer obj c056e8c0!
RTMP_TimerListAdd: add timer obj c056e980!
RTMP_TimerListAdd: add timer obj c056ea40!
RTMP_TimerListAdd: add timer obj c056eb00!
RTMP_TimerListAdd: add timer obj c0569f18!
RTMP_TimerListAdd: add timer obj c0569f44!
RTMP_TimerListAdd: add timer obj c0569f70!
RTMP_TimerListAdd: add timer obj c04d5014!
RTMP_TimerListAdd: add timer obj c04d4bf8!
RTMP_TimerListAdd: add timer obj c04d4fe4!
RTMP_TimerListAdd: add timer obj c04d5320!
RTMP_TimerListAdd: add timer obj c04d5260!
RTMP_TimerListAdd: add timer obj c04d5290!
RTMP_TimerListAdd: add timer obj c04d8fbc!
RTMP_TimerListAdd: add timer obj c04d8ba0!
RTMP_TimerListAdd: add timer obj c04d8f8c!
RTMP_TimerListAdd: add timer obj c04d92c8!
RTMP_TimerListAdd: add timer obj c04d9208!
RTMP_TimerListAdd: add timer obj c04d9238!
RTMP_TimerListAdd: add timer obj c04dcf64!
RTMP_TimerListAdd: add timer obj c04dcb48!
RTMP_TimerListAdd: add timer obj c04dcf34!
RTMP_TimerListAdd: add timer obj c04dd270!
RTMP_TimerListAdd: add timer obj c04dd1b0!
RTMP_TimerListAdd: add timer obj c04dd1e0!
RTMP_TimerListAdd: add timer obj c04e0f0c!
RTMP_TimerListAdd: add timer obj c04e0af0!
RTMP_TimerListAdd: add timer obj c04e0edc!
RTMP_TimerListAdd: add timer obj c04e1218!
RTMP_TimerListAdd: add timer obj c04e1158!
RTMP_TimerListAdd: add timer obj c04e1188!
RTMP_TimerListAdd: add timer obj c04e4eb4!
RTMP_TimerListAdd: add timer obj c04e4a98!
RTMP_TimerListAdd: add timer obj c04e4e84!
RTMP_TimerListAdd: add timer obj c04e51c0!
RTMP_TimerListAdd: add timer obj c04e5100!
RTMP_TimerListAdd: add timer obj c04e5130!
RTMP_TimerListAdd: add timer obj c04e8e5c!
RTMP_TimerListAdd: add timer obj c04e8a40!
RTMP_TimerListAdd: add timer obj c04e8e2c!
RTMP_TimerListAdd: add timer obj c04e9168!
RTMP_TimerListAdd: add timer obj c04e90a8!
RTMP_TimerListAdd: add timer obj c04e90d8!
RTMP_TimerListAdd: add timer obj c04ece04!
RTMP_TimerListAdd: add timer obj c04ec9e8!
RTMP_TimerListAdd: add timer obj c04ecdd4!
RTMP_TimerListAdd: add timer obj c04ed110!
RTMP_TimerListAdd: add timer obj c04ed050!
RTMP_TimerListAdd: add timer obj c04ed080!
RTMP_TimerListAdd: add timer obj c04f0dac!
RTMP_TimerListAdd: add timer obj c04f0990!
RTMP_TimerListAdd: add timer obj c04f0d7c!
RTMP_TimerListAdd: add timer obj c04f10b8!
RTMP_TimerListAdd: add timer obj c04f0ff8!
RTMP_TimerListAdd: add timer obj c04f1028!
RTMP_TimerListAdd: add timer obj c053e5ec!
RTMP_TimerListAdd: add timer obj c053e1d0!
RTMP_TimerListAdd: add timer obj c053e5bc!
RTMP_TimerListAdd: add timer obj c053e8f8!
RTMP_TimerListAdd: add timer obj c053e61c!
RTMP_TimerListAdd: add timer obj c053e64c!
RTMP_TimerListAdd: add timer obj c053e67c!
RTMP_TimerListAdd: add timer obj c056cdf4!
RTMP_TimerListAdd: add timer obj c056c9d8!
RTMP_TimerListAdd: add timer obj c056cdc4!
RTMP_TimerListAdd: add timer obj c056d100!
RTMP_TimerListAdd: add timer obj c056ce24!
RTMP_TimerListAdd: add timer obj c056ce54!
RTMP_TimerListAdd: add timer obj c056ce84!
RTMP_TimerListAdd: add timer obj c057878c!
RTMP_TimerListAdd: add timer obj c05788a8!
RTMP_TimerListAdd: add timer obj c05787b8!
RTMP_TimerListAdd: add timer obj c056fcc4!
RTMP_TimerListAdd: add timer obj c04d24c4!
RTMP_TimerListAdd: add timer obj c04d646c!
RTMP_TimerListAdd: add timer obj c04da414!
RTMP_TimerListAdd: add timer obj c04de3bc!
RTMP_TimerListAdd: add timer obj c04e2364!
RTMP_TimerListAdd: add timer obj c04e630c!
RTMP_TimerListAdd: add timer obj c04ea2b4!
RTMP_TimerListAdd: add timer obj c04ee25c!
RTMP_TimerListAdd: add timer obj c056f9d0!
APSDCapable[0]=0
APSDCapable[1]=0
APSDCapable[2]=0
APSDCapable[3]=0
APSDCapable[4]=0
APSDCapable[5]=0
APSDCapable[6]=0
APSDCapable[7]=0
APSDCapable[8]=0
APSDCapable[9]=0
APSDCapable[10]=0
APSDCapable[11]=0
APSDCapable[12]=0
APSDCapable[13]=0
APSDCapable[14]=0
APSDCapable[15]=0
default ApCliAPSDCapable[0]=0
default ApCliAPSDCapable[1]=0
start ch = 1, ch->num = 2
30 30 30 30 
30 30 30 30 30 30 30 30 
26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
start ch = 3, ch->num = 9
30 30 30 30 
30 30 30 30 30 30 30 30 
26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 
26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 
start ch = 12, ch->num = 2
30 30 30 30 
30 30 30 30 30 30 30 30 
26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
start ch = 14, ch->num = 1
30 30 30 30 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1. Phy Mode = 9
2. Phy Mode = 9
E2PROM: D0 target power=0xff20 
E2PROM: 40 MW Power Delta= 0 
3. Phy Mode = 9
AntCfgInit: primary/secondary ant 0/1
Initialize RF Central Registers for E2 !!!
Initialize RF Central Registers for E3 !!!
Initialize RF Channel Registers for E2 !!!
Initialize RF Channel Registers for E3 !!!
Initialize RF DCCal Registers for E2 !!!
Initialize RF DCCal Registers for E3 !!!
D1 = -1, D2 = 16, CalCode = 40 !!!
RT6352_Temperature_Init : BBPR49 = 0xffffffff
RT6352_Temperature_Init : TemperatureRef25C = 0xfffffff5
Current Temperature from BBP_R49=0xffffffec
RT6352_TemperatureCalibration:: CurrentTemper < 20 
 TX BW Filter Calibration !!!
 RX BW Filter Calibration !!!
LOFT Calibration Done!
IQCalibration Start!
IQCalibration Done! CH = 0, (gain= f, phase= 3)
IQCalibration Start!
IQCalibration Done! CH = 1, (gain= 3, phase=3a)
TX IQ Calibration Done!
RXIQ si=726, sq=733, riq=-4, bbpval 726, vga_idx 0
RXIQ si=4350, sq=4372, riq=-32, bbpval 4350, vga_idx 4
RXIQ si=6805, sq=6840, riq=-51, bbpval 6805, vga_idx 5
RXIQ si=11095, sq=11137, riq=-97, bbpval 11095, vga_idx 6
Sigma_i=1053, Sigma_q=1055, R_iq=-970
RXIQ Sigma_i=1053, Sigma_q=1055, R_iq=-970
RXIQ G_imb=0, Ph_rx=-2
RXIQ si=1625, sq=1664, riq=-11, bbpval 1625, vga_idx 0
RXIQ si=3540, sq=3618, riq=-18, bbpval 3540, vga_idx 2
RXIQ si=5573, sq=5710, riq=-21, bbpval 5573, vga_idx 3
RXIQ si=8635, sq=8844, riq=-52, bbpval 8635, vga_idx 4
RXIQ si=13256, sq=13530, riq=-117, bbpval 13256, vga_idx 5
Sigma_i=1151, Sigma_q=1163, R_iq=-1170
RXIQ Sigma_i=1151, Sigma_q=1163, R_iq=-1170
RXIQ G_imb=1, Ph_rx=-2
MCS Set = ff ff 00 00 01
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
RTMP_TimerListAdd: add timer obj c056ffb4!
The 4-BSSID mode is enabled, the BSSID byte5 MUST be the multiple of 4
@@@ ed_monitor_init : ===>
@@@ ed_monitor_init : <===
Main bssid = 54:b8:0a:7d:19:a6
<==== rt28xx_init, Status=0
0x1300 = 00064320
@@@ ed_monitor_init : ===>
@@@ ed_monitor_init : <===
device ra0 entered promiscuous mode
br0: port 2(ra0) entering forwarding state
br0: port 2(ra0) entering forwarding state
The 4-BSSID mode is enabled, the BSSID byte5 MUST be the multiple of 4
device apcli0 entered promiscuous mode
br0: port 3(apcli0) entering forwarding state
br0: port 3(apcli0) entering forwarding state
Interface doesn't accept private ioctl...
set (8BE2): Invalid argument
load fw spent 16ms
RX DESC a2fe8000 size = 2048
RX1 DESC a2fe9000 size = 2048
cfg_mode=14
cfg_mode=14
cfg_mode=14
wmode_band_equal(): Band Not Equal!
start ch = 36, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 38, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 40, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 42, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 44, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 46, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 48, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 52, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 54, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 56, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 58, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 60, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 62, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 64, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 100, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 102, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 104, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 106, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 108, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 110, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 112, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 116, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 118, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 120, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 122, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 124, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 126, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 128, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 132, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 134, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 136, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 140, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 149, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 151, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 153, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 155, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 157, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 159, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 161, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 165, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 169, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
start ch = 173, ch->num = 1
0 0 0 0 
38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
38 38 38 38 36 36 32 32 38 38 38 38 36 36 32 32 
32 32 32 32 32 32 32 32 26 26 
1. Phy Mode = 49
2. Phy Mode = 49
ext_pa_current_setting = 1
3. Phy Mode = 49
AntCfgInit: primary/secondary ant 0/1
ChipStructAssign(): RALINK6590 hook !
MCS Set = ff 00 00 00 01
MT76x0_ChipBBPAdjust():rf_bw=2, ext_ch=1, PrimCh=36, HT-CentCh=38, VHT-CentCh=42
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
APStartUp(): AP Set CentralFreq at 42(Prim=36, HT-CentCh=38, VHT-CentCh=42, BBP_BW=2)
Main bssid = 54:b8:0a:7d:19:a8
<==== rt28xx_init, Status=0
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
RT6352_TemperatureCalibration:: CurrentTemper < 20 
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
MT76x0_ChipBBPAdjust():rf_bw=2, ext_ch=1, PrimCh=44, HT-CentCh=46, VHT-CentCh=42
MT76x0_ChipSwitchChannel: DefaultTargetPwr = 30
APStartUp(): AP Set CentralFreq at 42(Prim=44, HT-CentCh=46, VHT-CentCh=42, BBP_BW=2)
0x1300 = 00064380
RTMPDrvOpen(1):Check if PDMA is idle!
RTMPDrvOpen(2):Check if PDMA is idle!
device rai0 entered promiscuous mode
br0: port 4(rai0) entering forwarding state
br0: port 4(rai0) entering forwarding state
device apclii0 entered promiscuous mode
br0: port 5(apclii0) entering forwarding state
br0: port 5(apclii0) entering forwarding state
Interface doesn't accept private ioctl...
set (8BE2): Invalid argument
killall: udhcpc: no process killed
SIOCSIFFLAGS: Cannot assign requested address
rm: cannot remove `/var/tmp/previous_dn': No such file or directory
rm: cannot remove `/var/tmp/previous_dns': No such file or directory
rm: cannot remove `/var/tmp/m_flag': No such file or directory
rm: cannot remove `/var/tmp/o_flag': No such file or directory
RTNETLINK answers: No such file or directory
cat: /var/etc/resolv.conf: No such file or directory
sh: cannot create /proc/sys/net/ipv6/conf/br0/disable_ipv6: Directory nonexistent
Start IPv6 dhclient
Sat Jan  1 00:00:00 UTC 2011
rdnssd is already active !
RT6352_TemperatureCalibration:: CurrentTemper < 20 
Start IPv6 dhclient
DHCP server start.
device_lan_ip=192.168.0.50 , device_lan_subnet_mask=255.255.255.0
max_leases value (254) not sane, setting to 20 instead
Unable to open /var/misc/udhcpd.leases for reading
llmnr: have no available linklocal address. wait count=0
/tmp/password has been created
2011-01-01 00:00:00: (network.c.247) warning: please use server.use-ipv6 only for hostnames, not without server.bind / empty address; your config will break if the kernel default for IPV6_V6ONLY changes 
Failed to kill daemon: No such file or directory
Daemon already running on PID 315
RT6352_TemperatureCalibration:: CurrentTemper < 20 
RT6352_TemperatureCalibration:: CurrentTemper < 20 
RT6352_TemperatureCalibration:: CurrentTemper < 20 

PCB front:
http://i.imgur.com/SAKbRAP.jpg

PCB rear:
http://i.imgur.com/WV3lVDl.jpg

The main CPU is below this heat spreader, but it's quite firmly glued to the chip below. I didn't remove it as I was concerned I would damage the SoC in the process of removing it. I have not investigated the test points below the main CPU yet.

Here is a dump of the original firmware from my unconfigured device, taken with a Teensy and a chip clip: http://watchmysys.com/blog/wp-content/u … ap1520.bin

md5sum: ca6713413f28775e43812accc84bbc2c
sha1sum: aa0c45c821eda69044af15855a4aec227dedd7ee
sha256sum: aef92658313562a8dc53f134e6dff40d654b7a70239f2d47aa05847af1b18fad


Does anyone else have interest in seeing OpenWrt ported to this device?

(Last edited by hmartin on 5 Mar 2016, 14:06)

Why? With only radio connectivity this device can only relay packets. Replacing a bespoke OS with a multi-function OS would serve no purpose (and hinder packet transfer).

EDIT: hyperlink added for clarification

Max Hopper wrote:

With only radio connectivity this device can only relay packets.

Actually no. Since it has some flash, and RAM, you could easily run uhttpd on it to serve some static content if you wanted.

It can also be used as part of a mesh network.

Max Hopper wrote:

Replacing a bespoke OS with a multi-function OS would serve no purpose (and hinder packet transfer).

Yes, except it's not a bespoke OS, it's regular Linux/busybox. As you can see from the uboot log, it's running 2.6.36.

D-Link aren't exactly known for their high quality, bug free firmwares. I see no reason why, if we can get a recent version of OpenWrt running on the device, it wouldn't also perform as well as it did running the D-Link firmware.

Please provide some actual evidence as to why putting OpenWrt on this device wouldn't make it more useful than the D-Link firmware. Thus far all you've provided is an overly negative opinion.

(Last edited by hmartin on 5 Mar 2016, 12:56)

hmartin wrote:

...could easily run uhttpd on it to serve some static content...

Where would the static content reside when power is removed?

Yes, a bespoke OS.  One where unnecessary components have been removed, e.g., PPPoE, netfilter and ntpd.

Max Hopper wrote:

Where would the static content reside when power is removed?

The same place where overlayfs resides. How do you think your normal OpenWrt router retains its configuration between reboots?

Yes, all those configuration files in /etc, those are also "static content" which don't magically disappear when the device is rebooted. Last I checked, you don't have to reflash the entire router to change configuration files in /etc...

Max Hopper wrote:

Yes, a bespoke OS.  One where unnecessary components have been removed, e.g., PPPoE, netfilter and ntpd.

I can run OpenWrt without PPPoE and ntpd if I want. Since netfilter is actually part of the Linux kernel, it exists on the D-Link firmware as well.

By your definition above, OpenWrt qualifies as a "bespoke" OS, since you can choose how minimal you want to make the installation.

Please keep trolling though, this is amusing.

Indeed, OOTB OpenWrt is written to the MTD. In the device under discussion it is 8MB of storage. Building a .bin which includes a reasonably robust webserver, approaches that size. And considering the effort to create .ipks of content, which is arguably not truly static, hardly seems worthwhile, now does it?

Yes, netfilter is integral and simply put, a callback framework.  The vendor OS would not require the implementation, iptables, and probably it is not present. Now, a static webserver would also not require an implementation unless it were to procure it's content from a remote source.

That said, the suggestion to deploy the device as a mesh node is worth consideration, which I initially dismissed.  It will however require iptables.

EDIT: corrected typo (thanks to tmo26)

Max Hopper wrote:

In the device under discussion it is 8Mb of storage.

Look here to recognize your error.

Max Hopper wrote:

In the device under discussion it is 8MB of storage.

What is your point? Most devices running OpenWrt have 8MB of flash. I have a bunch of WT3020 devices deployed running Strongswan IPSec, in 8MB, with about 1MB to spare.

Max Hopper wrote:

Building a .bin which includes a reasonably robust webserver, approaches that size.

For static content, the standard uhttpd daemon works fine.

Max Hopper wrote:

And considering the effort to create .ipks of content, which is arguably not truly static, hardly seems worthwhile, now does it?

Actually if you already have the OpenWrt toolchain built, it's quite easy to create an opkg with whatever content you want in it.

Max Hopper wrote:

That said, the suggestion to deploy the device as a mesh node is worth consideration, which I initially dismissed.

Glad to hear we've finally identified a potential use case worthy of your consideration.

How about you just sit back and enjoy the show?
http://vignette2.wikia.nocookie.net/muppet/images/3/3d/TMS-Statler%26Waldorf-BalconyBox.jpg/revision/latest?cb=20110325180958
It's quite clear you have nothing useful to contribute here.

I am on the edge of my seat awaiting your box office receipts 'flash report'.

Ticket Counter : 0

Max Hopper wrote:

Combatting ignorance since 2015.

Combatting ignorance ... with more ignorance? Interesting concept.

I for one am looking forward to hmartin's exploits. OpenWrt shines when it's run on low-cost, niche hardware, I can think of several use cases even for a severly limited device as this one. Also, even if it's "just" replicating the original firmware's usecase, I'll take OpenWrt over the original firmware any day of the week (and throw in an unsuspicious OpenVPN server in the middle ^_^ ).

Well, I got sucked down the rabbit hole yesterday in investigating this device. I didn't make any progress toward porting OpenWrt to the device because I was dealing with D-Link's terrible GPL source code.

I now know why these devices are typically terrible. What else can you expect when the manufacturer's build instructions begin with "Install Ubuntu 10.04 i386", the build environment is "AthSDK" and the makefiles delete a bunch of Atheros files before creating the flashable firmware image?

I mean, the device doesn't even have Atheros chips in it, unless I'm missing something fundamental about MediaTek's corporate history?

Oh, and ALL the makefiles are hard coded to expect the toolchain to be in /opt/buildroot-gcc342 and the source code in /home/AthSDK. I tried to change them, but in the end I just gave up and created some symlinks to those places.

Since my security-fu is lacking, I wasn't able to use any of the HNAP vulnerabilities to start telnetd. I was, however, able to build the D-Link firmware from GPL sources with a telnet daemon (it isn't compiled into busybox on this device by default, probably for space reasons).

Except, even with telnetd running, I couldn't login to the device. In /etc/shadow there is only one user with a password hash (Admin) and if you Google it, there are a lot of people musing over the unusual length of the hashed password with no results.

The web interface login didn't work either.

Never one to give up hope, I recompiled the D-Link firmware to include nc, which listens on port 8023 and just dumps you to /bin/sh as root. Secure? Absolutely not, but sometimes the quickest way in through the front door is to replace the lock with one you control (insert joke about IoT lock here).

You can't even change the password for root because passwd isn't included in busybox. I guess D-Link never saw the use case for a user to change the root password! big_smile

I'm going to continue to try and put OpenWrt on this device, but in the mean time, if anyone else has one and wants to poke around the D-Link OS, you can find my totally insecure, backdoored firmware here: http://watchmysys.com/blog/wp-content/u … 106B04.bin

Note: the backdoor only includes telnetd (port 23) and nc (port 8023). I haven't backdoored the firmware in any other ways.

(Last edited by hmartin on 6 Mar 2016, 20:03)

To date, what are the ticket receipts?

So, the board runs Barrier Breaker without any modifications. Just download the MT7620A development board image and flash from u-boot. https://downloads.openwrt.org/barrier_b … pgrade.bin

Chaos Calmer and Designated Driver kernel panic on boot due to a bug in pinctrl. The fix described here is enough to get the board to boot DD trunk: https://dev.openwrt.org/ticket/19213

Only 2.4GHz radio is working right now, I'm looking into the drivers to also support 5GHz.

D-Link u-boot is built with dual image support, so we need to replace it with u-boot with single image support.

u-boot: http://watchmysys.com/blog/wp-content/u … ap1520.bin
openwrt DD trunk: http://watchmysys.com/blog/wp-content/u … pgrade.bin

I have no procedure to update the router from the included D-Link firmware. However, you can flash u-boot and the OpenWrt firmware from the u-boot environment by uploading the firmware via serial. Since u-boot is configured for 57600, you'll wait about 15 minutes to upload the above sysupgrade image. Flashing via SPI programmer is much faster, but I realize the number of people who have an SPI flasher is probably a lot less than people with USB<->UART adapters.

Generic u-boot flashing instructions which also apply to this board: https://wiki.openwrt.org/doc/howto/gene … ing.serial

More info to follow soon.

Here's the full boot log of the board running the new u-boot and OpenWrt DD:

U-Boot 1.1.3 (Jun  5 2016 - 16:42:46)

Board: Ralink APSoC DRAM:  64 MB
relocate_code Pointer at: 83fb4000
enable ephy clock...done. rf reg 29 = 5
SSC disabled.
******************************
Software System Reset Occurred
******************************
spi device id: c2 20 17 c2 20 (2017c220)
find flash: MX25L6405D
raspi_read: from:30000 len:1000 
*** Warning - bad CRC, using default environment

============================================ 
Ralink UBoot Version: 4.1.2.0
-------------------------------------------- 
ASIC 7620_MP (Port5<->None)
DRAM component: 512 Mbits DDR, width 16
DRAM bus: 16 bit
Total memory: 64 MBytes
Flash component: SPI Flash
Date:Jun  5 2016  Time:16:42:46
============================================ 
icache: sets:512, ways:4, linesz:32 ,total:65536
dcache: sets:256, ways:4, linesz:32 ,total:32768 

 ##### The CPU freq = 580 MHZ #### 
 estimate memory size =64 Mbytes

Please choose the operation: 
   1: Load system code to SDRAM via TFTP. 
   2: Load system code then write to Flash via TFTP. 
   3: Boot system code via Flash (default).
   4: Entr boot command line interface.
   7: Load Boot Loader code then write to Flash via Serial. 
   9: Load Boot Loader code then write to Flash via TFTP.                                                  0 
   
3: System Boot system code via Flash.
## Booting image at bc050000 ...
raspi_read: from:50000 len:40 
   Image Name:   MIPS OpenWrt Linux-4.4.7
   Image Type:   MIPS Linux Kernel Image (lzma compressed)
   Data Size:    1266885 Bytes =  1.2 MB
   Load Address: 80000000
   Entry Point:  80000000
raspi_read: from:50040 len:1354c5 
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
No initrd
## Transferring control to Linux (at address 80000000) ...
## Giving linux memsize in MB, 64

Starting kernel ...

[    0.000000] Linux version 4.4.7 (hmartin@hanau) (gcc version 5.3.0 (OpenWrt GCC 5.3.0 r49377) ) #4 Sun Jun 12 19:49:56 UTC 2016
[    0.000000] Board has DDR2
[    0.000000] Analog PMU set to hw control
[    0.000000] Digital PMU set to hw control
[    0.000000] SoC Type: MediaTek MT7620A ver:2 eco:6
[    0.000000] bootconsole [early0] enabled
[    0.000000] CPU0 revision is: 00019650 (MIPS 24KEc)
[    0.000000] MIPS: machine is Ralink MT7620a + MT7610e evaluation board
[    0.000000] Determined physical RAM map:
[    0.000000]  memory: 04000000 @ 00000000 (usable)
[    0.000000] Initrd not found or empty - disabling initrd
[    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] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
[    0.000000] Primary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
[    0.000000] Kernel command line: console=ttyS0,57600 rootfstype=squashfs,jffs2
[    0.000000] PID hash table entries: 256 (order: -2, 1024 bytes)
[    0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Writing ErrCtl register=0007eff0
[    0.000000] Readback ErrCtl register=0007eff0
[    0.000000] Memory: 60840K/65536K available (2850K kernel code, 134K rwdata, 692K rodata, 156K init, 195K bss, 4696K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS:256
[    0.000000] CPU Clock: 580MHz
[    0.000000] clocksource: systick: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 583261500 ns
[    0.000000] systick: enable autosleep mode
[    0.000000] systick: running - mult: 214748, shift: 32
[    0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 6590553264 ns
[    0.000011] sched_clock: 32 bits at 290MHz, resolution 3ns, wraps every 7405115902ns
[    0.015448] Calibrating delay loop... 385.84 BogoMIPS (lpj=1929216)
[    0.080600] pid_max: default: 32768 minimum: 301
[    0.089917] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.102932] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.122922] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.142525] pinctrl core: initialized pinctrl subsystem
[    0.153506] NET: Registered protocol family 16
[    0.165012] ---->create_pinctrl:pinctrl
[    0.173806] ---->create_pinctrl:pinctrl
[    0.187596] ---->create_pinctrl:10140000.pcie
[    0.448979] PCI host bridge /pcie@10140000 ranges:
[    0.458366]  MEM 0x0000000020000000..0x000000002fffffff
[    0.468739]   IO 0x0000000010160000..0x000000001016ffff
[    0.486960] ---->create_pinctrl:10000600.gpio
[    0.495587] rt2880_gpio 10000600.gpio: registering 24 gpios
[    0.506601] rt2880_gpio 10000600.gpio: registering 24 irq handlers
[    0.519693] PCI host bridge to bus 0000:00
[    0.527692] pci_bus 0000:00: root bus resource [mem 0x20000000-0x2fffffff]
[    0.541397] pci_bus 0000:00: root bus resource [io  0xffffffff]
[    0.553137] pci_bus 0000:00: root bus resource [??? 0x00000000 flags 0x0]
[    0.566636] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
[    0.584022] pci 0000:00:00.0: BAR 0: no space for [mem size 0x80000000]
[    0.597073] pci 0000:00:00.0: BAR 0: failed to assign [mem size 0x80000000]
[    0.610886] pci 0000:00:00.0: BAR 8: assigned [mem 0x20000000-0x201fffff]
[    0.624388] pci 0000:00:00.0: BAR 1: assigned [mem 0x20200000-0x2020ffff]
[    0.637898] pci 0000:01:00.0: BAR 0: assigned [mem 0x20000000-0x200fffff]
[    0.651392] pci 0000:01:00.1: BAR 0: assigned [mem 0x20100000-0x201fffff]
[    0.664888] pci 0000:00:00.0: PCI bridge to [bus 01]
[    0.674740] pci 0000:00:00.0:   bridge window [mem 0x20000000-0x201fffff]
[    0.688266] pci 0000:00:00.0: card - bus=0x0, slot = 0x0 irq=0
[    0.699851] pci 0000:01:00.0: card - bus=0x1, slot = 0x0 irq=4
[    0.711455] pci 0000:01:00.1: card - bus=0x1, slot = 0x0 irq=4
[    0.724032] clocksource: Switched to clocksource systick
[    0.735939] NET: Registered protocol family 2
[    0.745408] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
[    0.759180] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
[    0.771777] TCP: Hash tables configured (established 1024 bind 1024)
[    0.784496] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    0.796027] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    0.808731] NET: Registered protocol family 1
[    0.817783] ---->create_pinctrl:10000100.timer
[    0.826608] rt-timer 10000100.timer: maximum frequency is 1220Hz
[    0.839112] ---->create_pinctrl:alarmtimer
[    0.847441] futex hash table entries: 256 (order: -1, 3072 bytes)
[    0.877571] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.889086] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[    0.911096] io scheduler noop registered
[    0.918810] io scheduler deadline registered (default)
[    0.929157] ---->create_pinctrl:usbphy
[    0.936519] ralink-usb-phy usbphy: invalid resource
[    0.946857] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
[    0.959946] ---->create_pinctrl:serial8250
[    0.968303] ---->create_pinctrl:10000c00.uartlite
[    0.977915] console [ttyS0] disabled
[    0.984941] 10000c00.uartlite: ttyS0 at MMIO 0x10000c00 (irq = 20, base_baud = 2500000) is a Palmchip BK-3103
[    1.004629] console [ttyS0] enabled
[    1.004629] console [ttyS0] enabled
[    1.018448] bootconsole [early0] disabled
[    1.018448] bootconsole [early0] disabled
[    1.035793] ---->create_pinctrl:10000b00.spi
[    1.047486] spi spi0.0: force spi mode3
[    1.055570] ---->create_pinctrl:spi0.0
[    1.063178] m25p80 spi0.0: mx25l6405d (8192 Kbytes)
[    1.072961] 4 ofpart partitions found on MTD device spi0.0
[    1.083895] Creating 4 MTD partitions on "spi0.0":
[    1.093448] 0x000000000000-0x000000030000 : "u-boot"
[    1.105123] 0x000000030000-0x000000040000 : "u-boot-env"
[    1.117533] 0x000000040000-0x000000050000 : "factory"
[    1.129423] 0x000000050000-0x000000800000 : "firmware"
[    1.182659] 2 uimage-fw partitions found on MTD device firmware
[    1.194494] 0x000000050000-0x000000185505 : "kernel"
[    1.205999] 0x000000185505-0x000000800000 : "rootfs"
[    1.217709] mtd: device 5 (rootfs) set to be root filesystem
[    1.229188] 1 squashfs-split partitions found on MTD device rootfs
[    1.241521] 0x000000350000-0x000000800000 : "rootfs_data"
[    1.254818] ---->create_pinctrl:10110000.gsw
[    1.263562] ---->create_pinctrl:10100000.ethernet
[    1.276323] mtk_soc_eth 10100000.ethernet: generated random MAC address 5e:b9:64:b6:ac:4d
[    1.292835] libphy: mdio: probed
[    1.300713] mtk_soc_eth 10100000.ethernet: connected port 4 to PHY at mdio-bus:04 [uid=03a2940d, driver=Generic PHY]
[    1.321990] mtk_soc_eth 10100000.ethernet: connected port 5 to PHY at mdio-bus:05 [uid=0000ffff, driver=Generic PHY]
[    1.343051] mtk_soc_eth 10100000.ethernet: loaded mt7620 driver
[    1.355616] mtk_soc_eth 10100000.ethernet eth0: mediatek frame engine at 0xb0100000, irq 5
[    1.372323] ---->create_pinctrl:10000120.watchdog
[    1.382095] rt2880_wdt 10000120.watchdog: Initialized
[    1.393711] NET: Registered protocol family 10
[    1.406343] NET: Registered protocol family 17
[    1.415364] bridge: automatic filtering via arp/ip/ip6tables has been deprecated. Update your scripts to load br_netfilter if you need this.
[    1.440526] 8021q: 802.1Q VLAN Support v1.8
[    1.464640] VFS: Mounted root (squashfs filesystem) readonly on device 31:5.
[    1.479562] Freeing unused kernel memory: 156K (80399000 - 803c0000)
[    3.572990] init: Console is alive
[    3.580109] init: - watchdog -
[    5.138730] usbcore: registered new interface driver usbfs
[    5.149824] usbcore: registered new interface driver hub
[    5.160532] usbcore: registered new device driver usb
[    5.173101] ---->create_pinctrl:gpio-keys-polled
[    5.186172] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    5.200683] ehci-platform: EHCI generic platform driver
[    5.211320] ---->create_pinctrl:101c0000.ehci
[    5.230149] phy phy-usbphy.0: remote usb device wakeup disabled
[    5.241954] phy phy-usbphy.0: UTMI 16bit 30MHz
[    5.250838] ehci-platform 101c0000.ehci: EHCI Host Controller
[    5.262333] ehci-platform 101c0000.ehci: new USB bus registered, assigned bus number 1
[    5.278245] ehci-platform 101c0000.ehci: irq 26, io mem 0x101c0000
[    5.295334] ehci-platform 101c0000.ehci: USB 2.0 started, EHCI 1.00
[    5.308463] ---->create_pinctrl:usb1
[    5.316212] ---->create_pinctrl:1-0:1.0
[    5.323938] hub 1-0:1.0: USB hub found
[    5.331771] hub 1-0:1.0: 1 port detected
[    5.342699] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    5.356508] ohci-platform: OHCI generic platform driver
[    5.367107] ---->create_pinctrl:101c1000.ohci
[    5.375946] ohci-platform 101c1000.ohci: Generic Platform OHCI controller
[    5.389531] ohci-platform 101c1000.ohci: new USB bus registered, assigned bus number 2
[    5.405428] ohci-platform 101c1000.ohci: irq 26, io mem 0x101c1000
[    5.441980] ---->create_pinctrl:usb2
[    5.449749] ---->create_pinctrl:2-0:1.0
[    5.457515] hub 2-0:1.0: USB hub found
[    5.465298] hub 2-0:1.0: 1 port detected
[    5.479381] init: - preinit -
[    6.295325] 8021q: adding VLAN 0 to HW filter on device eth0
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
[    6.941917] mtk_soc_eth 10100000.ethernet eth0: port 5 link up (10Mbps/Half duplex)
[    6.957427] mtk_soc_eth 10100000.ethernet eth0: port 4 link up (10Mbps/Half duplex)
[    7.315217] jffs2_scan_eraseblock(): End of filesystem marker found at 0x10000
[    7.329671] jffs2_build_filesystem(): unlocking the mtd device... done.
[    7.342857] jffs2_build_filesystem(): erasing all blocks after the end marker... done.
[   41.078762] jffs2: notice: (332) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.
[   41.111730] mount_root: overlay filesystem has not been fully initialized yet
[   41.138517] mount_root: switching to jffs2 overlay
- config restore -
[   41.455945] procd: - early -
[   41.461779] procd: - watchdog -
[   41.733917] mtk_soc_eth 10100000.ethernet eth0: port 5 link down
[   41.754004] mtk_soc_eth 10100000.ethernet eth0: port 4 link down
[   41.917765] procd: - ubus -
[   41.945546] random: ubusd urandom read with 69 bits of entropy available
[   41.960669] procd: - init -
Please press Enter to activate this console.
[   42.552634] ip6_tables: (C) 2000-2006 Netfilter Core Team
[   42.578214] Loading modules backported from Linux version v4.4-rc5-1913-gc8fdf68
[   42.593023] Backport generated by backports.git backports-20151218-0-g2f58d9d
[   42.611468] ip_tables: (C) 2000-2006 Netfilter Core Team
[   42.632878] nf_conntrack version 0.5.0 (953 buckets, 3812 max)
[   42.685476] xt_time: kernel timezone is -0000
[   42.755084] PPP generic driver version 2.4.2
[   42.766610] NET: Registered protocol family 24
[   42.808188] ---->create_pinctrl:10180000.wmac
[   42.817156] rt2800_wmac 10180000.wmac: failed to load eeprom property
[   42.830037] ieee80211 phy0: rt2x00lib_request_eeprom_file: Info - Loading EEPROM data from 'soc_wmac.eeprom'.
[   42.849983] rt2800_wmac 10180000.wmac: Direct firmware load for soc_wmac.eeprom failed with error -2
[   42.868214] rt2800_wmac 10180000.wmac: Falling back to user helper
[   42.918035] firmware soc_wmac.eeprom: firmware_loading_store: map pages failed
[   42.933546] ieee80211 phy0: rt2x00lib_request_eeprom_file: Error - Failed to request EEPROM.
[   42.950473] rt2800_wmac: probe of 10180000.wmac failed with error -11
[   50.030234] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   50.041939] 8021q: adding VLAN 0 to HW filter on device eth0
[   50.080095] device eth0.1 entered promiscuous mode
[   50.089723] device eth0 entered promiscuous mode
[   50.141477] IPv6: ADDRCONF(NETDEV_UP): br-lan: link is not ready
[   50.208309] IPv6: ADDRCONF(NETDEV_UP): eth0.2: link is not ready
[   50.800736] mtk_soc_eth 10100000.ethernet eth0: port 4 link up (10Mbps/Half duplex)
[   50.816299] mtk_soc_eth 10100000.ethernet eth0: port 5 link up (10Mbps/Half duplex)

You need to get the eeprom from mtd2:

# cd /lib/firmware
# dd if=/dev/mtd2 of=soc_wmac.eeprom bs=512 count=1
# reboot

Then you can enable WiFi using uci:

# uci set wireless.@wifi-device[0].disabled=0; uci commit wireless; wifi

And then join OpenWrt WiFi network and go to 192.168.1.1 to visit luci.

(Last edited by hmartin on 13 Jun 2016, 06:11)

Hi Hmartin,

I read your post with interest and would LOVE to have OpenWRT on the DAP1520. My use case - Wireless NAT gateway with DHCP on the private side for use in hotel rooms. The default code from D-Link is truly a repeater, with all traffic passed L2 transparent from the repeated to the parent LAN segment (and vice versa). I would like the DAP to register its self via DHCP with the hotel room wifi, and then offer private DHCP addresses on the NATed side to my other devices. Usually Hotel wifi will only offer 1 address per login, and that address will be secured from all others on the WIFI subnet (host to host firewalling).
Why? Because now I can take my home WIFI config with me (secured with WPK2-PSK) and get my family on line without having to change ANY other wifi settings (other than me logging in). And when you have 3 kids wife with 2 devices each, managing that stuff becomes a PITA.

So - if you can get this to work - cool :-)

Tobes

I should have realized this sooner, but there is no support in OpenWrt for the MT7610E.

There's the possibility that it will be supported in the future, but this depends on the success of reverse engineering:
https://dev.openwrt.org/ticket/21483

It seems that someone has the mt7610e kmod source code on GitHub:
https://github.com/i80s/mtk-sources

Another person wrote how to compile the module source code against 3.14.18, but these instructions are from 2014 and are now out of date:
http://www.cnblogs.com/jzyuchen/p/4094752.html

Unless support for MT7610E is added to OpenWrt through another driver, then I don't see any point to support this device. Since only the 2.4GHz radio is working, OpenWrt has less functionality than the D-Link firmware. While it was a fun project to put OpenWrt on the router, without support for 2.4GHz and 5GHz, I don't want to continue.

https://i298.photobucket.com/albums/mm242/Yggdrasill17/StarTrekTheOriginalSeriesHesDeadJim.gif

The discussion might have continued from here.