diff --git a/package/utils/mdadm/Makefile b/package/utils/mdadm/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..af160481365bdb09ea6460f62e40e21f136f6863
--- /dev/null
+++ b/package/utils/mdadm/Makefile
@@ -0,0 +1,50 @@
+#
+# Copyright (C) 2008-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=mdadm
+PKG_VERSION:=3.2.5
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=@KERNEL/linux/utils/raid/mdadm
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_MD5SUM:=2fd33dedcdb06f0d1461f50ddabb7e4a
+
+PKG_MAINTAINER:=Felix Fietkau <nbd@openwrt.org>
+
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/mdadm
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=A tool for managing Soft RAID under Linux
+  URL:=http://www.kernel.org/pub/linux/utils/raid/mdadm/
+  DEPENDS:=+@KERNEL_DIRECT_IO
+endef
+
+define Package/mdadm/description
+ A tool for managing Linux Software RAID arrays.
+endef
+
+define Build/Compile
+	$(MAKE) -C $(PKG_BUILD_DIR) \
+		CC="$(TARGET_CC)" \
+		CFLAGS="$(TARGET_CFLAGS) -DHAVE_STDINT_H" \
+		LDFLAGS="$(TARGET_LDFLAGS)" \
+		mdadm mdassemble
+endef
+
+define Package/mdadm/install
+	$(INSTALL_DIR) $(1)/sbin
+	$(INSTALL_BIN) $(PKG_BUILD_DIR)/mdadm $(1)/sbin
+	$(INSTALL_BIN) $(PKG_BUILD_DIR)/mdassemble $(1)/sbin
+endef
+
+$(eval $(call BuildPackage,mdadm))
diff --git a/package/utils/mdadm/patches/000-compile.patch b/package/utils/mdadm/patches/000-compile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6d47489163b1d709235ab7a20269f5a0d93a1982
--- /dev/null
+++ b/package/utils/mdadm/patches/000-compile.patch
@@ -0,0 +1,11 @@
+--- a/sha1.h
++++ b/sha1.h
+@@ -26,8 +26,6 @@
+ # include <limits.h>
+ #endif
+ 
+-#include "ansidecl.h"
+-
+ /* The following contortions are an attempt to use the C preprocessor
+    to determine an unsigned integral type that is 32 bits wide.  An
+    alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
diff --git a/package/utils/mdadm/patches/100-cross_compile.patch b/package/utils/mdadm/patches/100-cross_compile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..8709e57816baebe9eadbc5ef4fae28bc40076200
--- /dev/null
+++ b/package/utils/mdadm/patches/100-cross_compile.patch
@@ -0,0 +1,19 @@
+--- a/Makefile
++++ b/Makefile
+@@ -76,7 +76,6 @@ FAILED_SLOTS_DIR = /run/mdadm/failed-slo
+ DIRFLAGS = -DMAP_DIR=\"$(MAP_DIR)\" -DMAP_FILE=\"$(MAP_FILE)\"
+ DIRFLAGS += -DMDMON_DIR=\"$(MDMON_DIR)\"
+ DIRFLAGS += -DFAILED_SLOTS_DIR=\"$(FAILED_SLOTS_DIR)\"
+-CFLAGS = $(CWFLAGS) $(CXFLAGS) -DSendmail=\""$(MAILCMD)"\" $(CONFFILEFLAGS) $(DIRFLAGS)
+ 
+ # The glibc TLS ABI requires applications that call clone(2) to set up
+ # TLS data structures, use pthreads until mdmon implements this support
+@@ -183,7 +182,7 @@ raid6check : raid6check.o mdadm.h $(CHEC
+ 
+ mdassemble : $(ASSEMBLE_SRCS) $(INCL)
+ 	rm -f $(OBJS)
+-	$(DIET_GCC) $(ASSEMBLE_FLAGS) -o mdassemble $(ASSEMBLE_SRCS)  $(STATICSRC)
++	$(CC) $(ASSEMBLE_FLAGS) -o mdassemble $(ASSEMBLE_SRCS)  $(STATICSRC)
+ 
+ mdassemble.static : $(ASSEMBLE_SRCS) $(INCL)
+ 	rm -f $(OBJS)