diff --git a/boards/arduino-duemilanove/Makefile.include b/boards/arduino-duemilanove/Makefile.include
index e2fce678d4acb92cc50e6b85986b15be2c4933b8..dd282db94f1b055df22ae7907d1d30e5eeec0c79 100644
--- a/boards/arduino-duemilanove/Makefile.include
+++ b/boards/arduino-duemilanove/Makefile.include
@@ -14,4 +14,7 @@ export FFLAGS += -p m328p
 # overridden for debugging (which requires changes that require to use an ISP)
 export PROGRAMMER ?= arduino
 
+BOOTLOADER_SIZE ?= 2K
+ROM_RESERVED ?= $(BOOTLOADER_SIZE)
+
 include $(RIOTBOARD)/common/arduino-atmega/Makefile.include
diff --git a/boards/arduino-mega2560/Makefile.include b/boards/arduino-mega2560/Makefile.include
index 074a9e28870cd9c95753c2a57b09127b6f082149..3a7a4aafd8c41d13c891d380db0b1d7c249f7267 100644
--- a/boards/arduino-mega2560/Makefile.include
+++ b/boards/arduino-mega2560/Makefile.include
@@ -14,4 +14,7 @@ export FFLAGS += -p m2560
 # overridden for debugging (which requires changes that require to use an ISP)
 export PROGRAMMER ?= stk500v2
 
+BOOTLOADER_SIZE ?= 8K
+ROM_RESERVED ?= $(BOOTLOADER_SIZE)
+
 include $(RIOTBOARD)/common/arduino-atmega/Makefile.include
diff --git a/boards/arduino-uno/Makefile.include b/boards/arduino-uno/Makefile.include
index c05afa46e82916574920008122f4265c3624a900..049373784ced1c7d541eff1d18d4547953fb387b 100644
--- a/boards/arduino-uno/Makefile.include
+++ b/boards/arduino-uno/Makefile.include
@@ -14,4 +14,7 @@ export FFLAGS += -p m328p
 # overridden for debugging (which requires changes that require to use an ISP)
 export PROGRAMMER ?= arduino
 
+BOOTLOADER_SIZE ?= 512
+ROM_RESERVED ?= $(BOOTLOADER_SIZE)
+
 include $(RIOTBOARD)/common/arduino-atmega/Makefile.include
diff --git a/boards/jiminy-mega256rfr2/Makefile.include b/boards/jiminy-mega256rfr2/Makefile.include
index a0fc16954e523050a69054afa7ccf101e7fc6dfb..e3def21be4daa4a90b4e37192ed9fb711640d1e4 100644
--- a/boards/jiminy-mega256rfr2/Makefile.include
+++ b/boards/jiminy-mega256rfr2/Makefile.include
@@ -21,4 +21,8 @@ export BAUD = 38400
 # overridden for debugging (which requires changes that require to use an ISP)
 export PROGRAMMER ?= wiring
 
+# From current fuse configuration
+BOOTLOADER_SIZE ?= 4K
+ROM_RESERVED ?= $(BOOTLOADER_SIZE)
+
 include $(RIOTBOARD)/common/arduino-atmega/Makefile.include
diff --git a/boards/mega-xplained/Makefile.include b/boards/mega-xplained/Makefile.include
index 63c2961f0f1cc685b6fb7619fa8ff785864e9b3d..9a8d7e5f4fc0b1631d62418f62475732d0357639 100644
--- a/boards/mega-xplained/Makefile.include
+++ b/boards/mega-xplained/Makefile.include
@@ -1,6 +1,11 @@
 # define the cpu used by the Mega Xplained board
 export CPU = atmega1284p
 
+# Found by checking fuse settings (2048 words so 4KB)
+# https://www.microchip.com/DevelopmentTools/ProductDetails/atmega1284p-xpld
+BOOTLOADER_SIZE ?= 4K
+ROM_RESERVED ?= $(BOOTLOADER_SIZE)
+
 # configure the terminal program
 export PORT_LINUX  ?= /dev/ttyACM0
 export PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbserial*)))
diff --git a/boards/waspmote-pro/Makefile.include b/boards/waspmote-pro/Makefile.include
index 2991c77adcc2f53ae2fe9e399d53c6a424a4e3e3..a2cd81ebc285aa6ccd329e515fb0a22e1f5e897b 100644
--- a/boards/waspmote-pro/Makefile.include
+++ b/boards/waspmote-pro/Makefile.include
@@ -1,6 +1,12 @@
 # define the cpu used by the waspmote pro board
 export CPU = atmega1281
 
+# Bootloader uses stk500v1 protocol, which usually is implemented in
+# bootloaders of 2K size.
+# http://www.libelium.com/products/waspmote/hardware/
+BOOTLOADER_SIZE ?= 2K
+ROM_RESERVED ?= $(BOOTLOADER_SIZE)
+
 # configure the terminal program
 PORT_LINUX  ?= /dev/ttyACM0
 PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbserial*)))
diff --git a/cpu/atmega1281/Makefile.include b/cpu/atmega1281/Makefile.include
index 6647a8d437943e6c87fad2c38182ba324f8afa9e..093660e72e8d608a6ad8147d97e6d8dfab044ed8 100644
--- a/cpu/atmega1281/Makefile.include
+++ b/cpu/atmega1281/Makefile.include
@@ -8,5 +8,8 @@ export ATMEGA_COMMON = $(RIOTCPU)/atmega_common/
 #   Without this the interrupt vectors will not be linked correctly!
 export UNDEF += $(BINDIR)/cpu/startup.o
 
+RAM_LEN = 8K
+ROM_LEN = 128K
+
 # CPU depends on the atmega common module, so include it
 include $(ATMEGA_COMMON)Makefile.include
diff --git a/cpu/atmega1281/ldscripts_compat/README.md b/cpu/atmega1281/ldscripts_compat/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1bc6babe5bef59b56a77aa10af47aec1572f70b3
--- /dev/null
+++ b/cpu/atmega1281/ldscripts_compat/README.md
@@ -0,0 +1,8 @@
+avr linkerscript
+================
+
+Starting from avr-binutils 2.26, the linker defines symbol that can be
+overriden to configure ROM and RAM length.
+
+This ldscript is used for supporting older versions on avr-binutils like on
+ubuntu xenial.
diff --git a/cpu/atmega1281/ldscripts_compat/avr_2.26.ld b/cpu/atmega1281/ldscripts_compat/avr_2.26.ld
new file mode 100644
index 0000000000000000000000000000000000000000..49266118f8ea1d7ef29c737651198c187cd3c7d8
--- /dev/null
+++ b/cpu/atmega1281/ldscripts_compat/avr_2.26.ld
@@ -0,0 +1,262 @@
+/* Script for -n: mix text and data on same page */
+/* Copyright (C) 2014-2015 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
+OUTPUT_ARCH(avr:51)
+__TEXT_REGION_LENGTH__ = DEFINED(__TEXT_REGION_LENGTH__) ? __TEXT_REGION_LENGTH__ : 128K;
+__DATA_REGION_LENGTH__ = DEFINED(__DATA_REGION_LENGTH__) ? __DATA_REGION_LENGTH__ : 0xff00;
+__EEPROM_REGION_LENGTH__ = DEFINED(__EEPROM_REGION_LENGTH__) ? __EEPROM_REGION_LENGTH__ : 64K;
+__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : 1K;
+__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : 1K;
+__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : 1K;
+__USER_SIGNATURE_REGION_LENGTH__ = DEFINED(__USER_SIGNATURE_REGION_LENGTH__) ? __USER_SIGNATURE_REGION_LENGTH__ : 1K;
+MEMORY
+{
+  text   (rx)   : ORIGIN = 0, LENGTH = __TEXT_REGION_LENGTH__
+  data   (rw!x) : ORIGIN = 0x800100, LENGTH = __DATA_REGION_LENGTH__
+  eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = __EEPROM_REGION_LENGTH__
+  fuse      (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__
+  lock      (rw!x) : ORIGIN = 0x830000, LENGTH = __LOCK_REGION_LENGTH__
+  signature (rw!x) : ORIGIN = 0x840000, LENGTH = __SIGNATURE_REGION_LENGTH__
+  user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = __USER_SIGNATURE_REGION_LENGTH__
+}
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  .hash          : { *(.hash)		}
+  .dynsym        : { *(.dynsym)		}
+  .dynstr        : { *(.dynstr)		}
+  .gnu.version   : { *(.gnu.version)	}
+  .gnu.version_d   : { *(.gnu.version_d)	}
+  .gnu.version_r   : { *(.gnu.version_r)	}
+  .rel.init      : { *(.rel.init)		}
+  .rela.init     : { *(.rela.init)	}
+  .rel.text      :
+    {
+      *(.rel.text)
+      *(.rel.text.*)
+      *(.rel.gnu.linkonce.t*)
+    }
+  .rela.text     :
+    {
+      *(.rela.text)
+      *(.rela.text.*)
+      *(.rela.gnu.linkonce.t*)
+    }
+  .rel.fini      : { *(.rel.fini)		}
+  .rela.fini     : { *(.rela.fini)	}
+  .rel.rodata    :
+    {
+      *(.rel.rodata)
+      *(.rel.rodata.*)
+      *(.rel.gnu.linkonce.r*)
+    }
+  .rela.rodata   :
+    {
+      *(.rela.rodata)
+      *(.rela.rodata.*)
+      *(.rela.gnu.linkonce.r*)
+    }
+  .rel.data      :
+    {
+      *(.rel.data)
+      *(.rel.data.*)
+      *(.rel.gnu.linkonce.d*)
+    }
+  .rela.data     :
+    {
+      *(.rela.data)
+      *(.rela.data.*)
+      *(.rela.gnu.linkonce.d*)
+    }
+  .rel.ctors     : { *(.rel.ctors)	}
+  .rela.ctors    : { *(.rela.ctors)	}
+  .rel.dtors     : { *(.rel.dtors)	}
+  .rela.dtors    : { *(.rela.dtors)	}
+  .rel.got       : { *(.rel.got)		}
+  .rela.got      : { *(.rela.got)		}
+  .rel.bss       : { *(.rel.bss)		}
+  .rela.bss      : { *(.rela.bss)		}
+  .rel.plt       : { *(.rel.plt)		}
+  .rela.plt      : { *(.rela.plt)		}
+  /* Internal text space or external memory.  */
+  .text   :
+  {
+    *(.vectors)
+    KEEP(*(.vectors))
+    /* For data that needs to reside in the lower 64k of progmem.  */
+     *(.progmem.gcc*)
+    /* PR 13812: Placing the trampolines here gives a better chance
+       that they will be in range of the code that uses them.  */
+    . = ALIGN(2);
+     __trampolines_start = . ;
+    /* The jump trampolines for the 16-bit limited relocs will reside here.  */
+    *(.trampolines)
+     *(.trampolines*)
+     __trampolines_end = . ;
+    /* avr-libc expects these data to reside in lower 64K. */
+     *libprintf_flt.a:*(.progmem.data)
+     *libc.a:*(.progmem.data)
+     *(.progmem*)
+    . = ALIGN(2);
+    /* For future tablejump instruction arrays for 3 byte pc devices.
+       We don't relax jump/call instructions within these sections.  */
+    *(.jumptables)
+     *(.jumptables*)
+    /* For code that needs to reside in the lower 128k progmem.  */
+    *(.lowtext)
+     *(.lowtext*)
+     __ctors_start = . ;
+     *(.ctors)
+     __ctors_end = . ;
+     __dtors_start = . ;
+     *(.dtors)
+     __dtors_end = . ;
+    KEEP(SORT(*)(.ctors))
+    KEEP(SORT(*)(.dtors))
+    /* From this point on, we don't bother about wether the insns are
+       below or above the 16 bits boundary.  */
+    *(.init0)  /* Start here after reset.  */
+    KEEP (*(.init0))
+    *(.init1)
+    KEEP (*(.init1))
+    *(.init2)  /* Clear __zero_reg__, set up stack pointer.  */
+    KEEP (*(.init2))
+    *(.init3)
+    KEEP (*(.init3))
+    *(.init4)  /* Initialize data and BSS.  */
+    KEEP (*(.init4))
+    *(.init5)
+    KEEP (*(.init5))
+    *(.init6)  /* C++ constructors.  */
+    KEEP (*(.init6))
+    *(.init7)
+    KEEP (*(.init7))
+    *(.init8)
+    KEEP (*(.init8))
+    *(.init9)  /* Call main().  */
+    KEEP (*(.init9))
+    *(.text)
+    . = ALIGN(2);
+     *(.text.*)
+    . = ALIGN(2);
+    *(.fini9)  /* _exit() starts here.  */
+    KEEP (*(.fini9))
+    *(.fini8)
+    KEEP (*(.fini8))
+    *(.fini7)
+    KEEP (*(.fini7))
+    *(.fini6)  /* C++ destructors.  */
+    KEEP (*(.fini6))
+    *(.fini5)
+    KEEP (*(.fini5))
+    *(.fini4)
+    KEEP (*(.fini4))
+    *(.fini3)
+    KEEP (*(.fini3))
+    *(.fini2)
+    KEEP (*(.fini2))
+    *(.fini1)
+    KEEP (*(.fini1))
+    *(.fini0)  /* Infinite loop after program termination.  */
+    KEEP (*(.fini0))
+     _etext = . ;
+  }  > text
+  .data          :
+  {
+     PROVIDE (__data_start = .) ;
+    *(.data)
+     *(.data*)
+    *(.rodata)  /* We need to include .rodata here if gcc is used */
+     *(.rodata*) /* with -fdata-sections.  */
+    *(.gnu.linkonce.d*)
+    . = ALIGN(2);
+     _edata = . ;
+     PROVIDE (__data_end = .) ;
+  }  > data AT> text
+  .bss  ADDR(.data) + SIZEOF (.data)   : AT (ADDR (.bss))
+  {
+     PROVIDE (__bss_start = .) ;
+    *(.bss)
+     *(.bss*)
+    *(COMMON)
+     PROVIDE (__bss_end = .) ;
+  }  > data
+   __data_load_start = LOADADDR(.data);
+   __data_load_end = __data_load_start + SIZEOF(.data);
+  /* Global data not cleared after reset.  */
+  .noinit  ADDR(.bss) + SIZEOF (.bss)  :  AT (ADDR (.noinit))
+  {
+     PROVIDE (__noinit_start = .) ;
+    *(.noinit*)
+     PROVIDE (__noinit_end = .) ;
+     _end = . ;
+     PROVIDE (__heap_start = .) ;
+  }  > data
+  .eeprom  :
+  {
+    /* See .data above...  */
+    KEEP(*(.eeprom*))
+     __eeprom_end = . ;
+  }  > eeprom
+  .fuse  :
+  {
+    KEEP(*(.fuse))
+    KEEP(*(.lfuse))
+    KEEP(*(.hfuse))
+    KEEP(*(.efuse))
+  }  > fuse
+  .lock  :
+  {
+    KEEP(*(.lock*))
+  }  > lock
+  .signature  :
+  {
+    KEEP(*(.signature*))
+  }  > signature
+  .user_signatures  :
+  {
+    KEEP(*(.user_signatures*))
+  }  > user_signatures
+  /* Stabs debugging sections.  */
+  .stab 0 : { *(.stab) }
+  .stabstr 0 : { *(.stabstr) }
+  .stab.excl 0 : { *(.stab.excl) }
+  .stab.exclstr 0 : { *(.stab.exclstr) }
+  .stab.index 0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment 0 : { *(.comment) }
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end ) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+}
diff --git a/cpu/atmega1284p/Makefile.include b/cpu/atmega1284p/Makefile.include
index b46d4e871c8f7be91fa4f2bae002050a124562cf..7575f04ff925015739cdab72185fe5e692497aa5 100644
--- a/cpu/atmega1284p/Makefile.include
+++ b/cpu/atmega1284p/Makefile.include
@@ -4,5 +4,8 @@ USEMODULE += atmega_common
 # define path to atmega common module, which is needed for this CPU
 export ATMEGA_COMMON = $(RIOTCPU)/atmega_common/
 
+RAM_LEN = 16K
+ROM_LEN = 128K
+
 # CPU depends on the atmega common module, so include it
 include $(ATMEGA_COMMON)Makefile.include
diff --git a/cpu/atmega1284p/ldscripts_compat/README.md b/cpu/atmega1284p/ldscripts_compat/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1bc6babe5bef59b56a77aa10af47aec1572f70b3
--- /dev/null
+++ b/cpu/atmega1284p/ldscripts_compat/README.md
@@ -0,0 +1,8 @@
+avr linkerscript
+================
+
+Starting from avr-binutils 2.26, the linker defines symbol that can be
+overriden to configure ROM and RAM length.
+
+This ldscript is used for supporting older versions on avr-binutils like on
+ubuntu xenial.
diff --git a/cpu/atmega1284p/ldscripts_compat/avr_2.26.ld b/cpu/atmega1284p/ldscripts_compat/avr_2.26.ld
new file mode 100644
index 0000000000000000000000000000000000000000..49266118f8ea1d7ef29c737651198c187cd3c7d8
--- /dev/null
+++ b/cpu/atmega1284p/ldscripts_compat/avr_2.26.ld
@@ -0,0 +1,262 @@
+/* Script for -n: mix text and data on same page */
+/* Copyright (C) 2014-2015 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
+OUTPUT_ARCH(avr:51)
+__TEXT_REGION_LENGTH__ = DEFINED(__TEXT_REGION_LENGTH__) ? __TEXT_REGION_LENGTH__ : 128K;
+__DATA_REGION_LENGTH__ = DEFINED(__DATA_REGION_LENGTH__) ? __DATA_REGION_LENGTH__ : 0xff00;
+__EEPROM_REGION_LENGTH__ = DEFINED(__EEPROM_REGION_LENGTH__) ? __EEPROM_REGION_LENGTH__ : 64K;
+__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : 1K;
+__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : 1K;
+__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : 1K;
+__USER_SIGNATURE_REGION_LENGTH__ = DEFINED(__USER_SIGNATURE_REGION_LENGTH__) ? __USER_SIGNATURE_REGION_LENGTH__ : 1K;
+MEMORY
+{
+  text   (rx)   : ORIGIN = 0, LENGTH = __TEXT_REGION_LENGTH__
+  data   (rw!x) : ORIGIN = 0x800100, LENGTH = __DATA_REGION_LENGTH__
+  eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = __EEPROM_REGION_LENGTH__
+  fuse      (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__
+  lock      (rw!x) : ORIGIN = 0x830000, LENGTH = __LOCK_REGION_LENGTH__
+  signature (rw!x) : ORIGIN = 0x840000, LENGTH = __SIGNATURE_REGION_LENGTH__
+  user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = __USER_SIGNATURE_REGION_LENGTH__
+}
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  .hash          : { *(.hash)		}
+  .dynsym        : { *(.dynsym)		}
+  .dynstr        : { *(.dynstr)		}
+  .gnu.version   : { *(.gnu.version)	}
+  .gnu.version_d   : { *(.gnu.version_d)	}
+  .gnu.version_r   : { *(.gnu.version_r)	}
+  .rel.init      : { *(.rel.init)		}
+  .rela.init     : { *(.rela.init)	}
+  .rel.text      :
+    {
+      *(.rel.text)
+      *(.rel.text.*)
+      *(.rel.gnu.linkonce.t*)
+    }
+  .rela.text     :
+    {
+      *(.rela.text)
+      *(.rela.text.*)
+      *(.rela.gnu.linkonce.t*)
+    }
+  .rel.fini      : { *(.rel.fini)		}
+  .rela.fini     : { *(.rela.fini)	}
+  .rel.rodata    :
+    {
+      *(.rel.rodata)
+      *(.rel.rodata.*)
+      *(.rel.gnu.linkonce.r*)
+    }
+  .rela.rodata   :
+    {
+      *(.rela.rodata)
+      *(.rela.rodata.*)
+      *(.rela.gnu.linkonce.r*)
+    }
+  .rel.data      :
+    {
+      *(.rel.data)
+      *(.rel.data.*)
+      *(.rel.gnu.linkonce.d*)
+    }
+  .rela.data     :
+    {
+      *(.rela.data)
+      *(.rela.data.*)
+      *(.rela.gnu.linkonce.d*)
+    }
+  .rel.ctors     : { *(.rel.ctors)	}
+  .rela.ctors    : { *(.rela.ctors)	}
+  .rel.dtors     : { *(.rel.dtors)	}
+  .rela.dtors    : { *(.rela.dtors)	}
+  .rel.got       : { *(.rel.got)		}
+  .rela.got      : { *(.rela.got)		}
+  .rel.bss       : { *(.rel.bss)		}
+  .rela.bss      : { *(.rela.bss)		}
+  .rel.plt       : { *(.rel.plt)		}
+  .rela.plt      : { *(.rela.plt)		}
+  /* Internal text space or external memory.  */
+  .text   :
+  {
+    *(.vectors)
+    KEEP(*(.vectors))
+    /* For data that needs to reside in the lower 64k of progmem.  */
+     *(.progmem.gcc*)
+    /* PR 13812: Placing the trampolines here gives a better chance
+       that they will be in range of the code that uses them.  */
+    . = ALIGN(2);
+     __trampolines_start = . ;
+    /* The jump trampolines for the 16-bit limited relocs will reside here.  */
+    *(.trampolines)
+     *(.trampolines*)
+     __trampolines_end = . ;
+    /* avr-libc expects these data to reside in lower 64K. */
+     *libprintf_flt.a:*(.progmem.data)
+     *libc.a:*(.progmem.data)
+     *(.progmem*)
+    . = ALIGN(2);
+    /* For future tablejump instruction arrays for 3 byte pc devices.
+       We don't relax jump/call instructions within these sections.  */
+    *(.jumptables)
+     *(.jumptables*)
+    /* For code that needs to reside in the lower 128k progmem.  */
+    *(.lowtext)
+     *(.lowtext*)
+     __ctors_start = . ;
+     *(.ctors)
+     __ctors_end = . ;
+     __dtors_start = . ;
+     *(.dtors)
+     __dtors_end = . ;
+    KEEP(SORT(*)(.ctors))
+    KEEP(SORT(*)(.dtors))
+    /* From this point on, we don't bother about wether the insns are
+       below or above the 16 bits boundary.  */
+    *(.init0)  /* Start here after reset.  */
+    KEEP (*(.init0))
+    *(.init1)
+    KEEP (*(.init1))
+    *(.init2)  /* Clear __zero_reg__, set up stack pointer.  */
+    KEEP (*(.init2))
+    *(.init3)
+    KEEP (*(.init3))
+    *(.init4)  /* Initialize data and BSS.  */
+    KEEP (*(.init4))
+    *(.init5)
+    KEEP (*(.init5))
+    *(.init6)  /* C++ constructors.  */
+    KEEP (*(.init6))
+    *(.init7)
+    KEEP (*(.init7))
+    *(.init8)
+    KEEP (*(.init8))
+    *(.init9)  /* Call main().  */
+    KEEP (*(.init9))
+    *(.text)
+    . = ALIGN(2);
+     *(.text.*)
+    . = ALIGN(2);
+    *(.fini9)  /* _exit() starts here.  */
+    KEEP (*(.fini9))
+    *(.fini8)
+    KEEP (*(.fini8))
+    *(.fini7)
+    KEEP (*(.fini7))
+    *(.fini6)  /* C++ destructors.  */
+    KEEP (*(.fini6))
+    *(.fini5)
+    KEEP (*(.fini5))
+    *(.fini4)
+    KEEP (*(.fini4))
+    *(.fini3)
+    KEEP (*(.fini3))
+    *(.fini2)
+    KEEP (*(.fini2))
+    *(.fini1)
+    KEEP (*(.fini1))
+    *(.fini0)  /* Infinite loop after program termination.  */
+    KEEP (*(.fini0))
+     _etext = . ;
+  }  > text
+  .data          :
+  {
+     PROVIDE (__data_start = .) ;
+    *(.data)
+     *(.data*)
+    *(.rodata)  /* We need to include .rodata here if gcc is used */
+     *(.rodata*) /* with -fdata-sections.  */
+    *(.gnu.linkonce.d*)
+    . = ALIGN(2);
+     _edata = . ;
+     PROVIDE (__data_end = .) ;
+  }  > data AT> text
+  .bss  ADDR(.data) + SIZEOF (.data)   : AT (ADDR (.bss))
+  {
+     PROVIDE (__bss_start = .) ;
+    *(.bss)
+     *(.bss*)
+    *(COMMON)
+     PROVIDE (__bss_end = .) ;
+  }  > data
+   __data_load_start = LOADADDR(.data);
+   __data_load_end = __data_load_start + SIZEOF(.data);
+  /* Global data not cleared after reset.  */
+  .noinit  ADDR(.bss) + SIZEOF (.bss)  :  AT (ADDR (.noinit))
+  {
+     PROVIDE (__noinit_start = .) ;
+    *(.noinit*)
+     PROVIDE (__noinit_end = .) ;
+     _end = . ;
+     PROVIDE (__heap_start = .) ;
+  }  > data
+  .eeprom  :
+  {
+    /* See .data above...  */
+    KEEP(*(.eeprom*))
+     __eeprom_end = . ;
+  }  > eeprom
+  .fuse  :
+  {
+    KEEP(*(.fuse))
+    KEEP(*(.lfuse))
+    KEEP(*(.hfuse))
+    KEEP(*(.efuse))
+  }  > fuse
+  .lock  :
+  {
+    KEEP(*(.lock*))
+  }  > lock
+  .signature  :
+  {
+    KEEP(*(.signature*))
+  }  > signature
+  .user_signatures  :
+  {
+    KEEP(*(.user_signatures*))
+  }  > user_signatures
+  /* Stabs debugging sections.  */
+  .stab 0 : { *(.stab) }
+  .stabstr 0 : { *(.stabstr) }
+  .stab.excl 0 : { *(.stab.excl) }
+  .stab.exclstr 0 : { *(.stab.exclstr) }
+  .stab.index 0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment 0 : { *(.comment) }
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end ) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+}
diff --git a/cpu/atmega2560/Makefile.include b/cpu/atmega2560/Makefile.include
index 6647a8d437943e6c87fad2c38182ba324f8afa9e..18bfb9a45476f846fb8eab256f76c8d6f186fa17 100644
--- a/cpu/atmega2560/Makefile.include
+++ b/cpu/atmega2560/Makefile.include
@@ -8,5 +8,8 @@ export ATMEGA_COMMON = $(RIOTCPU)/atmega_common/
 #   Without this the interrupt vectors will not be linked correctly!
 export UNDEF += $(BINDIR)/cpu/startup.o
 
+RAM_LEN = 8K
+ROM_LEN = 256K
+
 # CPU depends on the atmega common module, so include it
 include $(ATMEGA_COMMON)Makefile.include
diff --git a/cpu/atmega2560/ldscripts_compat/README.md b/cpu/atmega2560/ldscripts_compat/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1bc6babe5bef59b56a77aa10af47aec1572f70b3
--- /dev/null
+++ b/cpu/atmega2560/ldscripts_compat/README.md
@@ -0,0 +1,8 @@
+avr linkerscript
+================
+
+Starting from avr-binutils 2.26, the linker defines symbol that can be
+overriden to configure ROM and RAM length.
+
+This ldscript is used for supporting older versions on avr-binutils like on
+ubuntu xenial.
diff --git a/cpu/atmega2560/ldscripts_compat/avr_2.26.ld b/cpu/atmega2560/ldscripts_compat/avr_2.26.ld
new file mode 100644
index 0000000000000000000000000000000000000000..122be59261c4317d7d36f8f6e8a7105ed4739053
--- /dev/null
+++ b/cpu/atmega2560/ldscripts_compat/avr_2.26.ld
@@ -0,0 +1,262 @@
+/* Script for -n: mix text and data on same page */
+/* Copyright (C) 2014-2015 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
+OUTPUT_ARCH(avr:6)
+__TEXT_REGION_LENGTH__ = DEFINED(__TEXT_REGION_LENGTH__) ? __TEXT_REGION_LENGTH__ : 1024K;
+__DATA_REGION_LENGTH__ = DEFINED(__DATA_REGION_LENGTH__) ? __DATA_REGION_LENGTH__ : 0xfe00;
+__EEPROM_REGION_LENGTH__ = DEFINED(__EEPROM_REGION_LENGTH__) ? __EEPROM_REGION_LENGTH__ : 64K;
+__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : 1K;
+__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : 1K;
+__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : 1K;
+__USER_SIGNATURE_REGION_LENGTH__ = DEFINED(__USER_SIGNATURE_REGION_LENGTH__) ? __USER_SIGNATURE_REGION_LENGTH__ : 1K;
+MEMORY
+{
+  text   (rx)   : ORIGIN = 0, LENGTH = __TEXT_REGION_LENGTH__
+  data   (rw!x) : ORIGIN = 0x800200, LENGTH = __DATA_REGION_LENGTH__
+  eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = __EEPROM_REGION_LENGTH__
+  fuse      (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__
+  lock      (rw!x) : ORIGIN = 0x830000, LENGTH = __LOCK_REGION_LENGTH__
+  signature (rw!x) : ORIGIN = 0x840000, LENGTH = __SIGNATURE_REGION_LENGTH__
+  user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = __USER_SIGNATURE_REGION_LENGTH__
+}
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  .hash          : { *(.hash)		}
+  .dynsym        : { *(.dynsym)		}
+  .dynstr        : { *(.dynstr)		}
+  .gnu.version   : { *(.gnu.version)	}
+  .gnu.version_d   : { *(.gnu.version_d)	}
+  .gnu.version_r   : { *(.gnu.version_r)	}
+  .rel.init      : { *(.rel.init)		}
+  .rela.init     : { *(.rela.init)	}
+  .rel.text      :
+    {
+      *(.rel.text)
+      *(.rel.text.*)
+      *(.rel.gnu.linkonce.t*)
+    }
+  .rela.text     :
+    {
+      *(.rela.text)
+      *(.rela.text.*)
+      *(.rela.gnu.linkonce.t*)
+    }
+  .rel.fini      : { *(.rel.fini)		}
+  .rela.fini     : { *(.rela.fini)	}
+  .rel.rodata    :
+    {
+      *(.rel.rodata)
+      *(.rel.rodata.*)
+      *(.rel.gnu.linkonce.r*)
+    }
+  .rela.rodata   :
+    {
+      *(.rela.rodata)
+      *(.rela.rodata.*)
+      *(.rela.gnu.linkonce.r*)
+    }
+  .rel.data      :
+    {
+      *(.rel.data)
+      *(.rel.data.*)
+      *(.rel.gnu.linkonce.d*)
+    }
+  .rela.data     :
+    {
+      *(.rela.data)
+      *(.rela.data.*)
+      *(.rela.gnu.linkonce.d*)
+    }
+  .rel.ctors     : { *(.rel.ctors)	}
+  .rela.ctors    : { *(.rela.ctors)	}
+  .rel.dtors     : { *(.rel.dtors)	}
+  .rela.dtors    : { *(.rela.dtors)	}
+  .rel.got       : { *(.rel.got)		}
+  .rela.got      : { *(.rela.got)		}
+  .rel.bss       : { *(.rel.bss)		}
+  .rela.bss      : { *(.rela.bss)		}
+  .rel.plt       : { *(.rel.plt)		}
+  .rela.plt      : { *(.rela.plt)		}
+  /* Internal text space or external memory.  */
+  .text   :
+  {
+    *(.vectors)
+    KEEP(*(.vectors))
+    /* For data that needs to reside in the lower 64k of progmem.  */
+     *(.progmem.gcc*)
+    /* PR 13812: Placing the trampolines here gives a better chance
+       that they will be in range of the code that uses them.  */
+    . = ALIGN(2);
+     __trampolines_start = . ;
+    /* The jump trampolines for the 16-bit limited relocs will reside here.  */
+    *(.trampolines)
+     *(.trampolines*)
+     __trampolines_end = . ;
+    /* avr-libc expects these data to reside in lower 64K. */
+     *libprintf_flt.a:*(.progmem.data)
+     *libc.a:*(.progmem.data)
+     *(.progmem*)
+    . = ALIGN(2);
+    /* For future tablejump instruction arrays for 3 byte pc devices.
+       We don't relax jump/call instructions within these sections.  */
+    *(.jumptables)
+     *(.jumptables*)
+    /* For code that needs to reside in the lower 128k progmem.  */
+    *(.lowtext)
+     *(.lowtext*)
+     __ctors_start = . ;
+     *(.ctors)
+     __ctors_end = . ;
+     __dtors_start = . ;
+     *(.dtors)
+     __dtors_end = . ;
+    KEEP(SORT(*)(.ctors))
+    KEEP(SORT(*)(.dtors))
+    /* From this point on, we don't bother about wether the insns are
+       below or above the 16 bits boundary.  */
+    *(.init0)  /* Start here after reset.  */
+    KEEP (*(.init0))
+    *(.init1)
+    KEEP (*(.init1))
+    *(.init2)  /* Clear __zero_reg__, set up stack pointer.  */
+    KEEP (*(.init2))
+    *(.init3)
+    KEEP (*(.init3))
+    *(.init4)  /* Initialize data and BSS.  */
+    KEEP (*(.init4))
+    *(.init5)
+    KEEP (*(.init5))
+    *(.init6)  /* C++ constructors.  */
+    KEEP (*(.init6))
+    *(.init7)
+    KEEP (*(.init7))
+    *(.init8)
+    KEEP (*(.init8))
+    *(.init9)  /* Call main().  */
+    KEEP (*(.init9))
+    *(.text)
+    . = ALIGN(2);
+     *(.text.*)
+    . = ALIGN(2);
+    *(.fini9)  /* _exit() starts here.  */
+    KEEP (*(.fini9))
+    *(.fini8)
+    KEEP (*(.fini8))
+    *(.fini7)
+    KEEP (*(.fini7))
+    *(.fini6)  /* C++ destructors.  */
+    KEEP (*(.fini6))
+    *(.fini5)
+    KEEP (*(.fini5))
+    *(.fini4)
+    KEEP (*(.fini4))
+    *(.fini3)
+    KEEP (*(.fini3))
+    *(.fini2)
+    KEEP (*(.fini2))
+    *(.fini1)
+    KEEP (*(.fini1))
+    *(.fini0)  /* Infinite loop after program termination.  */
+    KEEP (*(.fini0))
+     _etext = . ;
+  }  > text
+  .data          :
+  {
+     PROVIDE (__data_start = .) ;
+    *(.data)
+     *(.data*)
+    *(.rodata)  /* We need to include .rodata here if gcc is used */
+     *(.rodata*) /* with -fdata-sections.  */
+    *(.gnu.linkonce.d*)
+    . = ALIGN(2);
+     _edata = . ;
+     PROVIDE (__data_end = .) ;
+  }  > data AT> text
+  .bss  ADDR(.data) + SIZEOF (.data)   : AT (ADDR (.bss))
+  {
+     PROVIDE (__bss_start = .) ;
+    *(.bss)
+     *(.bss*)
+    *(COMMON)
+     PROVIDE (__bss_end = .) ;
+  }  > data
+   __data_load_start = LOADADDR(.data);
+   __data_load_end = __data_load_start + SIZEOF(.data);
+  /* Global data not cleared after reset.  */
+  .noinit  ADDR(.bss) + SIZEOF (.bss)  :  AT (ADDR (.noinit))
+  {
+     PROVIDE (__noinit_start = .) ;
+    *(.noinit*)
+     PROVIDE (__noinit_end = .) ;
+     _end = . ;
+     PROVIDE (__heap_start = .) ;
+  }  > data
+  .eeprom  :
+  {
+    /* See .data above...  */
+    KEEP(*(.eeprom*))
+     __eeprom_end = . ;
+  }  > eeprom
+  .fuse  :
+  {
+    KEEP(*(.fuse))
+    KEEP(*(.lfuse))
+    KEEP(*(.hfuse))
+    KEEP(*(.efuse))
+  }  > fuse
+  .lock  :
+  {
+    KEEP(*(.lock*))
+  }  > lock
+  .signature  :
+  {
+    KEEP(*(.signature*))
+  }  > signature
+  .user_signatures  :
+  {
+    KEEP(*(.user_signatures*))
+  }  > user_signatures
+  /* Stabs debugging sections.  */
+  .stab 0 : { *(.stab) }
+  .stabstr 0 : { *(.stabstr) }
+  .stab.excl 0 : { *(.stab.excl) }
+  .stab.exclstr 0 : { *(.stab.exclstr) }
+  .stab.index 0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment 0 : { *(.comment) }
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end ) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+}
diff --git a/cpu/atmega256rfr2/Makefile.include b/cpu/atmega256rfr2/Makefile.include
index 4e3aa39e06ffae1f8e7237645e855d007fff0acd..7d1eb48a2a9f34aaf085e86a8627eabfc3f9a353 100644
--- a/cpu/atmega256rfr2/Makefile.include
+++ b/cpu/atmega256rfr2/Makefile.include
@@ -10,5 +10,8 @@ export UNDEF += $(BINDIR)/cpu/startup.o
 #include periph module
 USEMODULE += periph
 
+RAM_LEN = 32K
+ROM_LEN = 256K
+
 # CPU depends on the atmega common module, so include it
 include $(ATMEGA_COMMON)Makefile.include
diff --git a/cpu/atmega256rfr2/ldscripts_compat/README.md b/cpu/atmega256rfr2/ldscripts_compat/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1bc6babe5bef59b56a77aa10af47aec1572f70b3
--- /dev/null
+++ b/cpu/atmega256rfr2/ldscripts_compat/README.md
@@ -0,0 +1,8 @@
+avr linkerscript
+================
+
+Starting from avr-binutils 2.26, the linker defines symbol that can be
+overriden to configure ROM and RAM length.
+
+This ldscript is used for supporting older versions on avr-binutils like on
+ubuntu xenial.
diff --git a/cpu/atmega256rfr2/ldscripts_compat/avr_2.26.ld b/cpu/atmega256rfr2/ldscripts_compat/avr_2.26.ld
new file mode 100644
index 0000000000000000000000000000000000000000..122be59261c4317d7d36f8f6e8a7105ed4739053
--- /dev/null
+++ b/cpu/atmega256rfr2/ldscripts_compat/avr_2.26.ld
@@ -0,0 +1,262 @@
+/* Script for -n: mix text and data on same page */
+/* Copyright (C) 2014-2015 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
+OUTPUT_ARCH(avr:6)
+__TEXT_REGION_LENGTH__ = DEFINED(__TEXT_REGION_LENGTH__) ? __TEXT_REGION_LENGTH__ : 1024K;
+__DATA_REGION_LENGTH__ = DEFINED(__DATA_REGION_LENGTH__) ? __DATA_REGION_LENGTH__ : 0xfe00;
+__EEPROM_REGION_LENGTH__ = DEFINED(__EEPROM_REGION_LENGTH__) ? __EEPROM_REGION_LENGTH__ : 64K;
+__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : 1K;
+__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : 1K;
+__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : 1K;
+__USER_SIGNATURE_REGION_LENGTH__ = DEFINED(__USER_SIGNATURE_REGION_LENGTH__) ? __USER_SIGNATURE_REGION_LENGTH__ : 1K;
+MEMORY
+{
+  text   (rx)   : ORIGIN = 0, LENGTH = __TEXT_REGION_LENGTH__
+  data   (rw!x) : ORIGIN = 0x800200, LENGTH = __DATA_REGION_LENGTH__
+  eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = __EEPROM_REGION_LENGTH__
+  fuse      (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__
+  lock      (rw!x) : ORIGIN = 0x830000, LENGTH = __LOCK_REGION_LENGTH__
+  signature (rw!x) : ORIGIN = 0x840000, LENGTH = __SIGNATURE_REGION_LENGTH__
+  user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = __USER_SIGNATURE_REGION_LENGTH__
+}
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  .hash          : { *(.hash)		}
+  .dynsym        : { *(.dynsym)		}
+  .dynstr        : { *(.dynstr)		}
+  .gnu.version   : { *(.gnu.version)	}
+  .gnu.version_d   : { *(.gnu.version_d)	}
+  .gnu.version_r   : { *(.gnu.version_r)	}
+  .rel.init      : { *(.rel.init)		}
+  .rela.init     : { *(.rela.init)	}
+  .rel.text      :
+    {
+      *(.rel.text)
+      *(.rel.text.*)
+      *(.rel.gnu.linkonce.t*)
+    }
+  .rela.text     :
+    {
+      *(.rela.text)
+      *(.rela.text.*)
+      *(.rela.gnu.linkonce.t*)
+    }
+  .rel.fini      : { *(.rel.fini)		}
+  .rela.fini     : { *(.rela.fini)	}
+  .rel.rodata    :
+    {
+      *(.rel.rodata)
+      *(.rel.rodata.*)
+      *(.rel.gnu.linkonce.r*)
+    }
+  .rela.rodata   :
+    {
+      *(.rela.rodata)
+      *(.rela.rodata.*)
+      *(.rela.gnu.linkonce.r*)
+    }
+  .rel.data      :
+    {
+      *(.rel.data)
+      *(.rel.data.*)
+      *(.rel.gnu.linkonce.d*)
+    }
+  .rela.data     :
+    {
+      *(.rela.data)
+      *(.rela.data.*)
+      *(.rela.gnu.linkonce.d*)
+    }
+  .rel.ctors     : { *(.rel.ctors)	}
+  .rela.ctors    : { *(.rela.ctors)	}
+  .rel.dtors     : { *(.rel.dtors)	}
+  .rela.dtors    : { *(.rela.dtors)	}
+  .rel.got       : { *(.rel.got)		}
+  .rela.got      : { *(.rela.got)		}
+  .rel.bss       : { *(.rel.bss)		}
+  .rela.bss      : { *(.rela.bss)		}
+  .rel.plt       : { *(.rel.plt)		}
+  .rela.plt      : { *(.rela.plt)		}
+  /* Internal text space or external memory.  */
+  .text   :
+  {
+    *(.vectors)
+    KEEP(*(.vectors))
+    /* For data that needs to reside in the lower 64k of progmem.  */
+     *(.progmem.gcc*)
+    /* PR 13812: Placing the trampolines here gives a better chance
+       that they will be in range of the code that uses them.  */
+    . = ALIGN(2);
+     __trampolines_start = . ;
+    /* The jump trampolines for the 16-bit limited relocs will reside here.  */
+    *(.trampolines)
+     *(.trampolines*)
+     __trampolines_end = . ;
+    /* avr-libc expects these data to reside in lower 64K. */
+     *libprintf_flt.a:*(.progmem.data)
+     *libc.a:*(.progmem.data)
+     *(.progmem*)
+    . = ALIGN(2);
+    /* For future tablejump instruction arrays for 3 byte pc devices.
+       We don't relax jump/call instructions within these sections.  */
+    *(.jumptables)
+     *(.jumptables*)
+    /* For code that needs to reside in the lower 128k progmem.  */
+    *(.lowtext)
+     *(.lowtext*)
+     __ctors_start = . ;
+     *(.ctors)
+     __ctors_end = . ;
+     __dtors_start = . ;
+     *(.dtors)
+     __dtors_end = . ;
+    KEEP(SORT(*)(.ctors))
+    KEEP(SORT(*)(.dtors))
+    /* From this point on, we don't bother about wether the insns are
+       below or above the 16 bits boundary.  */
+    *(.init0)  /* Start here after reset.  */
+    KEEP (*(.init0))
+    *(.init1)
+    KEEP (*(.init1))
+    *(.init2)  /* Clear __zero_reg__, set up stack pointer.  */
+    KEEP (*(.init2))
+    *(.init3)
+    KEEP (*(.init3))
+    *(.init4)  /* Initialize data and BSS.  */
+    KEEP (*(.init4))
+    *(.init5)
+    KEEP (*(.init5))
+    *(.init6)  /* C++ constructors.  */
+    KEEP (*(.init6))
+    *(.init7)
+    KEEP (*(.init7))
+    *(.init8)
+    KEEP (*(.init8))
+    *(.init9)  /* Call main().  */
+    KEEP (*(.init9))
+    *(.text)
+    . = ALIGN(2);
+     *(.text.*)
+    . = ALIGN(2);
+    *(.fini9)  /* _exit() starts here.  */
+    KEEP (*(.fini9))
+    *(.fini8)
+    KEEP (*(.fini8))
+    *(.fini7)
+    KEEP (*(.fini7))
+    *(.fini6)  /* C++ destructors.  */
+    KEEP (*(.fini6))
+    *(.fini5)
+    KEEP (*(.fini5))
+    *(.fini4)
+    KEEP (*(.fini4))
+    *(.fini3)
+    KEEP (*(.fini3))
+    *(.fini2)
+    KEEP (*(.fini2))
+    *(.fini1)
+    KEEP (*(.fini1))
+    *(.fini0)  /* Infinite loop after program termination.  */
+    KEEP (*(.fini0))
+     _etext = . ;
+  }  > text
+  .data          :
+  {
+     PROVIDE (__data_start = .) ;
+    *(.data)
+     *(.data*)
+    *(.rodata)  /* We need to include .rodata here if gcc is used */
+     *(.rodata*) /* with -fdata-sections.  */
+    *(.gnu.linkonce.d*)
+    . = ALIGN(2);
+     _edata = . ;
+     PROVIDE (__data_end = .) ;
+  }  > data AT> text
+  .bss  ADDR(.data) + SIZEOF (.data)   : AT (ADDR (.bss))
+  {
+     PROVIDE (__bss_start = .) ;
+    *(.bss)
+     *(.bss*)
+    *(COMMON)
+     PROVIDE (__bss_end = .) ;
+  }  > data
+   __data_load_start = LOADADDR(.data);
+   __data_load_end = __data_load_start + SIZEOF(.data);
+  /* Global data not cleared after reset.  */
+  .noinit  ADDR(.bss) + SIZEOF (.bss)  :  AT (ADDR (.noinit))
+  {
+     PROVIDE (__noinit_start = .) ;
+    *(.noinit*)
+     PROVIDE (__noinit_end = .) ;
+     _end = . ;
+     PROVIDE (__heap_start = .) ;
+  }  > data
+  .eeprom  :
+  {
+    /* See .data above...  */
+    KEEP(*(.eeprom*))
+     __eeprom_end = . ;
+  }  > eeprom
+  .fuse  :
+  {
+    KEEP(*(.fuse))
+    KEEP(*(.lfuse))
+    KEEP(*(.hfuse))
+    KEEP(*(.efuse))
+  }  > fuse
+  .lock  :
+  {
+    KEEP(*(.lock*))
+  }  > lock
+  .signature  :
+  {
+    KEEP(*(.signature*))
+  }  > signature
+  .user_signatures  :
+  {
+    KEEP(*(.user_signatures*))
+  }  > user_signatures
+  /* Stabs debugging sections.  */
+  .stab 0 : { *(.stab) }
+  .stabstr 0 : { *(.stabstr) }
+  .stab.excl 0 : { *(.stab.excl) }
+  .stab.exclstr 0 : { *(.stab.exclstr) }
+  .stab.index 0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment 0 : { *(.comment) }
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end ) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+}
diff --git a/cpu/atmega328p/Makefile.include b/cpu/atmega328p/Makefile.include
index b46d4e871c8f7be91fa4f2bae002050a124562cf..c014b254ccd08f40346c94fad089403946bf851c 100644
--- a/cpu/atmega328p/Makefile.include
+++ b/cpu/atmega328p/Makefile.include
@@ -4,5 +4,8 @@ USEMODULE += atmega_common
 # define path to atmega common module, which is needed for this CPU
 export ATMEGA_COMMON = $(RIOTCPU)/atmega_common/
 
+RAM_LEN = 2K
+ROM_LEN = 32K
+
 # CPU depends on the atmega common module, so include it
 include $(ATMEGA_COMMON)Makefile.include
diff --git a/cpu/atmega328p/ldscripts_compat/README.md b/cpu/atmega328p/ldscripts_compat/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1bc6babe5bef59b56a77aa10af47aec1572f70b3
--- /dev/null
+++ b/cpu/atmega328p/ldscripts_compat/README.md
@@ -0,0 +1,8 @@
+avr linkerscript
+================
+
+Starting from avr-binutils 2.26, the linker defines symbol that can be
+overriden to configure ROM and RAM length.
+
+This ldscript is used for supporting older versions on avr-binutils like on
+ubuntu xenial.
diff --git a/cpu/atmega328p/ldscripts_compat/avr_2.26.ld b/cpu/atmega328p/ldscripts_compat/avr_2.26.ld
new file mode 100644
index 0000000000000000000000000000000000000000..bb6af6bc0ae009e971160e19464427e2deb342f0
--- /dev/null
+++ b/cpu/atmega328p/ldscripts_compat/avr_2.26.ld
@@ -0,0 +1,262 @@
+/* Script for -n: mix text and data on same page */
+/* Copyright (C) 2014-2015 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
+OUTPUT_ARCH(avr:5)
+__TEXT_REGION_LENGTH__ = DEFINED(__TEXT_REGION_LENGTH__) ? __TEXT_REGION_LENGTH__ : 128K;
+__DATA_REGION_LENGTH__ = DEFINED(__DATA_REGION_LENGTH__) ? __DATA_REGION_LENGTH__ : 0xffa0;
+__EEPROM_REGION_LENGTH__ = DEFINED(__EEPROM_REGION_LENGTH__) ? __EEPROM_REGION_LENGTH__ : 64K;
+__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : 1K;
+__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : 1K;
+__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : 1K;
+__USER_SIGNATURE_REGION_LENGTH__ = DEFINED(__USER_SIGNATURE_REGION_LENGTH__) ? __USER_SIGNATURE_REGION_LENGTH__ : 1K;
+MEMORY
+{
+  text   (rx)   : ORIGIN = 0, LENGTH = __TEXT_REGION_LENGTH__
+  data   (rw!x) : ORIGIN = 0x800060, LENGTH = __DATA_REGION_LENGTH__
+  eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = __EEPROM_REGION_LENGTH__
+  fuse      (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__
+  lock      (rw!x) : ORIGIN = 0x830000, LENGTH = __LOCK_REGION_LENGTH__
+  signature (rw!x) : ORIGIN = 0x840000, LENGTH = __SIGNATURE_REGION_LENGTH__
+  user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = __USER_SIGNATURE_REGION_LENGTH__
+}
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  .hash          : { *(.hash)		}
+  .dynsym        : { *(.dynsym)		}
+  .dynstr        : { *(.dynstr)		}
+  .gnu.version   : { *(.gnu.version)	}
+  .gnu.version_d   : { *(.gnu.version_d)	}
+  .gnu.version_r   : { *(.gnu.version_r)	}
+  .rel.init      : { *(.rel.init)		}
+  .rela.init     : { *(.rela.init)	}
+  .rel.text      :
+    {
+      *(.rel.text)
+      *(.rel.text.*)
+      *(.rel.gnu.linkonce.t*)
+    }
+  .rela.text     :
+    {
+      *(.rela.text)
+      *(.rela.text.*)
+      *(.rela.gnu.linkonce.t*)
+    }
+  .rel.fini      : { *(.rel.fini)		}
+  .rela.fini     : { *(.rela.fini)	}
+  .rel.rodata    :
+    {
+      *(.rel.rodata)
+      *(.rel.rodata.*)
+      *(.rel.gnu.linkonce.r*)
+    }
+  .rela.rodata   :
+    {
+      *(.rela.rodata)
+      *(.rela.rodata.*)
+      *(.rela.gnu.linkonce.r*)
+    }
+  .rel.data      :
+    {
+      *(.rel.data)
+      *(.rel.data.*)
+      *(.rel.gnu.linkonce.d*)
+    }
+  .rela.data     :
+    {
+      *(.rela.data)
+      *(.rela.data.*)
+      *(.rela.gnu.linkonce.d*)
+    }
+  .rel.ctors     : { *(.rel.ctors)	}
+  .rela.ctors    : { *(.rela.ctors)	}
+  .rel.dtors     : { *(.rel.dtors)	}
+  .rela.dtors    : { *(.rela.dtors)	}
+  .rel.got       : { *(.rel.got)		}
+  .rela.got      : { *(.rela.got)		}
+  .rel.bss       : { *(.rel.bss)		}
+  .rela.bss      : { *(.rela.bss)		}
+  .rel.plt       : { *(.rel.plt)		}
+  .rela.plt      : { *(.rela.plt)		}
+  /* Internal text space or external memory.  */
+  .text   :
+  {
+    *(.vectors)
+    KEEP(*(.vectors))
+    /* For data that needs to reside in the lower 64k of progmem.  */
+     *(.progmem.gcc*)
+    /* PR 13812: Placing the trampolines here gives a better chance
+       that they will be in range of the code that uses them.  */
+    . = ALIGN(2);
+     __trampolines_start = . ;
+    /* The jump trampolines for the 16-bit limited relocs will reside here.  */
+    *(.trampolines)
+     *(.trampolines*)
+     __trampolines_end = . ;
+    /* avr-libc expects these data to reside in lower 64K. */
+     *libprintf_flt.a:*(.progmem.data)
+     *libc.a:*(.progmem.data)
+     *(.progmem*)
+    . = ALIGN(2);
+    /* For future tablejump instruction arrays for 3 byte pc devices.
+       We don't relax jump/call instructions within these sections.  */
+    *(.jumptables)
+     *(.jumptables*)
+    /* For code that needs to reside in the lower 128k progmem.  */
+    *(.lowtext)
+     *(.lowtext*)
+     __ctors_start = . ;
+     *(.ctors)
+     __ctors_end = . ;
+     __dtors_start = . ;
+     *(.dtors)
+     __dtors_end = . ;
+    KEEP(SORT(*)(.ctors))
+    KEEP(SORT(*)(.dtors))
+    /* From this point on, we don't bother about wether the insns are
+       below or above the 16 bits boundary.  */
+    *(.init0)  /* Start here after reset.  */
+    KEEP (*(.init0))
+    *(.init1)
+    KEEP (*(.init1))
+    *(.init2)  /* Clear __zero_reg__, set up stack pointer.  */
+    KEEP (*(.init2))
+    *(.init3)
+    KEEP (*(.init3))
+    *(.init4)  /* Initialize data and BSS.  */
+    KEEP (*(.init4))
+    *(.init5)
+    KEEP (*(.init5))
+    *(.init6)  /* C++ constructors.  */
+    KEEP (*(.init6))
+    *(.init7)
+    KEEP (*(.init7))
+    *(.init8)
+    KEEP (*(.init8))
+    *(.init9)  /* Call main().  */
+    KEEP (*(.init9))
+    *(.text)
+    . = ALIGN(2);
+     *(.text.*)
+    . = ALIGN(2);
+    *(.fini9)  /* _exit() starts here.  */
+    KEEP (*(.fini9))
+    *(.fini8)
+    KEEP (*(.fini8))
+    *(.fini7)
+    KEEP (*(.fini7))
+    *(.fini6)  /* C++ destructors.  */
+    KEEP (*(.fini6))
+    *(.fini5)
+    KEEP (*(.fini5))
+    *(.fini4)
+    KEEP (*(.fini4))
+    *(.fini3)
+    KEEP (*(.fini3))
+    *(.fini2)
+    KEEP (*(.fini2))
+    *(.fini1)
+    KEEP (*(.fini1))
+    *(.fini0)  /* Infinite loop after program termination.  */
+    KEEP (*(.fini0))
+     _etext = . ;
+  }  > text
+  .data          :
+  {
+     PROVIDE (__data_start = .) ;
+    *(.data)
+     *(.data*)
+    *(.rodata)  /* We need to include .rodata here if gcc is used */
+     *(.rodata*) /* with -fdata-sections.  */
+    *(.gnu.linkonce.d*)
+    . = ALIGN(2);
+     _edata = . ;
+     PROVIDE (__data_end = .) ;
+  }  > data AT> text
+  .bss  ADDR(.data) + SIZEOF (.data)   : AT (ADDR (.bss))
+  {
+     PROVIDE (__bss_start = .) ;
+    *(.bss)
+     *(.bss*)
+    *(COMMON)
+     PROVIDE (__bss_end = .) ;
+  }  > data
+   __data_load_start = LOADADDR(.data);
+   __data_load_end = __data_load_start + SIZEOF(.data);
+  /* Global data not cleared after reset.  */
+  .noinit  ADDR(.bss) + SIZEOF (.bss)  :  AT (ADDR (.noinit))
+  {
+     PROVIDE (__noinit_start = .) ;
+    *(.noinit*)
+     PROVIDE (__noinit_end = .) ;
+     _end = . ;
+     PROVIDE (__heap_start = .) ;
+  }  > data
+  .eeprom  :
+  {
+    /* See .data above...  */
+    KEEP(*(.eeprom*))
+     __eeprom_end = . ;
+  }  > eeprom
+  .fuse  :
+  {
+    KEEP(*(.fuse))
+    KEEP(*(.lfuse))
+    KEEP(*(.hfuse))
+    KEEP(*(.efuse))
+  }  > fuse
+  .lock  :
+  {
+    KEEP(*(.lock*))
+  }  > lock
+  .signature  :
+  {
+    KEEP(*(.signature*))
+  }  > signature
+  .user_signatures  :
+  {
+    KEEP(*(.user_signatures*))
+  }  > user_signatures
+  /* Stabs debugging sections.  */
+  .stab 0 : { *(.stab) }
+  .stabstr 0 : { *(.stabstr) }
+  .stab.excl 0 : { *(.stab.excl) }
+  .stab.exclstr 0 : { *(.stab.exclstr) }
+  .stab.index 0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment 0 : { *(.comment) }
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end ) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+}
diff --git a/cpu/atmega_common/Makefile.include b/cpu/atmega_common/Makefile.include
index 717ec08ab640dd7b1f3cf8c5e019498b7e790dbe..5624d68a0799f8a2a1cf0f14cb9cf1b2b501ba79 100644
--- a/cpu/atmega_common/Makefile.include
+++ b/cpu/atmega_common/Makefile.include
@@ -26,3 +26,14 @@ ifeq ($(LTO),1)
   # See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59396
   export LINKFLAGS += -Wno-error
 endif
+
+# Use ROM_LEN and RAM_LEN during link
+$(if $(ROM_LEN),,$(error ROM_LEN is not defined))
+$(if $(RAM_LEN),,$(error RAM_LEN is not defined))
+LINKFLAGS += $(LINKFLAGPREFIX)--defsym=__TEXT_REGION_LENGTH__=$(ROM_LEN)$(if $(ROM_RESERVED),-$(ROM_RESERVED))
+LINKFLAGS += $(LINKFLAGPREFIX)--defsym=__DATA_REGION_LENGTH__=$(RAM_LEN)
+
+# Use newer linker script to have ROM/RAM configuration symbols in binutils<2.26
+LDSCRIPT_COMPAT = $(if $(shell $(TARGET_ARCH)-ld --verbose | grep __TEXT_REGION_LENGTH__),,\
+                    -T$(RIOTCPU)/$(CPU)/ldscripts_compat/avr_2.26.ld)
+LINKFLAGS += $(LDSCRIPT_COMPAT)
diff --git a/examples/asymcute_mqttsn/Makefile b/examples/asymcute_mqttsn/Makefile
index 08f61563058066112a24bb3a55eda82735702171..e89290e6eec416a329a176eb5a645f40d9b21034 100644
--- a/examples/asymcute_mqttsn/Makefile
+++ b/examples/asymcute_mqttsn/Makefile
@@ -9,12 +9,14 @@ RIOTBASE ?= $(CURDIR)/../..
 
 # Not all boards have enough memory to build the default configuration of this
 # example...
-BOARD_INSUFFICIENT_MEMORY := airfy-beacon chronos hifive1 microbit msb-430 \
-                             msb-430h nrf51dongle nrf6310 nucleo-f030r8 \
-                             nucleo-f031k6 nucleo-f042k6 nucleo-f070rb \
-                             nucleo-f072rb nucleo-f303k8 nucleo-f334r8 \
-                             nucleo-l031k6 nucleo-l053r8 stm32f0discovery \
-                             telosb wsn430-v1_3b wsn430-v1_4 yunjia-nrf51822 z1
+BOARD_INSUFFICIENT_MEMORY := airfy-beacon arduino-duemilanove arduino-mega2560 \
+                             arduino-uno chronos hifive1 mega-xplained \
+                             microbit msb-430  msb-430h nrf51dongle nrf6310 \
+                             nucleo-f030r8 nucleo-f031k6 nucleo-f042k6 \
+                             nucleo-f070rb nucleo-f072rb nucleo-f303k8 \
+                             nucleo-f334r8 nucleo-l031k6 nucleo-l053r8 \
+                             stm32f0discovery telosb waspmote-pro \
+                             wsn430-v1_3b wsn430-v1_4 yunjia-nrf51822 z1
 
 # Include packages that pull up and auto-init the link layer.
 # NOTE: 6LoWPAN will be included if IEEE802.15.4 devices are present
diff --git a/examples/default/Makefile b/examples/default/Makefile
index 664945b5df7371c3eb8d9869754128b309683a7a..7ca1175f6695bd2bd1b03e34712a21b39504a82b 100644
--- a/examples/default/Makefile
+++ b/examples/default/Makefile
@@ -7,6 +7,8 @@ BOARD ?= native
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 # Uncomment these lines if you want to use platform support from external
 # repositories:
 #RIOTCPU ?= $(CURDIR)/../../RIOT/thirdparty_cpu
diff --git a/examples/filesystem/Makefile b/examples/filesystem/Makefile
index 69034e3a606af023e34719decb17ec56c489c4ca..85b2d4436395b8eff4ba7f9c955bf4913e92a2ef 100644
--- a/examples/filesystem/Makefile
+++ b/examples/filesystem/Makefile
@@ -4,6 +4,7 @@ APPLICATION = filesystem
 # If no BOARD is found in the environment, use this default:
 BOARD ?= native
 
+
 # Blacklisting msp430-based boards, as file syscalls are not supported
 BOARD_BLACKLIST :=  chronos \
                     msb-430 \
@@ -14,7 +15,7 @@ BOARD_BLACKLIST :=  chronos \
                     z1 \
                     #
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno nucleo-f031k6
 
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
diff --git a/examples/gcoap/Makefile b/examples/gcoap/Makefile
index 14fdd7380ec35a0f86f8f6c4ad8e8e1cf0630d5a..8bc26593937871171a0141c8a9873cebbedf3bdc 100644
--- a/examples/gcoap/Makefile
+++ b/examples/gcoap/Makefile
@@ -9,10 +9,12 @@ BOARD ?= native
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
 
-BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h nucleo-f031k6 nucleo-f042k6 \
-                             nucleo-l031k6 nucleo-f030r8 nucleo-f334r8 nucleo-l053r8 \
-                             stm32f0discovery telosb wsn430-v1_3b wsn430-v1_4 z1 \
-                             nucleo-f303k8
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos mega-xplained msb-430 msb-430h \
+                             nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
+                             nucleo-f030r8 nucleo-f303k8 nucleo-f334r8 \
+                             nucleo-l053r8 stm32f0discovery telosb \
+                             waspmote-pro wsn430-v1_3b wsn430-v1_4 z1
 
 ## Uncomment to redefine port, for example use 61616 for RFC 6282 UDP compression.
 #GCOAP_PORT = 5683
diff --git a/examples/gnrc_border_router/Makefile b/examples/gnrc_border_router/Makefile
index 54177f6972967eb789be93f58d68cf8e6fffff83..a8d8f0b8417c019e77e599c695c18dc41a57a750 100644
--- a/examples/gnrc_border_router/Makefile
+++ b/examples/gnrc_border_router/Makefile
@@ -7,13 +7,16 @@ BOARD ?= samr21-xpro
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
 
-BOARD_INSUFFICIENT_MEMORY := airfy-beacon b-l072z-lrwan1 bluepill calliope-mini \
+BOARD_INSUFFICIENT_MEMORY := airfy-beacon arduino-duemilanove arduino-mega2560 \
+                             arduino-uno b-l072z-lrwan1 bluepill calliope-mini \
                              cc2650-launchpad cc2650stk hifive1 maple-mini \
-                             microbit msb-430 msb-430h nrf51dongle nrf6310 \
-                             nucleo-f031k6 nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 \
-                             nucleo-f030r8 nucleo-f070rb nucleo-f072rb nucleo-f103rb nucleo-f302r8 \
-                             nucleo-f334r8 nucleo-l053r8 nucleo-l073rz opencm904 \
-                             spark-core stm32f0discovery stm32mindev telosb \
+                             mega-xplained microbit msb-430 msb-430h \
+                             nrf51dongle nrf6310 nucleo-f031k6 nucleo-f042k6 \
+                             nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 \
+                             nucleo-f070rb nucleo-f072rb nucleo-f103rb \
+                             nucleo-f302r8 nucleo-f334r8 nucleo-l053r8 \
+                             nucleo-l073rz opencm904 spark-core \
+                             stm32f0discovery stm32mindev telosb waspmote-pro \
                              weio wsn430-v1_3b wsn430-v1_4 yunjia-nrf51822 z1
 
 # The following boards do not have an available UART
diff --git a/examples/gnrc_minimal/Makefile b/examples/gnrc_minimal/Makefile
index 5a5b565153856dae146011e2a3b401efe575e98d..bc63da397f6e851c53fe0c72afb5bf15ec19231f 100644
--- a/examples/gnrc_minimal/Makefile
+++ b/examples/gnrc_minimal/Makefile
@@ -7,7 +7,7 @@ BOARD ?= native
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno nucleo-f031k6
 
 # Comment this out to disable code in RIOT that does safety checking
 # which is not needed in a production environment but helps in the
diff --git a/examples/gnrc_networking/Makefile b/examples/gnrc_networking/Makefile
index 86b7a94c143cbcfd2d18c9040e85c4332b699d0e..4d361f8250fcb64b0ba40c8b3efca92be92daffc 100644
--- a/examples/gnrc_networking/Makefile
+++ b/examples/gnrc_networking/Makefile
@@ -7,11 +7,14 @@ BOARD ?= native
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
 
-BOARD_INSUFFICIENT_MEMORY := calliope-mini chronos hifive1 microbit msb-430 msb-430h \
-                             nucleo-f031k6 nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 \
-                             nucleo-f030r8 nucleo-f070rb nucleo-f072rb nucleo-f103rb nucleo-f302r8 \
-                             nucleo-f334r8 nucleo-l053r8 spark-core stm32f0discovery telosb \
-                             wsn430-v1_3b wsn430-v1_4 z1
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             calliope-mini chronos hifive1 mega-xplained \
+                             microbit msb-430 msb-430h nucleo-f031k6 \
+                             nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 \
+                             nucleo-f030r8 nucleo-f070rb nucleo-f072rb \
+                             nucleo-f103rb nucleo-f302r8 nucleo-f334r8 \
+                             nucleo-l053r8 spark-core stm32f0discovery telosb \
+                             waspmote-pro wsn430-v1_3b wsn430-v1_4 z1
 
 # Include packages that pull up and auto-init the link layer.
 # NOTE: 6LoWPAN will be included if IEEE802.15.4 devices are present
diff --git a/examples/gnrc_tftp/Makefile b/examples/gnrc_tftp/Makefile
index ae935f94e24ef6b896340e5d2cb6f71803b906b4..5f082253f9a3e03ead1ffb7adbf86a2af87ac4b3 100644
--- a/examples/gnrc_tftp/Makefile
+++ b/examples/gnrc_tftp/Makefile
@@ -7,12 +7,16 @@ BOARD ?= native
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
 
-BOARD_INSUFFICIENT_MEMORY := airfy-beacon b-l072z-lrwan1 bluepill calliope-mini chronos \
-                             hifive1 microbit msb-430 msb-430h nrf51dongle nrf6310 nucleo-f031k6 \
-                             nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 \
-                             nucleo-f070rb nucleo-f072rb nucleo-f103rb nucleo-f302r8 nucleo-f334r8 \
-                             nucleo-l053r8 spark-core stm32f0discovery stm32mindev \
-                             telosb wsn430-v1_3b wsn430-v1_4 yunjia-nrf51822 z1
+BOARD_INSUFFICIENT_MEMORY := airfy-beacon arduino-duemilanove arduino-mega2560 \
+                             arduino-uno b-l072z-lrwan1 bluepill calliope-mini \
+                             chronos hifive1 mega-xplained microbit \
+                             msb-430 msb-430h nrf51dongle nrf6310 nucleo-f031k6 \
+                             nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 \
+                             nucleo-f030r8 nucleo-f070rb nucleo-f072rb \
+                             nucleo-f103rb nucleo-f302r8 nucleo-f334r8 \
+                             nucleo-l053r8 spark-core stm32f0discovery \
+                             stm32mindev telosb waspmote-pro \
+                             wsn430-v1_3b wsn430-v1_4 yunjia-nrf51822 z1
 
 # Include packages that pull up and auto-init the link layer.
 # NOTE: 6LoWPAN will be included if IEEE802.15.4 devices are present
diff --git a/examples/nanocoap_server/Makefile b/examples/nanocoap_server/Makefile
index dc53067650a6c1aca18d6cbe24757e3b17c67f45..7b6e5fa1b9a4bb8ed8eea62b0f75e1985fa8f395 100644
--- a/examples/nanocoap_server/Makefile
+++ b/examples/nanocoap_server/Makefile
@@ -7,9 +7,11 @@ BOARD ?= native
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
 
-BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h nucleo-f031k6 nucleo-f042k6 \
-                             nucleo-l031k6 nucleo-f030r8 nucleo-l053r8 stm32f0discovery \
-                             telosb z1 nucleo-f303k8
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos msb-430 msb-430h nucleo-f031k6 \
+                             nucleo-f042k6 nucleo-l031k6 nucleo-f030r8 \
+                             nucleo-f303k8 nucleo-l053r8 stm32f0discovery \
+                             telosb waspmote-pro z1
 
 # Include packages that pull up and auto-init the link layer.
 # NOTE: 6LoWPAN will be included if IEEE802.15.4 devices are present
diff --git a/examples/ndn-ping/Makefile b/examples/ndn-ping/Makefile
index 3ccf83aa24f4c969584a50a25ed05ba4dc399900..8e33bc7ef451c71a3d7fdc50e644333536339975 100644
--- a/examples/ndn-ping/Makefile
+++ b/examples/ndn-ping/Makefile
@@ -7,9 +7,12 @@ BOARD ?= native
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../../
 
-BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h telosb weio wsn430-v1_3b wsn430-v1_4 z1 \
-                             nucleo-f042k6 nucleo-f031k6 nucleo-l031k6 nucleo-f030r8 nucleo-l053r8 \
-                             stm32f0discovery
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos mega-xplained msb-430 msb-430h \
+                             nucleo-f042k6 nucleo-f031k6 nucleo-l031k6 \
+                             nucleo-f030r8 nucleo-l053r8 stm32f0discovery \
+                             telosb waspmote-pro weio wsn430-v1_3b wsn430-v1_4 \
+                             z1
 
 # Include packages that pull up and auto-init the link layer.
 USEMODULE += gnrc_netdev_default
diff --git a/examples/posix_sockets/Makefile b/examples/posix_sockets/Makefile
index b1619169a4e0933285a430c90c2c8a1050968bda..117426781317222a7235834cd750342d00caeeb2 100644
--- a/examples/posix_sockets/Makefile
+++ b/examples/posix_sockets/Makefile
@@ -7,11 +7,14 @@ BOARD ?= native
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
 
-BOARD_INSUFFICIENT_MEMORY := airfy-beacon chronos msb-430 msb-430h nrf51dongle \
-                             nrf6310 nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
-                             nucleo-f030r8 nucleo-f070rb nucleo-f072rb nucleo-f334r8 \
-                             nucleo-l053r8 stm32f0discovery telosb wsn430-v1_3b \
-                             wsn430-v1_4 yunjia-nrf51822 z1 nucleo-f303k8
+BOARD_INSUFFICIENT_MEMORY := airfy-beacon arduino-duemilanove arduino-mega2560 \
+                             arduino-uno chronos mega-xplained msb-430 \
+                             msb-430h nrf51dongle nrf6310 nucleo-f031k6 \
+                             nucleo-f042k6 nucleo-l031k6 nucleo-f030r8 \
+                             nucleo-f070rb nucleo-f072rb nucleo-f334r8 \
+                             nucleo-f303k8 nucleo-l053r8 stm32f0discovery \
+                             telosb wsn430-v1_3b wsn430-v1_4 yunjia-nrf51822 \
+                             waspmote-pro z1
 
 # Include packages that pull up and auto-init the link layer.
 # NOTE: 6LoWPAN will be included if IEEE802.15.4 devices are present
diff --git a/examples/rdcli_simple/Makefile b/examples/rdcli_simple/Makefile
index e1800bafcc63c9f82a37ce9a993d4308909b773a..d2d95afa109386e3b3fc140e2ceaafa549950b08 100644
--- a/examples/rdcli_simple/Makefile
+++ b/examples/rdcli_simple/Makefile
@@ -7,10 +7,12 @@ BOARD ?= native
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
 
-BOARD_INSUFFICIENT_MEMORY := chronos hifive1 msb-430 msb-430h nucleo-f030r8 nucleo-l053r8 \
-                             nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
-                             stm32f0discovery telosb wsn430-v1_3b wsn430-v1_4 \
-                             z1 nucleo-f303k8 nucleo-f334r8
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos hifive1 msb-430 msb-430h nucleo-f030r8 \
+                             nucleo-l053r8 nucleo-f031k6 nucleo-f042k6 \
+                             nucleo-f303k8 nucleo-f334r8 nucleo-l031k6 \
+                             stm32f0discovery telosb waspmote-pro \
+                             wsn430-v1_3b wsn430-v1_4 z1
 
 # Enable GNRC networking
 USEMODULE += gnrc_netdev_default
diff --git a/examples/saul/Makefile b/examples/saul/Makefile
index 7f2ca1e2977e66d03a7bc21fea0325c91a6c9b16..6884f03ca3325906af05da17d83ec5706a706768 100644
--- a/examples/saul/Makefile
+++ b/examples/saul/Makefile
@@ -7,6 +7,8 @@ BOARD ?= native
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 # we want to use SAUL:
 USEMODULE += saul_default
 # include the shell:
diff --git a/tests/bench_timers/Makefile b/tests/bench_timers/Makefile
index 11675236f57fdc087ec0b0a1a15691b836a47c75..700ffdbc90be4fdf771a502ff6d1f00ed9f4cb7c 100644
--- a/tests/bench_timers/Makefile
+++ b/tests/bench_timers/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 # These boards only have a single timer in their periph_conf.h, needs special
 # CFLAGS configuration to build properly
 SINGLE_TIMER_BOARDS = \
diff --git a/tests/bloom_bytes/Makefile b/tests/bloom_bytes/Makefile
index 243a721da17269f33af7fae9288dcfae67440d51..7e6e7aed9cd96e5af2ce885ddde4b216252adfc8 100644
--- a/tests/bloom_bytes/Makefile
+++ b/tests/bloom_bytes/Makefile
@@ -1,7 +1,7 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h telosb wsn430-v1_3b \
-                             wsn430-v1_4 z1
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno chronos \
+                             msb-430 msb-430h telosb wsn430-v1_3b wsn430-v1_4 z1
 
 USEMODULE += hashes
 USEMODULE += bloom
diff --git a/tests/can_trx/Makefile b/tests/can_trx/Makefile
index fab8275842f2c1d183154c27f9aebede53ffa4c5..d887f961a3dcdf1d68c91e725454860026410b68 100644
--- a/tests/can_trx/Makefile
+++ b/tests/can_trx/Makefile
@@ -1,6 +1,8 @@
 export APPLICATION = can_trx
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 USEMODULE += shell
 USEMODULE += shell_commands
 USEMODULE += ps
diff --git a/tests/conn_can/Makefile b/tests/conn_can/Makefile
index 35fde68429a0099ec328a5f0ac9db86e4dbcf00b..959231f6d58da57d20e85424a73d469f657579ec 100644
--- a/tests/conn_can/Makefile
+++ b/tests/conn_can/Makefile
@@ -1,10 +1,12 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos hifive1 msb-430 msb-430h nucleo-f031k6 nucleo-f042k6 \
-                             nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 nucleo-f070rb \
-                             nucleo-f072rb nucleo-f302r8 nucleo-f303re nucleo-f334r8 \
-                             nucleo-l053r8 stm32f0discovery telosb wsn430-v1_3b \
-                             wsn430-v1_4 z1
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos hifive1 msb-430 msb-430h nucleo-f031k6 \
+                             nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 \
+                             nucleo-f030r8 nucleo-f070rb nucleo-f072rb \
+                             nucleo-f302r8 nucleo-f303re nucleo-f334r8 \
+                             nucleo-l053r8 stm32f0discovery telosb \
+                             waspmote-pro wsn430-v1_3b wsn430-v1_4 z1
 
 CFLAGS += -DLOG_LEVEL=LOG_ALL
 
diff --git a/tests/driver_at/Makefile b/tests/driver_at/Makefile
index f68ba0642896a78dc0ff4282fa92c50d7b7d4fb1..a22a778431efac6603d9d0c9482ba964eaa11fa3 100644
--- a/tests/driver_at/Makefile
+++ b/tests/driver_at/Makefile
@@ -1,6 +1,6 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY += nucleo-f031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno nucleo-f031k6
 
 USEMODULE += shell
 USEMODULE += at
diff --git a/tests/driver_at30tse75x/Makefile b/tests/driver_at30tse75x/Makefile
index f759b09afd4e9dc13babeeef68fea04e0478b1a4..760633eecdc9b135eb006dbc9aede08f6a2d037d 100644
--- a/tests/driver_at30tse75x/Makefile
+++ b/tests/driver_at30tse75x/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 USEMODULE += at30tse75x
 USEMODULE += shell
 USEMODULE += shell_commands
diff --git a/tests/driver_at86rf2xx/Makefile b/tests/driver_at86rf2xx/Makefile
index 8b7669a52bd1d11a76685c11ec2e46dc5a9a44ca..c901f654cde7841774ae0e26e3638dacce59d17f 100644
--- a/tests/driver_at86rf2xx/Makefile
+++ b/tests/driver_at86rf2xx/Makefile
@@ -1,7 +1,7 @@
 include ../Makefile.tests_common
 
 # exclude boards with insufficient memory
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno nucleo-f031k6
 
 DISABLE_MODULE += auto_init
 
diff --git a/tests/driver_ata8520e/Makefile b/tests/driver_ata8520e/Makefile
index 207c000bbaca571e85776059ad5232883de8c38c..b1034cf29d5cb8fcb7e3c1eaf0a6c193f83b0098 100644
--- a/tests/driver_ata8520e/Makefile
+++ b/tests/driver_ata8520e/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 USEMODULE += ata8520e
 USEMODULE += shell
 USEMODULE += shell_commands
diff --git a/tests/driver_dynamixel/Makefile b/tests/driver_dynamixel/Makefile
index 02a8bfaf4f84fc286ed7df7f168e9ffc9a1b4e7e..2f62c7eec7d330c6ceb2384ed4e0b7cfb08c7834 100644
--- a/tests/driver_dynamixel/Makefile
+++ b/tests/driver_dynamixel/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 # chronos : USART_1 undeclared
 BOARD_BLACKLIST += chronos
 
diff --git a/tests/driver_enc28j60/Makefile b/tests/driver_enc28j60/Makefile
index c076504011da73ffb1529485bd78a08acef2c5fb..21e3a1f1ac0bf954ce2c0859a3db87c3f9c772cb 100644
--- a/tests/driver_enc28j60/Makefile
+++ b/tests/driver_enc28j60/Makefile
@@ -1,9 +1,10 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := msb-430 msb-430h nucleo-f334r8 nucleo-l053r8 \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             msb-430 msb-430h nucleo-f334r8 nucleo-l053r8 \
                              nucleo-f031k6 nucleo-f042k6 nucleo-f303k8 \
                              nucleo-l031k6 stm32f0discovery telosb \
-                             wsn430-v1_3b wsn430-v1_4 z1
+                             waspmote-pro wsn430-v1_3b wsn430-v1_4 z1
 
 USEMODULE += auto_init_gnrc_netif
 USEMODULE += enc28j60
diff --git a/tests/driver_encx24j600/Makefile b/tests/driver_encx24j600/Makefile
index ecc13d80278f4690a53b2a3989587a26347858cd..9082707993d52cc0052d66e11d5603f546796c14 100644
--- a/tests/driver_encx24j600/Makefile
+++ b/tests/driver_encx24j600/Makefile
@@ -1,9 +1,10 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := msb-430 msb-430h \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             msb-430 msb-430h \
                              nucleo-l053r8 nucleo-f031k6 nucleo-f042k6 \
                              nucleo-l031k6 stm32f0discovery telosb \
-                             wsn430-v1_3b wsn430-v1_4 z1
+                             waspmote-pro wsn430-v1_3b wsn430-v1_4 z1
 
 USEMODULE += auto_init_gnrc_netif
 USEMODULE += encx24j600
diff --git a/tests/driver_feetech/Makefile b/tests/driver_feetech/Makefile
index cb6dc092d2eb575f76fc90774cd1e4aa208cfde1..d2ff4c2dafb00ca79c4a150518faf86033c10a97 100644
--- a/tests/driver_feetech/Makefile
+++ b/tests/driver_feetech/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 # chronos : USART_1 undeclared
 BOARD_BLACKLIST += chronos
 
diff --git a/tests/driver_kw2xrf/Makefile b/tests/driver_kw2xrf/Makefile
index 30d73b498ee117323fcb02f7085581b0a54fde96..1d84f44c1f2abedcb5500f22cf62db01e0e67cc6 100644
--- a/tests/driver_kw2xrf/Makefile
+++ b/tests/driver_kw2xrf/Makefile
@@ -1,7 +1,9 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
-                             nucleo-f334r8 nucleo-l053r8 stm32f0discovery
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
+                             nucleo-f334r8 nucleo-l053r8 stm32f0discovery \
+                             waspmote-pro
 
 USEMODULE += auto_init_gnrc_netif
 USEMODULE += gnrc_netdev_default
diff --git a/tests/driver_nrf24l01p_lowlevel/Makefile b/tests/driver_nrf24l01p_lowlevel/Makefile
index f92e752b5dbf1715a32c1b1c56450bb802831a7d..1d3d63d62c20d3f9c2ea7d6deca90eecc646e79e 100644
--- a/tests/driver_nrf24l01p_lowlevel/Makefile
+++ b/tests/driver_nrf24l01p_lowlevel/Makefile
@@ -1,7 +1,7 @@
 include ../Makefile.tests_common
 
 # exclude boards with insufficient memory
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno nucleo-f031k6
 
 USEMODULE += shell
 USEMODULE += shell_commands
diff --git a/tests/driver_pcd8544/Makefile b/tests/driver_pcd8544/Makefile
index 7ffddd13afec6b78afe269dfd3fbb4005f66f437..7ce87b96fbfe218de9f8ce21aa51827156078ab9 100644
--- a/tests/driver_pcd8544/Makefile
+++ b/tests/driver_pcd8544/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 USEMODULE += shell
 USEMODULE += pcd8544
 
diff --git a/tests/driver_rn2xx3/Makefile b/tests/driver_rn2xx3/Makefile
index 743e9be1364682d374bbda370b92e963a8dd92f7..e7f53a43114aa5ebb1a40fede0f6ecf4186862f5 100644
--- a/tests/driver_rn2xx3/Makefile
+++ b/tests/driver_rn2xx3/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 DRIVER ?= rn2483
 
 USEMODULE += $(DRIVER)
diff --git a/tests/driver_sdcard_spi/Makefile b/tests/driver_sdcard_spi/Makefile
index e1e25a67b3e81436f9ded20316129341f3132fa0..4f434f293941db6610cf2ed067005d98d851c04f 100644
--- a/tests/driver_sdcard_spi/Makefile
+++ b/tests/driver_sdcard_spi/Makefile
@@ -1,7 +1,7 @@
 include ../Makefile.tests_common
 
 # exclude boards with insufficient memory
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno nucleo-f031k6
 
 USEMODULE += sdcard_spi
 USEMODULE += auto_init_storage
diff --git a/tests/driver_sht1x/Makefile b/tests/driver_sht1x/Makefile
index 4c51663c52712d0b4b7e8688d150334739cd430a..0a8abefbb736a6619ab534920405e5b8d3bd1742 100644
--- a/tests/driver_sht1x/Makefile
+++ b/tests/driver_sht1x/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 DRIVER ?= sht11
 BOARD ?= msba2
 
diff --git a/tests/driver_srf02/Makefile b/tests/driver_srf02/Makefile
index 8eab7f2a2d3bf2e774a0940977aaf6ea0a423729..625345ec522bd90a0edecc5b71ddd1806c25f2f0 100644
--- a/tests/driver_srf02/Makefile
+++ b/tests/driver_srf02/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 USEMODULE += xtimer
 USEMODULE += srf02
 USEMODULE += shell
diff --git a/tests/driver_sx127x/Makefile b/tests/driver_sx127x/Makefile
index b64a23ca2dd2051b5d5e47c983f62a1807dee99b..6c449570f874b866ca965c1e37bc2fe34e1af0a1 100644
--- a/tests/driver_sx127x/Makefile
+++ b/tests/driver_sx127x/Makefile
@@ -1,6 +1,6 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno nucleo-f031k6
 
 BOARD ?= nucleo-l152re
 
diff --git a/tests/driver_xbee/Makefile b/tests/driver_xbee/Makefile
index cd0128b011a98f37129400fac00a6c522991fe86..84d09bfa1bc017ac2cf97e52006e9ed79a01802e 100644
--- a/tests/driver_xbee/Makefile
+++ b/tests/driver_xbee/Makefile
@@ -1,6 +1,7 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6 nucleo-f042k6 nucleo-f030r8 nucleo-f334r8 \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno nucleo-f031k6 \
+                             nucleo-f042k6 nucleo-f030r8 nucleo-f334r8 \
                              stm32f0discovery
 
 USEMODULE += xbee
diff --git a/tests/emb6/Makefile b/tests/emb6/Makefile
index 3a5a979ab6fcccf977ac17966907f919021ad258..1063f656935276a6d575fb7b103f3d072c1a7766 100644
--- a/tests/emb6/Makefile
+++ b/tests/emb6/Makefile
@@ -5,9 +5,10 @@ include ../Makefile.tests_common
 # MSP-430 doesn't support C11's atomic functionality yet
 BOARD_BLACKLIST := msb-430 msb-430h telosb wsn430-v1_3b wsn430-v1_4 z1
 
-BOARD_INSUFFICIENT_MEMORY := msb-430 msb-430h nucleo-l031k6 nucleo-f031k6 \
-                             nucleo-f042k6 nucleo-l053r8 stm32f0discovery telosb \
-                             wsn430-v1_3b wsn430-v1_4 z1
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             msb-430 msb-430h nucleo-l031k6 nucleo-f031k6 \
+                             nucleo-f042k6 nucleo-l053r8 stm32f0discovery \
+                             telosb wsn430-v1_3b wsn430-v1_4 z1
 
 USEPKG += emb6
 
diff --git a/tests/gnrc_ipv6_ext/Makefile b/tests/gnrc_ipv6_ext/Makefile
index 92821586f9a4f067812387b87dd01f20cdfbf38d..b33b1217fe6da84f1fab3e48e5fb085b39f152f2 100644
--- a/tests/gnrc_ipv6_ext/Makefile
+++ b/tests/gnrc_ipv6_ext/Makefile
@@ -1,10 +1,11 @@
 # name of your application
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h nucleo-f030r8 \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos msb-430 msb-430h nucleo-f030r8 \
                              nucleo-f031k6 nucleo-f042k6 nucleo-f303k8 \
                              nucleo-f334r8 nucleo-l031k6 nucleo-l053r8 \
-                             stm32f0discovery
+                             stm32f0discovery waspmote-pro
 
 # use Ethernet as link-layer protocol
 USEMODULE += netdev_eth
diff --git a/tests/gnrc_ipv6_nib/Makefile b/tests/gnrc_ipv6_nib/Makefile
index c1a28d2ecd33e490c4ad1fe77ff6add7203b2e10..784070b893135e16755614ac80f94613d141de49 100644
--- a/tests/gnrc_ipv6_nib/Makefile
+++ b/tests/gnrc_ipv6_nib/Makefile
@@ -1,6 +1,7 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             chronos nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
                              telosb wsn430-v1_3b wsn430-v1_4
 
 USEMODULE += gnrc_ipv6
diff --git a/tests/gnrc_ipv6_nib_6ln/Makefile b/tests/gnrc_ipv6_nib_6ln/Makefile
index 01997982d5735c3878a55ccaf00aa1d50c047c1e..e1730d8ccaebda2a89944048f0252730b853cc6e 100644
--- a/tests/gnrc_ipv6_nib_6ln/Makefile
+++ b/tests/gnrc_ipv6_nib_6ln/Makefile
@@ -1,8 +1,9 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos nucleo-f030r8 nucleo-l053r8 nucleo-f031k6 \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos nucleo-f030r8 nucleo-l053r8 nucleo-f031k6 \
                              nucleo-l031k6 nucleo-f042k6 stm32f0discovery \
-                             telosb wsn430-v1_3b wsn430-v1_4
+                             telosb waspmote-pro wsn430-v1_3b wsn430-v1_4
 
 USEMODULE += gnrc_ipv6
 USEMODULE += gnrc_sixlowpan
diff --git a/tests/gnrc_ndp/Makefile b/tests/gnrc_ndp/Makefile
index f4b72ea451b39eb308dd50e8012bde7c87fd0138..3420d0e98c389630b6be7a9e1e0746150260f79d 100644
--- a/tests/gnrc_ndp/Makefile
+++ b/tests/gnrc_ndp/Makefile
@@ -1,7 +1,8 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
-                             telosb wsn430-v1_3b wsn430-v1_4
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
+                             telosb waspmote-pro wsn430-v1_3b wsn430-v1_4
 
 USEMODULE += gnrc_ipv6_nib_router
 USEMODULE += gnrc_ndp
diff --git a/tests/gnrc_netif/Makefile b/tests/gnrc_netif/Makefile
index 51a67dc715908d7512c4fb902961ad1d71957ce9..78b4840958bb301d3c5ee039031a46cefdfc98b6 100644
--- a/tests/gnrc_netif/Makefile
+++ b/tests/gnrc_netif/Makefile
@@ -1,13 +1,16 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := airfy-beacon b-l072z-lrwan1 bluepill calliope-mini \
-                             cc2650-launchpad cc2650stk chronos hifive1 maple-mini \
-                             microbit msb-430 msb-430h nrf51dongle nrf6310 \
-                             nucleo-f030r8 nucleo-f070rb nucleo-f072rb nucleo-f103rb \
-                             nucleo-f302r8 nucleo-f334r8 nucleo-l053r8 nucleo-l073rz \
-                             nucleo-f031k6 nucleo-f042k6 nucleo-f303k8 \
-                             nucleo-l031k6 opencm904 spark-core \
-                             stm32f0discovery stm32mindev telosb \
+BOARD_INSUFFICIENT_MEMORY := airfy-beacon arduino-duemilanove arduino-mega2560 \
+                             arduino-uno b-l072z-lrwan1 bluepill calliope-mini \
+                             cc2650-launchpad cc2650stk chronos hifive1 \
+                             maple-mini mega-xplained microbit \
+                             msb-430 msb-430h nrf51dongle nrf6310 \
+                             nucleo-f030r8 nucleo-f070rb nucleo-f072rb \
+                             nucleo-f103rb nucleo-f302r8 nucleo-f334r8 \
+                             nucleo-l053r8 nucleo-l073rz nucleo-f031k6 \
+                             nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 \
+                             opencm904 spark-core stm32f0discovery stm32mindev \
+                             telosb waspmote-pro \
                              wsn430-v1_3b wsn430-v1_4 yunjia-nrf51822 z1
 
 USEMODULE += embunit
diff --git a/tests/gnrc_sixlowpan/Makefile b/tests/gnrc_sixlowpan/Makefile
index 2aac2e8cf4cb15f5634f20723261d1589bded66f..c46439ecfff6cd1d7b5b279795eca59d4edfac6f 100644
--- a/tests/gnrc_sixlowpan/Makefile
+++ b/tests/gnrc_sixlowpan/Makefile
@@ -1,11 +1,13 @@
 # name of your application
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos hifive1 msb-430 msb-430h nucleo-f030r8 \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos hifive1 msb-430 msb-430h nucleo-f030r8 \
                              nucleo-f031k6 nucleo-f042k6 nucleo-f070rb \
                              nucleo-f070rb nucleo-f072rb nucleo-f303k8 \
                              nucleo-f334r8 nucleo-l031k6 nucleo-l053r8 \
-                             stm32f0discovery telosb wsn430-v1_3b wsn430-v1_4 z1
+                             stm32f0discovery telosb waspmote-pro \
+                             wsn430-v1_3b wsn430-v1_4 z1
 
 # use IEEE 802.15.4 as link-layer protocol
 USEMODULE += netdev_ieee802154
diff --git a/tests/gnrc_sock_dns/Makefile b/tests/gnrc_sock_dns/Makefile
index c207e1052fb3bf5d07e6f238601a1221204ed374..4ef2c75de3f3a70a956e73e63a42daaebd7842e5 100644
--- a/tests/gnrc_sock_dns/Makefile
+++ b/tests/gnrc_sock_dns/Makefile
@@ -2,9 +2,10 @@ include ../Makefile.tests_common
 
 RIOTBASE ?= $(CURDIR)/../..
 
-BOARD_INSUFFICIENT_MEMORY := chronos telosb nucleo-f042k6 nucleo-f031k6 \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos telosb nucleo-f042k6 nucleo-f031k6 \
                              nucleo-f030r8 nucleo-f303k8 nucleo-l053r8 \
-                             nucleo-l031k6 stm32f0discovery z1
+                             nucleo-l031k6 stm32f0discovery waspmote-pro z1
 
 USEMODULE += sock_dns
 USEMODULE += gnrc_sock_udp
diff --git a/tests/gnrc_sock_ip/Makefile b/tests/gnrc_sock_ip/Makefile
index a437af7174e38cfa60985b634b19f10a30ccb27b..1d1b55fe14480e7af1318c8f6d5b0045d845c85f 100644
--- a/tests/gnrc_sock_ip/Makefile
+++ b/tests/gnrc_sock_ip/Makefile
@@ -1,6 +1,7 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos nucleo-f031k6 nucleo-f042k6 nucleo-l031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             chronos nucleo-f031k6 nucleo-f042k6 nucleo-l031k6
 
 USEMODULE += gnrc_sock_ip
 USEMODULE += gnrc_ipv6
diff --git a/tests/gnrc_sock_udp/Makefile b/tests/gnrc_sock_udp/Makefile
index e4b922e6aa9dd1226720c90083cc7d370b88ac5d..7cb3e91142da4b285f49b14a58b4152a2a1ef779 100644
--- a/tests/gnrc_sock_udp/Makefile
+++ b/tests/gnrc_sock_udp/Makefile
@@ -1,6 +1,7 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos nucleo-f031k6 nucleo-f042k6 nucleo-l031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             chronos nucleo-f031k6 nucleo-f042k6 nucleo-l031k6
 
 USEMODULE += gnrc_sock_check_reuse
 USEMODULE += gnrc_sock_udp
diff --git a/tests/gnrc_tcp_client/Makefile b/tests/gnrc_tcp_client/Makefile
index 42f60f09113e407b29fafd4a67e93cb4d95ebcc4..70427a045b6f737792a575ea751378f32de90be1 100644
--- a/tests/gnrc_tcp_client/Makefile
+++ b/tests/gnrc_tcp_client/Makefile
@@ -15,7 +15,7 @@ BOARD_INSUFFICIENT_MEMORY := airfy-beacon arduino-duemilanove arduino-mega2560 \
                              nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 \
                              nucleo-f070rb nucleo-f072rb nucleo-f302r8 nucleo-f334r8 nucleo-l053r8 \
                              sb-430 sb-430h stm32f0discovery telosb \
-                             wsn430-v1_3b wsn430-v1_4 yunjia-nrf51822 z1
+                             waspmote-pro wsn430-v1_3b wsn430-v1_4 yunjia-nrf51822 z1
 
 # Target Address, Target Port and number of Test Cycles
 CFLAGS += -DTARGET_ADDR=\"$(TCP_TARGET_ADDR)\"
diff --git a/tests/gnrc_tcp_server/Makefile b/tests/gnrc_tcp_server/Makefile
index 0ea14225b20e491dd9ab8b973daab9a7a8a4f861..fcbeb7ebcff941dfe8b463c7767a14c4c81eac32 100644
--- a/tests/gnrc_tcp_server/Makefile
+++ b/tests/gnrc_tcp_server/Makefile
@@ -15,7 +15,7 @@ BOARD_INSUFFICIENT_MEMORY := airfy-beacon arduino-duemilanove arduino-mega2560 \
                              nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 \
                              nucleo-f070rb nucleo-f072rb nucleo-f302r8 nucleo-f334r8 nucleo-l053r8 \
                              sb-430 sb-430h stm32f0discovery telosb \
-                             wsn430-v1_3b wsn430-v1_4 yunjia-nrf51822 z1
+                             waspmote-pro wsn430-v1_3b wsn430-v1_4 yunjia-nrf51822 z1
 
 # This has to be the absolute path to the RIOT base directory:
 RIOTBASE ?= $(CURDIR)/../..
diff --git a/tests/gnrc_udp/Makefile b/tests/gnrc_udp/Makefile
index 9496288ee718ca40a5eec6690d9db3bd4187a77f..f5bad0c7c8219fbcd35920269f7fda482fb6a892 100644
--- a/tests/gnrc_udp/Makefile
+++ b/tests/gnrc_udp/Makefile
@@ -1,10 +1,12 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := calliope-mini chronos hifive1 microbit msb-430 msb-430h \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             calliope-mini chronos hifive1 mega-xplained \
+                             microbit msb-430 msb-430h \
                              nucleo-f031k6 nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 \
                              nucleo-f030r8 nucleo-f070rb nucleo-f072rb nucleo-f103rb nucleo-f302r8 \
                              nucleo-f334r8 nucleo-l053r8 spark-core stm32f0discovery telosb \
-                             wsn430-v1_3b wsn430-v1_4 z1
+                             waspmote-pro wsn430-v1_3b wsn430-v1_4 z1
 
 USEMODULE += gnrc_netdev_default
 USEMODULE += auto_init_gnrc_netif
diff --git a/tests/mutex_order/Makefile b/tests/mutex_order/Makefile
index a27f69488a7266d3439edd44a11db42424506fb6..50b19f2d4c5ed25f6d612265d4b76cb3fd861016 100644
--- a/tests/mutex_order/Makefile
+++ b/tests/mutex_order/Makefile
@@ -1,7 +1,8 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 nucleo-f030r8 \
-                             nucleo-l053r8 stm32f0discovery
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
+                             nucleo-f030r8 nucleo-l053r8 stm32f0discovery
 
 # list of boards to run CI tests on
 TEST_ON_CI_WHITELIST += all
diff --git a/tests/netdev_test/Makefile b/tests/netdev_test/Makefile
index eae854b2527453fe1239e22c1ed7f9ef398630c7..c21964f7c7a1026f6d0a34accc3421165734e8ab 100644
--- a/tests/netdev_test/Makefile
+++ b/tests/netdev_test/Makefile
@@ -4,7 +4,7 @@
 CFLAGS += -DNDEBUG
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno nucleo-f031k6
 
 DISABLE_MODULE = auto_init
 
diff --git a/tests/periph_gpio/Makefile b/tests/periph_gpio/Makefile
index 0f7a94789cf928191173146b5e9dfd8e4b1aa3af..d85c7857fa5231d0ba844294420f2f0297a05c5f 100644
--- a/tests/periph_gpio/Makefile
+++ b/tests/periph_gpio/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 FEATURES_REQUIRED = periph_gpio
 FEATURES_REQUIRED = periph_gpio_irq
 
diff --git a/tests/periph_i2c/Makefile b/tests/periph_i2c/Makefile
index 1aa079ca54cea2a669b2cd81d6b5d67fab7a0f8e..1330f7d5e8effcc657b5b9d1ae9060b93ab19b19 100644
--- a/tests/periph_i2c/Makefile
+++ b/tests/periph_i2c/Makefile
@@ -1,6 +1,8 @@
 BOARD ?= samr21-xpro
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 FEATURES_REQUIRED = periph_i2c
 
 USEMODULE += shell
diff --git a/tests/periph_spi/Makefile b/tests/periph_spi/Makefile
index 08c878f652426de55b8a2598c374f52ff8564fcd..41ddca047d91c2f73a320162de5e36d80b9b46a0 100644
--- a/tests/periph_spi/Makefile
+++ b/tests/periph_spi/Makefile
@@ -1,6 +1,8 @@
 BOARD ?= samr21-xpro
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 FEATURES_REQUIRED = periph_spi
 
 USEMODULE += xtimer
diff --git a/tests/periph_timer/Makefile b/tests/periph_timer/Makefile
index 15a83f2b06c361e6ebfc0b4e824c6f499e385e39..ed54ce0ab54eef920a45c03fc9ab3b5096ee4c53 100644
--- a/tests/periph_timer/Makefile
+++ b/tests/periph_timer/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 FEATURES_REQUIRED = periph_timer
 
 TEST_ON_CI_WHITELIST += all
diff --git a/tests/periph_uart/Makefile b/tests/periph_uart/Makefile
index 5047bb56daa82498e3c09a278e41a419e7074c76..41a176e74dec16d5c2be92157f7eeea7c72fd10c 100644
--- a/tests/periph_uart/Makefile
+++ b/tests/periph_uart/Makefile
@@ -1,6 +1,6 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno nucleo-f031k6
 
 FEATURES_REQUIRED = periph_uart
 
diff --git a/tests/pkg_fatfs/Makefile b/tests/pkg_fatfs/Makefile
index b9e0e983985a2c02d8785924eeb762d21076902e..ba471515e514b70c7227e45c7b559243cb31c392 100644
--- a/tests/pkg_fatfs/Makefile
+++ b/tests/pkg_fatfs/Makefile
@@ -2,6 +2,8 @@ include ../Makefile.tests_common
 
 BOARD ?= native
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 FEATURES_OPTIONAL += periph_rtc
 
 # this list is composed of boards that support spi/gpio + native
diff --git a/tests/pkg_fatfs_vfs/Makefile b/tests/pkg_fatfs_vfs/Makefile
index 2df78d9dedf039da450037871e75e72c4b945414..d04164ca8abfda0cd94a0c0c9f5071c1263ea2fb 100644
--- a/tests/pkg_fatfs_vfs/Makefile
+++ b/tests/pkg_fatfs_vfs/Makefile
@@ -25,7 +25,8 @@ else
   USEMODULE += mtd_sdcard
 endif
 
-BOARD_INSUFFICIENT_MEMORY := msb-430 msb-430h nucleo-f031k6 telosb \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             msb-430 msb-430h nucleo-f031k6 telosb \
                              wsn430-v1_3b wsn430-v1_4 z1
 
 # this list is composed of boards with sufficient memory and support spi/gpio + native
diff --git a/tests/pkg_micro-ecc/Makefile b/tests/pkg_micro-ecc/Makefile
index 2278cd1e91e07922760f1448cb446df90d40528c..a9d2935d72ee630338b945c8aa4ba71c8a30452d 100644
--- a/tests/pkg_micro-ecc/Makefile
+++ b/tests/pkg_micro-ecc/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 USEMODULE += hashes
 USEPKG += micro-ecc
 
diff --git a/tests/pkg_microcoap/Makefile b/tests/pkg_microcoap/Makefile
index b7b5479d0aa77ccd69addb36bc27f5ddec53f8be..6f0a3fa187c1a65d395ed758f95c89002e8ef622 100644
--- a/tests/pkg_microcoap/Makefile
+++ b/tests/pkg_microcoap/Makefile
@@ -1,8 +1,10 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h nucleo-f031k6 nucleo-f042k6 \
-                             nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 \
-                             nucleo-l053r8 stm32f0discovery telosb z1
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos msb-430 msb-430h nucleo-f031k6 \
+                             nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 \
+                             nucleo-f030r8 nucleo-l053r8 stm32f0discovery \
+                             telosb waspmote-pro z1
 
 # Include packages that pull up and auto-init the link layer.
 # NOTE: 6LoWPAN will be included if IEEE802.15.4 devices are present
diff --git a/tests/pkg_semtech-loramac/Makefile b/tests/pkg_semtech-loramac/Makefile
index 2a08494661d78609622e6fd543450d8f3c0bfeb1..2324bba50e346c4098683888526d7162c3749e69 100644
--- a/tests/pkg_semtech-loramac/Makefile
+++ b/tests/pkg_semtech-loramac/Makefile
@@ -2,7 +2,8 @@ BOARD ?= b-l072z-lrwan1
 
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6 nucleo-f042k6 nucleo-l031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             nucleo-f031k6 nucleo-f042k6 nucleo-l031k6
 
 BOARD_BLACKLIST := msb-430 msb-430h telosb wsn430-v1_3b wsn430-v1_4 z1
 
diff --git a/tests/pkg_tiny-asn1/Makefile b/tests/pkg_tiny-asn1/Makefile
index e47e3642ac205474f991bb6a5eae31be0a9c4e20..c3f90123bf26aab6f36dc866c12c11daae2b4bfa 100644
--- a/tests/pkg_tiny-asn1/Makefile
+++ b/tests/pkg_tiny-asn1/Makefile
@@ -1,5 +1,7 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno
+
 BOARD_BLACKLIST := wsn430-v1_3b wsn430-v1_4
 
 USEPKG += tiny-asn1
diff --git a/tests/pkg_u8g2/Makefile b/tests/pkg_u8g2/Makefile
index b1bcc9660b77467a391881d2f6fc5019f620b081..3fb3e40a7d7581bf5ae4ad0e09b4398634b7a14b 100644
--- a/tests/pkg_u8g2/Makefile
+++ b/tests/pkg_u8g2/Makefile
@@ -1,6 +1,7 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h nucleo-f031k6 telosb \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             chronos msb-430 msb-430h nucleo-f031k6 telosb \
                              wsn430-v1_3b wsn430-v1_4 z1
 
 USEMODULE += xtimer
diff --git a/tests/pkg_ucglib/Makefile b/tests/pkg_ucglib/Makefile
index 8133b1d6a20bc9bebbb7c9f1deb67ea1b94cdd09..e8bc8a5e155eefca29cbbc474a13f836b733df54 100644
--- a/tests/pkg_ucglib/Makefile
+++ b/tests/pkg_ucglib/Makefile
@@ -1,5 +1,8 @@
 include ../Makefile.tests_common
 
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             waspmote-pro
+
 USEMODULE += xtimer
 
 USEPKG += ucglib
diff --git a/tests/posix_semaphore/Makefile b/tests/posix_semaphore/Makefile
index a23002e7f6c483cca85792265188ec5f81fe4bf1..d8020e8dceb7a79cfd70abba1016ef6e475ce891 100644
--- a/tests/posix_semaphore/Makefile
+++ b/tests/posix_semaphore/Makefile
@@ -1,9 +1,11 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos mbed_lpc1768 msb-430 msb-430h nrf6310 \
-                             nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 nucleo-f030r8 \
-                             nucleo-f303k8 nucleo-f334r8 nucleo-l053r8 \
-                             spark-core stm32f0discovery yunjia-nrf51822
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             chronos mbed_lpc1768 msb-430 msb-430h nrf6310 \
+                             nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
+                             nucleo-f030r8 nucleo-f303k8 nucleo-f334r8 \
+                             nucleo-l053r8 spark-core stm32f0discovery \
+                             yunjia-nrf51822
 
 USEMODULE += fmt
 USEMODULE += posix_semaphore
diff --git a/tests/ps_schedstatistics/Makefile b/tests/ps_schedstatistics/Makefile
index 862dd8b714b22301f357f8a345fee93f3647a108..da3c3cb20012444f7b32ac0b120d75540f08a498 100644
--- a/tests/ps_schedstatistics/Makefile
+++ b/tests/ps_schedstatistics/Makefile
@@ -1,9 +1,10 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h nucleo-f030r8 nucleo-l053r8 \
-                             nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
-                             stm32f0discovery telosb wsn430-v1_3b \
-                             wsn430-v1_4 z1
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             chronos msb-430 msb-430h nucleo-f030r8 \
+                             nucleo-l053r8 nucleo-f031k6 nucleo-f042k6 \
+                             nucleo-l031k6 stm32f0discovery telosb \
+                             wsn430-v1_3b wsn430-v1_4 z1
 
 USEMODULE += shell
 USEMODULE += shell_commands
diff --git a/tests/rmutex/Makefile b/tests/rmutex/Makefile
index aa662e3963aa2a799f2e73f6f13b894ff9cf34c5..f094dbda4929eae0b11fbc75a0825289a0526768 100644
--- a/tests/rmutex/Makefile
+++ b/tests/rmutex/Makefile
@@ -1,7 +1,8 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 nucleo-f030r8 \
-                             nucleo-l053r8 stm32f0discovery
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \
+                             nucleo-f030r8 nucleo-l053r8 stm32f0discovery
 
 TEST_ON_CI_WHITELIST += all
 
diff --git a/tests/slip/Makefile b/tests/slip/Makefile
index d800f18d1178ed2b8f4405dda15ff41a5f302f0b..6ea1647fadfdf344ce7264289664e744a4914468 100644
--- a/tests/slip/Makefile
+++ b/tests/slip/Makefile
@@ -1,8 +1,10 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := msb-430 msb-430h nucleo-f031k6 nucleo-f042k6 \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             msb-430 msb-430h nucleo-f031k6 nucleo-f042k6 \
                              nucleo-l031k6 nucleo-f030r8 nucleo-f303k8 \
-                             nucleo-f334r8 nucleo-l053r8 stm32f0discovery
+                             nucleo-f334r8 nucleo-l053r8 stm32f0discovery \
+                             waspmote-pro
 
 BOARD_BLACKLIST += mips-malta
 
diff --git a/tests/sntp/Makefile b/tests/sntp/Makefile
index 7621932b873d85728ebbd591742060ec759424fb..cd0a9f5bc112139f617f08f6686dd5e83222d167 100644
--- a/tests/sntp/Makefile
+++ b/tests/sntp/Makefile
@@ -1,9 +1,11 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h nucleo-f031k6 \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
+                             chronos msb-430 msb-430h nucleo-f031k6 \
                              nucleo-f042k6 nucleo-l031k6 nucleo-f030r8 \
                              nucleo-f303k8 nucleo-f334r8 nucleo-l053r8 \
-                             stm32f0discovery telosb wsn430-v1_3b wsn430-v1_4 z1
+                             stm32f0discovery telosb waspmote-pro \
+                             wsn430-v1_3b wsn430-v1_4 z1
 
 USEMODULE += sntp
 USEMODULE += gnrc_sock_udp
diff --git a/tests/thread_cooperation/Makefile b/tests/thread_cooperation/Makefile
index 893d1c0c590d52f508a8528dd000a8da8c453f57..a237e853a844277e9291920fbc6b5a0950ab5c0b 100644
--- a/tests/thread_cooperation/Makefile
+++ b/tests/thread_cooperation/Makefile
@@ -1,6 +1,7 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h nucleo-f031k6 \
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             chronos msb-430 msb-430h nucleo-f031k6 \
                              nucleo-f303k8
 
 DISABLE_MODULE += auto_init
diff --git a/tests/thread_msg/Makefile b/tests/thread_msg/Makefile
index de021461e54c2e899d63fc6a533df34b3e121d13..b8ecb2778554f0243078bb68ea3c93ce6c1b0729 100644
--- a/tests/thread_msg/Makefile
+++ b/tests/thread_msg/Makefile
@@ -1,6 +1,7 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6 nucleo-f042k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             nucleo-f031k6 nucleo-f042k6
 
 DISABLE_MODULE += auto_init
 
diff --git a/tests/thread_msg_seq/Makefile b/tests/thread_msg_seq/Makefile
index 6b90efb53824aafb8bd55b3099a3248b945fd7f9..e84269ad9b3202cc8b55c6dc20db186b8a0215b5 100644
--- a/tests/thread_msg_seq/Makefile
+++ b/tests/thread_msg_seq/Makefile
@@ -1,6 +1,7 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6 nucleo-f042k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             nucleo-f031k6 nucleo-f042k6
 
 DISABLE_MODULE += auto_init
 
diff --git a/tests/thread_priority_inversion/Makefile b/tests/thread_priority_inversion/Makefile
index fb68091e216590ae4ba8dd54d8ea2549004c3ebb..19dbce64e1d151afa6032f90b68e7177e440c5a8 100644
--- a/tests/thread_priority_inversion/Makefile
+++ b/tests/thread_priority_inversion/Makefile
@@ -1,7 +1,8 @@
 include ../Makefile.tests_common
 
+
 USEMODULE += xtimer
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno nucleo-f031k6
 
 include $(RIOTBASE)/Makefile.include
diff --git a/tests/xtimer_drift/Makefile b/tests/xtimer_drift/Makefile
index 0a59269b7140ac30b7f83a77510fb3ce9266dd93..78cb3c36c99650c5a9ef65e116089caf203294cc 100644
--- a/tests/xtimer_drift/Makefile
+++ b/tests/xtimer_drift/Makefile
@@ -1,6 +1,7 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6 nucleo-f042k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             nucleo-f031k6 nucleo-f042k6
 
 USEMODULE += xtimer
 
diff --git a/tests/xtimer_longterm/Makefile b/tests/xtimer_longterm/Makefile
index 0a59269b7140ac30b7f83a77510fb3ce9266dd93..78cb3c36c99650c5a9ef65e116089caf203294cc 100644
--- a/tests/xtimer_longterm/Makefile
+++ b/tests/xtimer_longterm/Makefile
@@ -1,6 +1,7 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6 nucleo-f042k6
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno \
+                             nucleo-f031k6 nucleo-f042k6
 
 USEMODULE += xtimer
 
diff --git a/tests/xtimer_periodic_wakeup/Makefile b/tests/xtimer_periodic_wakeup/Makefile
index c5da8cf3234bd4141fc60c22e30dcac11abc7b2f..1789adbfdd1984def2b32977c77bd19feecec566 100644
--- a/tests/xtimer_periodic_wakeup/Makefile
+++ b/tests/xtimer_periodic_wakeup/Makefile
@@ -1,6 +1,6 @@
 include ../Makefile.tests_common
 
-BOARD_INSUFFICIENT_MEMORY := chronos
+BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-uno chronos
 
 USEMODULE += xtimer