From: Eric Andersen Date: Sun, 23 Jan 2005 11:16:11 +0000 (-0000) Subject: Patch from gtj: http://bugs.uclibc.org/view.php?id=40 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=dda90723ce4a6d8c84dbf7c66ef8b2c4e5d67b2c;p=buildroot.git Patch from gtj: bugs.uclibc.org/view.php?id=40 0000040: Adds options to jffs2 filesystem creation Brings jffs2 up to the 20041007 build level so it will compile with both 2.4 and 2.6 kernels. Adds ability to specify eraseblock and pad sizes, permissions squash, big/little endian and device table in the configuration. Also adds capability to copy the resulting image to a secondary location like a tftp server's root directory. mtd.patch adds capabilities of the previously attached patch plus allows you to compile a version of the utilities to run on the target system. So now there's a set of config options under package to compile the utils for distribution to the target and a set of config options under target to create a jffs2 filesystem. --- diff --git a/package/mtd/Config.in b/package/mtd/Config.in new file mode 100644 index 0000000000..a6cd22d62b --- /dev/null +++ b/package/mtd/Config.in @@ -0,0 +1,99 @@ + +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 + + + diff --git a/package/mtd/Makefile.in b/package/mtd/Makefile.in new file mode 100644 index 0000000000..d8c9cd7aa1 --- /dev/null +++ b/package/mtd/Makefile.in @@ -0,0 +1,3 @@ +ifeq ($(strip $(BR2_PACKAGE_MTD)),y) +TARGETS+=mtd +endif diff --git a/package/mtd/mtd.mk b/package/mtd/mtd.mk new file mode 100644 index 0000000000..ea1cf31f15 --- /dev/null +++ b/package/mtd/mtd.mk @@ -0,0 +1,98 @@ +############################################################# +# +# 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) + + diff --git a/target/jffs2/Config.in b/target/jffs2/Config.in index 0d79dd1ffa..4f5edac4c8 100644 --- a/target/jffs2/Config.in +++ b/target/jffs2/Config.in @@ -1,6 +1,60 @@ -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. + + diff --git a/target/jffs2/jffs2root.mk b/target/jffs2/jffs2root.mk index ee23d9b41b..3e64a62d59 100644 --- a/target/jffs2/jffs2root.mk +++ b/target/jffs2/jffs2root.mk @@ -1,49 +1,68 @@ ############################################################# # -# 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)