--- /dev/null
+
+menuconfig BR2_PACKAGE_MTD
+       bool "mtd/jffs2 utilities"
+       default n
+       help
+         Build mtd/jffs utilities
+
+config BR2_PACKAGE_MTD_FLASH_ERASE
+       bool "flash_erase"
+       default y
+       depends on BR2_PACKAGE_MTD
+       
+config BR2_PACKAGE_MTD_FLASH_ERASEASLL
+       bool "flash_eraseall"
+       default y
+       depends on BR2_PACKAGE_MTD
+
+config BR2_PACKAGE_MTD_FLASH_INFO
+       bool "flash_info"
+       default y
+       depends on BR2_PACKAGE_MTD
+
+config BR2_PACKAGE_MTD_FLASH_LOCK
+       bool "flash_loco"
+       default y
+       depends on BR2_PACKAGE_MTD
+
+config BR2_PACKAGE_MTD_FLASH_UNLOCK
+       bool "flash_unlock"
+       default y
+       depends on BR2_PACKAGE_MTD
+
+config BR2_PACKAGE_MTD_FLASHCP
+       bool "flashcp"
+       default y
+       depends on BR2_PACKAGE_MTD
+
+config BR2_PACKAGE_MTD_JFFS2DUMP
+       bool "jffs2dump"
+       default y
+       depends on BR2_PACKAGE_MTD
+
+config BR2_PACKAGE_MTD_FTL_CHECK
+       bool "ftl_check"
+       default y
+       depends on BR2_PACKAGE_MTD
+
+config BR2_PACKAGE_MTD_FTL_FORMAT
+       bool "ftl_format"
+       default y
+       depends on BR2_PACKAGE_MTD
+       
+config BR2_PACKAGE_MTD_NFTL_FORMAT
+       bool "nftl_format"
+       default y
+       depends on BR2_PACKAGE_MTD
+       
+config BR2_PACKAGE_MTD_NFTLDUMP
+       bool "nftldump"
+       default y
+       depends on BR2_PACKAGE_MTD
+       
+config BR2_PACKAGE_MTD_MKFSJFFS2
+       bool "mkfs.jffs2"
+       default y
+       depends on BR2_PACKAGE_MTD
+       
+config BR2_PACKAGE_MTD_MKFSJFFS
+       bool "mkfs.jffs"
+       default y
+       depends on BR2_PACKAGE_MTD
+
+config BR2_PACKAGE_MTD_NANDDUMP
+       bool "nanddump"
+       default y
+       depends on BR2_PACKAGE_MTD
+       
+config BR2_PACKAGE_MTD_NANDWRITE
+       bool "nandwrite"
+       default y
+       depends on BR2_PACKAGE_MTD
+       
+config BR2_PACKAGE_MTD_MTD_DEBUG
+       bool "mtd_debug"
+       default y
+       depends on BR2_PACKAGE_MTD
+       
+config BR2_PACKAGE_MTD_DOCFDISK
+       bool "docfdisk"
+       default y
+       depends on BR2_PACKAGE_MTD
+       
+config BR2_PACKAGE_MTD_DOC_LOADBIOS
+       bool "doc_loadbios"
+       default y
+       depends on BR2_PACKAGE_MTD
+       
+
+       
 
--- /dev/null
+ifeq ($(strip $(BR2_PACKAGE_MTD)),y)
+TARGETS+=mtd
+endif
 
--- /dev/null
+#############################################################
+#
+# mtd provides jffs2 utilities
+#
+#############################################################
+MTD_SOURCE=mtd_20041007.orig.tar.gz
+MTD_SITE=http://ftp.debian.org/debian/pool/main/m/mtd
+
+#############################################################
+#
+# Build mkfs.jffs2 for use on the local host system if
+# needed by target/jffs2root.
+# If /sbin/mkfs.jffs2 already exists, no make is needed
+#
+#############################################################
+MKFS_JFFS2=$(shell which mkfs.jffs2 2>/dev/null || echo $(STAGING_DIR)/bin/mkfs.jffs2)
+
+MTD_HOST_DIR   :=      $(TOOL_BUILD_DIR)/mtd-20041007.orig
+
+$(DL_DIR)/$(MTD_SOURCE):
+       $(WGET) -P $(DL_DIR) $(MTD_SITE)/$(MTD_SOURCE)
+
+$(MTD_HOST_DIR)/.unpacked: $(DL_DIR)/$(MTD_SOURCE)
+       zcat $(DL_DIR)/$(MTD_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) -
+       touch $(MTD_HOST_DIR)/.unpacked
+
+$(MTD_HOST_DIR)/util/mkfs.jffs2: $(MTD_HOST_DIR)/.unpacked
+       CFLAGS=-I$(LINUX_HEADERS_DIR)/include \
+               $(MAKE) LINUXDIR=$(LINUX_DIR) -C $(MTD_HOST_DIR)/util mkfs.jffs2
+       
+$(STAGING_DIR)/bin/mkfs.jffs2: $(MTD_HOST_DIR)/util/mkfs.jffs2
+       cp -f $(MTD_HOST_DIR)/util/mkfs.jffs2 $(STAGING_DIR)/bin
+       
+mtd-host: $(MKFS_JFFS2)
+
+mtd-host-source: $(DL_DIR)/$(MTD_SOURCE)
+
+mtd-host-clean:
+       -$(MAKE) -C $(MTD_HOST_DIR) clean
+
+mtd-host-dirclean:
+       rm -rf $(MTD_HOST_DIR)
+
+#############################################################
+#
+# build mtd for use on the target system
+#
+#############################################################
+MTD_DIR:=$(BUILD_DIR)/mtd-20041007.orig
+
+$(MTD_DIR)/.unpacked: $(DL_DIR)/$(MTD_SOURCE)
+       zcat $(DL_DIR)/$(MTD_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
+       touch $(MTD_DIR)/.unpacked
+
+MTD_TARGETS_n :=
+MTD_TARGETS_y :=
+
+MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_ERASE)             += flash_erase
+MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_ERASEALL)  += flash_eraseall
+MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_INFO)              += flash_info
+MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_LOCK)              += flash_lock
+MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASH_UNLOCK)    += flash_unlock
+MTD_TARGETS_$(BR2_PACKAGE_MTD_FLASHCP)                         += flashcp
+MTD_TARGETS_$(BR2_PACKAGE_MTD_MKFSJFFS2)               += mkfs.jffs2
+MTD_TARGETS_$(BR2_PACKAGE_MTD_MKFSJFFS)                        += mkfs.jffs
+MTD_TARGETS_$(BR2_PACKAGE_MTD_JFFS2DUMP)               += jffs2dump
+MTD_TARGETS_$(BR2_PACKAGE_MTD_FTL_CHECK)               += ftl_check
+MTD_TARGETS_$(BR2_PACKAGE_MTD_FTL_FORMAT)              += ftl_format
+MTD_TARGETS_$(BR2_PACKAGE_MTD_NFTLDUMP)                        += nftldump
+MTD_TARGETS_$(BR2_PACKAGE_MTD_NFTL_FORMAT)             += nftl_format
+MTD_TARGETS_$(BR2_PACKAGE_MTD_NANDDUMPP)               += nanddump
+MTD_TARGETS_$(BR2_PACKAGE_MTD_NANDWRITE)               += nandwrite
+MTD_TARGETS_$(BR2_PACKAGE_MTD_MTD_DEBUG)               += mtd_debug
+MTD_TARGETS_$(BR2_PACKAGE_MTD_DOCFDISK)                        += docfdisk
+MTD_TARGETS_$(BR2_PACKAGE_MTD_DOC_LOADBIOS)    += doc_loadbios
+
+MTD_BUILD_TARGETS := $(addprefix $(MTD_DIR)/util/, $(MTD_TARGETS_y))
+
+$(MTD_BUILD_TARGETS): $(MTD_DIR)/.unpacked
+       CFLAGS="-I$(LINUX_HEADERS_DIR)/include $(TARGET_CFLAGS)" \
+       $(MAKE) CC=$(TARGET_CC) LINUXDIR=$(LINUX_DIR) -C $(MTD_DIR)/util
+
+MTD_TARGETS := $(addprefix $(TARGET_DIR)/usr/sbin/, $(MTD_TARGETS_y))
+
+$(MTD_TARGETS): $(TARGET_DIR)/usr/sbin/% : $(MTD_DIR)/util/%
+       cp -f $< $@
+
+mtd: $(MTD_TARGETS)
+
+mtd-source: $(DL_DIR)/$(MTD_SOURCE)
+
+mtd-clean:
+       -$(MAKE) -C $(MTD_DIR) clean
+       
+mtd-dirclean:
+       rm -rf $(MTD_DIR)
+
+
 
-config BR2_TARGET_ROOTFS_JFFS2
-       bool "jffs2 root filesystem for the target device"
+
+menuconfig BR2_TARGET_ROOTFS_JFFS2
+       bool "Build jffs2 root filesystem for the target device"
        default n
        help
          Build a jffs2 root filesystem
 
+config BR2_TARGET_ROOTFS_JFFS2_EBSIZE
+       hex "Erase block size"
+       depends on BR2_TARGET_ROOTFS_JFFS2
+       default 0x20000
+       
+config BR2_TARGET_ROOTFS_JFFS2_PAD
+       bool "Pad output"
+       depends on BR2_TARGET_ROOTFS_JFFS2
+       
+config BR2_TARGET_ROOTFS_JFFS2_PADSIZE
+       hex "Pad output size (0x0 = to end of EB)"
+       depends on BR2_TARGET_ROOTFS_JFFS2_PAD
+       default 0x0
+       help
+               Set to 0x0 to pad to end of erase block.        
+       
+choice
+       prompt "Endianess"
+       default BR2_TARGET_ROOTFS_JFFS2_LE
+       depends on BR2_TARGET_ROOTFS_JFFS2
+       
+config BR2_TARGET_ROOTFS_JFFS2_LE
+       bool "little-endian"
+       depends on      BR2_TARGET_ROOTFS_JFFS2
+       
+config BR2_TARGET_ROOTFS_JFFS2_BE
+       bool "big-endian"
+       depends on      BR2_TARGET_ROOTFS_JFFS2
+       
+endchoice
+
+config BR2_TARGET_ROOTFS_JFFS2_SQUASH
+       bool "Make all files be owned by root"
+       depends on      BR2_TARGET_ROOTFS_JFFS2
+
+config BR2_TARGET_ROOTFS_JFFS2_DEVFILE
+       string "Location of device table file"
+       depends on BR2_TARGET_ROOTFS_JFFS2
+       default "target/default/device_table.txt"
+       
+config BR2_TARGET_ROOTFS_JFFS2_OUTPUT
+       string "Output File"
+       depends on BR2_TARGET_ROOTFS_JFFS2
+       default "$(IMAGE).jffs2"
+       
+config BR2_TARGET_ROOTFS_JFFS2_COPYTO
+       string "also copy the image to..."
+       depends on      BR2_TARGET_ROOTFS_JFFS2
+       default ""
+       help
+               Copies the resulting image to a secondary location.
+               
+       
 
 #############################################################
 #
-# mtd provides us with mkfs.jffs2, to target JFFS2 filesystems
+# Build the jffs2 root filesystem image
 #
 #############################################################
 
-MTD_DIR:=$(BUILD_DIR)/mtd-20011217
-MTD_SOURCE=mtd_20011217.orig.tar.gz
-MTD_SITE=http://ftp.debian.org/debian/pool/main/m/mtd
-MKFS_JFFS2=$(shell which mkfs.jffs2 2>/dev/null || echo $(MTD_DIR)/util/mkfs.jffs2)
+JFFS2_OPTS := -e $(strip $(BR2_TARGET_ROOTFS_JFFS2_EBSIZE))
 
-$(DL_DIR)/$(MTD_SOURCE):
-       $(WGET) -P $(DL_DIR) $(MTD_SITE)/$(MTD_SOURCE)
+ifeq ($(strip $(BR2_TARGET_ROOTFS_JFFS2_PAD)),y)
+JFFS2_OPTS += -p 
+ifneq ($(strip $(BR2_TARGET_ROOTFS_JFFS2_PADSIZE)),0x0)
+JFFS2_OPTS += $(strip $(BR2_TARGET_ROOTFS_JFFS2_PADSIZE))
+endif
+endif
 
-$(MTD_DIR)/.unpacked: $(DL_DIR)/$(MTD_SOURCE)
-       zcat $(DL_DIR)/$(MTD_SOURCE) | tar -C $(BUILD_DIR) -xvf -
-       touch $(MTD_DIR)/.unpacked
+ifeq ($(strip $(BR2_TARGET_ROOTFS_JFFS2_SQUASH)),y)
+JFFS2_OPTS += -q
+endif
 
-$(MTD_DIR)/util/mkfs.jffs2: $(MTD_DIR)/.unpacked
-       CFLAGS=-I$(LINUX_HEADERS_DIR)/include $(MAKE) LINUXDIR=$(LINUX_DIR) -C $(MTD_DIR)/util
+ifeq ($(strip $(BR2_TARGET_ROOTFS_JFFS2_LE)),y)
+JFFS2_OPTS += -l
+endif
 
-mtd: $(MKFS_JFFS2)
+ifeq ($(strip $(BR2_TARGET_ROOTFS_JFFS2_BE)),y)
+JFFS2_OPTS += -b
+endif
 
+JFFS2_DEVFILE = $(strip $(subst ",,$(BR2_TARGET_ROOTFS_JFFS2_DEVFILE)))
+ifneq ($(JFFS2_DEVFILE),)
+JFFS2_OPTS += -D $(JFFS2_DEVFILE)
+endif
+
+JFFS2_TARGET := $(subst ",,$(BR2_TARGET_ROOTFS_JFFS2_OUTPUT))
 
-#############################################################
 #
-# Build the jffs2 root filesystem image
+# mtd-host is a dependency which builds a local copy of mkfs.jffs2 if it's needed.
+# the actual build is done from package/mtd/mtd.mk and it sets the
+# value of MKFS_JFFS2 to either the previously installed copy or the one
+# just built.
 #
-#############################################################
-
-jffs2root: mtd
-       #-@find $(TARGET_DIR)/lib -type f -name \*.so\* | xargs $(STRIP) --strip-unneeded 2>/dev/null || true;
+$(JFFS2_TARGET): mtd-host
        -@find $(TARGET_DIR) -type f -perm +111 | xargs $(STRIP) 2>/dev/null || true;
        @rm -rf $(TARGET_DIR)/usr/man
+       @rm -rf $(TARGET_DIR)/usr/share/man
        @rm -rf $(TARGET_DIR)/usr/info
-       $(MKFS_JFFS2) --pad --little-endian --squash -e 0x20000 \
-               -D target/default/device_table.txt -d $(TARGET_DIR) \
-               -o $(IMAGE).jffs2
+       $(MKFS_JFFS2) \
+               $(JFFS2_OPTS) \
+               -d $(BUILD_DIR)/root \
+               -o $(JFFS2_TARGET)
+       @ls -l $(JFFS2_TARGET)
+
+JFFS2_COPYTO := $(strip $(subst ",,$(BR2_TARGET_ROOTFS_JFFS2_COPYTO)))
+
+jffs2root: $(JFFS2_TARGET)
+ifneq ($(JFFS2_COPYTO),)
+       @cp -f $(JFFS2_TARGET) $(JFFS2_COPYTO)
+endif  
 
-jffs2root-source: $(DL_DIR)/$(MTD_SOURCE)
+jffs2root-source: mtd-host-source
 
-jffs2root-clean:
-       -$(MAKE) -C $(MTD_DIR) clean
+jffs2root-clean: mtd-host-clean
+       -rm -f $(JFFS2_TARGET)
 
-jffs2root-dirclean:
-       rm -rf $(MTD_DIR)
+jffs2root-dirclean: mtd-host-dirclean
+       -rm -f $(JFFS2_TARGET)