From dda90723ce4a6d8c84dbf7c66ef8b2c4e5d67b2c Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Sun, 23 Jan 2005 11:16:11 +0000 Subject: Patch from gtj: http://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. --- target/jffs2/Config.in | 58 +++++++++++++++++++++++++++++++++++-- target/jffs2/jffs2root.mk | 73 +++++++++++++++++++++++++++++------------------ 2 files changed, 102 insertions(+), 29 deletions(-) (limited to 'target/jffs2') diff --git a/target/jffs2/Config.in b/target/jffs2/Config.in index 0d79dd1ff..4f5edac4c 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 ee23d9b41..3e64a62d5 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) -- cgit v1.2.3