summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>2010-03-10 22:30:06 +0100
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>2010-04-09 11:04:36 +0200
commit0585241505cfaddc9db6ae92739bdfb5ce5f9794 (patch)
tree8fb56f7d4ba91b0384e522c10ed9dbdb77dfe7ec /fs
parent325bfd1cbae03fe286796d3fa7de7c0a3227f7a5 (diff)
Move all filesystem generation code to fs/
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/Config.in30
-rw-r--r--fs/cloop/Config.in10
-rw-r--r--fs/cloop/cloop.mk13
-rw-r--r--fs/common.mk70
-rw-r--r--fs/cpio/Config.in40
-rw-r--r--fs/cpio/cpioroot.mk18
-rw-r--r--fs/cramfs/Config.in6
-rw-r--r--fs/cramfs/cramfs.mk22
-rw-r--r--fs/ext2/Config.in61
-rw-r--r--fs/ext2/ext2root.mk40
-rw-r--r--fs/initramfs/Config.in15
-rw-r--r--fs/initramfs/gen_initramfs_list.sh203
-rw-r--r--fs/initramfs/initramfs.mk18
-rw-r--r--fs/iso9660/Config.in16
-rw-r--r--fs/iso9660/iso9660.mk49
-rw-r--r--fs/iso9660/menu.lst11
-rw-r--r--fs/jffs2/Config.in117
-rw-r--r--fs/jffs2/jffs2root.mk61
-rw-r--r--fs/romfs/Config.in5
-rw-r--r--fs/romfs/romfs.mk15
-rw-r--r--fs/squashfs/Config.in4
-rw-r--r--fs/squashfs/squashfsroot.mk13
-rw-r--r--fs/tar/Config.in47
-rw-r--r--fs/tar/tarroot.mk13
-rw-r--r--fs/ubifs/Config.in88
-rw-r--r--fs/ubifs/ubifsroot.mk25
26 files changed, 1010 insertions, 0 deletions
diff --git a/fs/Config.in b/fs/Config.in
new file mode 100644
index 000000000..f885c52e7
--- /dev/null
+++ b/fs/Config.in
@@ -0,0 +1,30 @@
+menu "Target filesystem options"
+
+config BR2_ROOTFS_POST_BUILD_SCRIPT
+ string "Custom script to run before packing files"
+ default ""
+ help
+ Specify a script to be run after the build has finished and before
+ the BR2 starts packing the files into selected packages.
+
+ This gives users the oportunity to do board-specific cleanups,
+ add-ons and the like, so the generated files can be used directly
+ without further processing.
+
+ The script is called with the target directory name as first and
+ only argument. Make sure the exit code of that script is 0,
+ otherwise make will stop after calling it.
+
+source "fs/cramfs/Config.in"
+source "fs/cloop/Config.in"
+source "fs/ext2/Config.in"
+source "fs/jffs2/Config.in"
+source "fs/ubifs/Config.in"
+source "fs/squashfs/Config.in"
+source "fs/tar/Config.in"
+source "fs/cpio/Config.in"
+source "fs/iso9660/Config.in"
+source "fs/initramfs/Config.in"
+source "fs/romfs/Config.in"
+
+endmenu
diff --git a/fs/cloop/Config.in b/fs/cloop/Config.in
new file mode 100644
index 000000000..3e01067a1
--- /dev/null
+++ b/fs/cloop/Config.in
@@ -0,0 +1,10 @@
+config BR2_TARGET_ROOTFS_CLOOP
+ bool "cloop root filesystem for the target device"
+ help
+ Build a cloop root filesystem
+
+ cloop is a Linux kernel module that enables compressed
+ loopback filesystem support. With it you can mount a
+ compressed filesystem like a block device and seamlessly
+ decompress its data while accessing it. The majority of the
+ software on an LNX-BBC is accessed in this fashion.
diff --git a/fs/cloop/cloop.mk b/fs/cloop/cloop.mk
new file mode 100644
index 000000000..c1d6abb80
--- /dev/null
+++ b/fs/cloop/cloop.mk
@@ -0,0 +1,13 @@
+#############################################################
+#
+# Build the compressed loop root filesystem image
+#
+#############################################################
+
+ROOTFS_CLOOP_DEPENDENCIES = host-cloop host-cdrkit
+
+define ROOTFS_CLOOP_CMD
+ $(HOST_DIR)/usr/bin/genisoimage -r $(TARGET_DIR) | $(HOST_DIR)/usr/bin/create_compressed_fs - 65536 > $$@
+endef
+
+$(eval $(call ROOTFS_TARGET,cloop)) \ No newline at end of file
diff --git a/fs/common.mk b/fs/common.mk
new file mode 100644
index 000000000..fa6afd94d
--- /dev/null
+++ b/fs/common.mk
@@ -0,0 +1,70 @@
+#
+# Macro that builds the needed Makefile target to create a root
+# filesystem image.
+#
+# The following variable must be defined before calling this macro
+#
+# ROOTFS_$(FSTYPE)_CMD, the command that generates the root
+# filesystem image. A single command is allowed. The filename of the
+# filesystem image that it must generate is $$@.
+#
+# The following variables can optionaly be defined
+#
+# ROOTFS_$(FSTYPE)_DEPENDENCIES, the list of dependencies needed to
+# build the root filesystem (usually host tools)
+#
+# ROOTFS_$(FSTYPE)_PRE_GEN_HOOKS, a list of hooks to call before
+# generating the filesystem image
+#
+# ROOTFS_$(FSTYPE)_POST_GEN_HOOKS, a list of hooks to call after
+# generating the filesystem image
+#
+# In terms of configuration option, this macro assumes that the
+# BR2_TARGET_ROOTFS_$(FSTYPE) config option allows to enable/disable
+# the generation of a filesystem image of a particular type. If
+# configura options BR2_TARGET_ROOTFS_$(FSTYPE)_GZIP,
+# BR2_TARGET_ROOTFS_$(FSTYPE)_BZIP2 or
+# BR2_TARGET_ROOTFS_$(FSTYPE)_LZMA exist and are enabled, then the
+# macro will automatically generate a compressed filesystem image.
+
+FAKEROOT_SCRIPT = $(BUILD_DIR)/_fakeroot.fs
+
+define ROOTFS_TARGET_INTERNAL
+
+$(BINARIES_DIR)/rootfs.$(1): $(ROOTFS_$(2)_DEPENDENCIES) host-fakeroot makedevs $(if $(BR2_TARGET_ROOTFS_$(2)_LZMA),host-lzma)
+ @$(call MESSAGE,"Generating root filesystem image rootfs.$(1)")
+ $(foreach hook,$(ROOTFS_$(2)_PRE_GEN_HOOKS),$(call $(hook))$(sep))
+ rm -f $(FAKEROOT_SCRIPT)
+ touch $(BUILD_DIR)/.fakeroot.00000
+ cat $(BUILD_DIR)/.fakeroot* > $(FAKEROOT_SCRIPT)
+ echo "chown -R 0:0 $(TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
+ifneq ($(TARGET_DEVICE_TABLE),)
+ echo "$(HOST_DIR)/usr/bin/makedevs -d $(TARGET_DEVICE_TABLE) $(TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
+endif
+ echo "$(ROOTFS_$(2)_CMD)" >> $(FAKEROOT_SCRIPT)
+ chmod a+x $(FAKEROOT_SCRIPT)
+ $(HOST_DIR)/usr/bin/fakeroot -- $(FAKEROOT_SCRIPT)
+ -@rm -f $(FAKEROOT_SCRIPT)
+ $(foreach hook,$(ROOTFS_$(2)_POST_GEN_HOOKS),$(call $(hook))$(sep))
+ifeq ($$(BR2_TARGET_ROOTFS_$(2)_GZIP),y)
+ gzip -9 -c $$@ > $$@.gz
+endif
+ifeq ($$(BR2_TARGET_ROOTFS_$(2)_BZIP2),y)
+ bzip2 -9 -c $$@ > $$@.bz2
+endif
+ifeq ($$(BR2_TARGET_ROOTFS_$(2)_LZMA),y)
+ $(LZMA) -9 -c $$@ > $$@.lzma
+endif
+
+$(1)-root: $(BINARIES_DIR)/rootfs.$(1)
+
+ifeq ($$(BR2_TARGET_ROOTFS_$(2)),y)
+TARGETS += $(1)-root
+endif
+endef
+
+define ROOTFS_TARGET
+$(call ROOTFS_TARGET_INTERNAL,$(1),$(call UPPERCASE,$(1)))
+endef
+
+include fs/*/*.mk
diff --git a/fs/cpio/Config.in b/fs/cpio/Config.in
new file mode 100644
index 000000000..02fd00d34
--- /dev/null
+++ b/fs/cpio/Config.in
@@ -0,0 +1,40 @@
+config BR2_TARGET_ROOTFS_CPIO
+ bool "cpio the root filesystem"
+ help
+ Build a cpio archive of the root filesystem
+
+choice
+ prompt "Compression method"
+ default BR2_TARGET_ROOTFS_CPIO_NONE
+ depends on BR2_TARGET_ROOTFS_CPIO
+ help
+ Select compressor for cpio filesystem of the root filesystem
+
+config BR2_TARGET_ROOTFS_CPIO_NONE
+ bool "no compression"
+ help
+ Do not compress the cpio filesystem.
+
+config BR2_TARGET_ROOTFS_CPIO_GZIP
+ bool "gzip"
+ help
+ Do compress the cpio filesystem with gzip.
+ Note that you either have to have gzip installed on your host
+ or select to build a gzip for your host. See the packages submenu.
+
+config BR2_TARGET_ROOTFS_CPIO_BZIP2
+ bool "bzip2"
+ help
+ Do compress the cpio filesystem with bzip2.
+ Note that you either have to have bzip2 installed on your host
+ or select to build a bzip2 for your host. See the packages submenu.
+
+config BR2_TARGET_ROOTFS_CPIO_LZMA
+ bool "lzma"
+ help
+ Do compress the cpio filesystem with lzma.
+ Note that you either have to have lzma installed on your host
+ or select to build a lzma for your host. See the packages submenu.
+
+endchoice
+
diff --git a/fs/cpio/cpioroot.mk b/fs/cpio/cpioroot.mk
new file mode 100644
index 000000000..ab7d54618
--- /dev/null
+++ b/fs/cpio/cpioroot.mk
@@ -0,0 +1,18 @@
+#############################################################
+#
+# cpio to archive target filesystem
+#
+#############################################################
+
+define ROOTFS_CPIO_INIT_SYMLINK
+ rm -f $(TARGET_DIR)/init
+ ln -s sbin/init $(TARGET_DIR)/init
+endef
+
+ROOTFS_CPIO_PRE_GEN_HOOKS += ROOTFS_CPIO_INIT_SYMLINK
+
+define ROOTFS_CPIO_CMD
+ cd $(TARGET_DIR) && find . | cpio --quiet -o -H newc > $$@
+endef
+
+$(eval $(call ROOTFS_TARGET,cpio)) \ No newline at end of file
diff --git a/fs/cramfs/Config.in b/fs/cramfs/Config.in
new file mode 100644
index 000000000..1a4e32647
--- /dev/null
+++ b/fs/cramfs/Config.in
@@ -0,0 +1,6 @@
+config BR2_TARGET_ROOTFS_CRAMFS
+ bool "cramfs root filesystem"
+ help
+ Build a cramfs root filesystem
+
+ http://sourceforge.net/projects/cramfs/
diff --git a/fs/cramfs/cramfs.mk b/fs/cramfs/cramfs.mk
new file mode 100644
index 000000000..ccd316f5d
--- /dev/null
+++ b/fs/cramfs/cramfs.mk
@@ -0,0 +1,22 @@
+#############################################################
+#
+# Build the cramfs root filesystem image
+#
+#############################################################
+ifeq ($(BR2_ENDIAN),"BIG")
+CRAMFS_OPTS=-b
+else
+CRAMFS_OPTS=-l
+endif
+
+ifneq ($(TARGET_DEVICE_TABLE),)
+CRAMFS_OPTS += -D $(TARGET_DEVICE_TABLE)
+endif
+
+define ROOTFS_CRAMFS_CMD
+ $(HOST_DIR)/usr/bin/mkcramfs -q $(CRAMFS_OPTS) $(TARGET_DIR) $$@
+endef
+
+ROOTFS_CRAMFS_DEPENDENCIES = host-cramfs
+
+$(eval $(call ROOTFS_TARGET,cramfs)) \ No newline at end of file
diff --git a/fs/ext2/Config.in b/fs/ext2/Config.in
new file mode 100644
index 000000000..02ec18f40
--- /dev/null
+++ b/fs/ext2/Config.in
@@ -0,0 +1,61 @@
+config BR2_TARGET_ROOTFS_EXT2
+ bool "ext2 root filesystem"
+ default y
+ help
+ Build an ext2 root filesystem
+
+config BR2_TARGET_ROOTFS_EXT2_BLOCKS
+ int "size in blocks (leave at 0 for auto calculation)"
+ depends on BR2_TARGET_ROOTFS_EXT2
+ default 0
+
+config BR2_TARGET_ROOTFS_EXT2_INODES
+ int "inodes (leave at 0 for auto calculation)"
+ depends on BR2_TARGET_ROOTFS_EXT2
+ default 0
+
+config BR2_TARGET_ROOTFS_EXT2_RESBLKS
+ int "reserved blocks percentage"
+ depends on BR2_TARGET_ROOTFS_EXT2
+ default 0
+
+config BR2_TARGET_ROOTFS_EXT2_SQUASH
+ bool "Make all files be owned by root"
+ depends on BR2_TARGET_ROOTFS_EXT2
+ default y
+
+choice
+ prompt "Compression method"
+ default BR2_TARGET_ROOTFS_EXT2_NONE
+ depends on BR2_TARGET_ROOTFS_EXT2
+ help
+ Select compressor for ext2 filesystem of the root filesystem
+
+config BR2_TARGET_ROOTFS_EXT2_NONE
+ bool "no compression"
+ help
+ Do not compress the ext2 filesystem.
+
+config BR2_TARGET_ROOTFS_EXT2_GZIP
+ bool "gzip"
+ help
+ Do compress the ext2 filesystem with gzip.
+ Note that you either have to have gzip installed on your host
+ or select to build a gzip for your host. See the packages submenu.
+
+config BR2_TARGET_ROOTFS_EXT2_BZIP2
+ bool "bzip2"
+ help
+ Do compress the ext2 filesystem with bzip2.
+ Note that you either have to have bzip2 installed on your host
+ or select to build a bzip2 for your host. See the packages submenu.
+
+config BR2_TARGET_ROOTFS_EXT2_LZMA
+ bool "lzma"
+ help
+ Do compress the ext2 filesystem with lzma.
+ Note that you either have to have lzma installed on your host
+ or select to build a lzma for your host. See the packages submenu.
+
+endchoice
+
diff --git a/fs/ext2/ext2root.mk b/fs/ext2/ext2root.mk
new file mode 100644
index 000000000..68b3b813c
--- /dev/null
+++ b/fs/ext2/ext2root.mk
@@ -0,0 +1,40 @@
+#############################################################
+#
+# Build the ext2 root filesystem image
+#
+#############################################################
+
+EXT2_OPTS :=
+
+ifeq ($(BR2_TARGET_ROOTFS_EXT2_SQUASH),y)
+EXT2_OPTS += -U
+endif
+
+ifneq ($(strip $(BR2_TARGET_ROOTFS_EXT2_BLOCKS)),0)
+EXT2_OPTS += -b $(BR2_TARGET_ROOTFS_EXT2_BLOCKS)
+endif
+
+ifneq ($(strip $(BR2_TARGET_ROOTFS_EXT2_INODES)),0)
+EXT2_OPTS += -N $(BR2_TARGET_ROOTFS_EXT2_INODES)
+endif
+
+ifneq ($(strip $(BR2_TARGET_ROOTFS_EXT2_RESBLKS)),)
+EXT2_OPTS += -m $(BR2_TARGET_ROOTFS_EXT2_RESBLKS)
+endif
+
+ROOTFS_EXT2_DEPENDENCIES = host-genext2fs
+
+ifeq ($(strip $(BR2_TARGET_ROOTFS_EXT2_BLOCKS)),0)
+GENEXT2_REALSIZE=$(shell LC_ALL=C du -s -c -k $(TARGET_DIR) | grep total | sed -e "s/total//")
+GENEXT2_ADDTOROOTSIZE=$(shell if [ $(GENEXT2_REALSIZE) -ge 20000 ]; then echo 16384; else echo 2400; fi)
+GENEXT2_SIZE=$(shell expr $(GENEXT2_REALSIZE) + $(GENEXT2_ADDTOROOTSIZE))
+GENEXT2_ADDTOINODESIZE=$(shell find $(TARGET_DIR) | wc -l)
+GENEXT2_INODES=$(shell expr $(GENEXT2_ADDTOINODESIZE) + 400)
+EXT2_OPTS += -b $(GENEXT2_SIZE) -N $(GENEXT2_INODES)
+endif
+
+define ROOTFS_EXT2_CMD
+ $(HOST_DIR)/usr/bin/genext2fs -d $(TARGET_DIR) $(EXT2_OPTS) $$@
+endef
+
+$(eval $(call ROOTFS_TARGET,ext2)) \ No newline at end of file
diff --git a/fs/initramfs/Config.in b/fs/initramfs/Config.in
new file mode 100644
index 000000000..d53982cb9
--- /dev/null
+++ b/fs/initramfs/Config.in
@@ -0,0 +1,15 @@
+config BR2_TARGET_ROOTFS_INITRAMFS
+ bool "initramfs for initial ramdisk of linux kernel"
+ help
+ Build a file which is usable for the gen_init_cpio tool
+ at linux kernel build.
+ This file is normally called initramfs_list and can be
+ generated with gen_initramfs_list.sh script from the root
+ directory structure.
+ The file is then used in the kernel build process to generate
+ the cpio filesystem for the initial ramdisk. Make sure that
+ you configure this file in kernel build configuration.
+ The location in the kernel build configuration menu is
+ Device Drivers -> Block devices -> Initramfs source file(s).
+ The configuration variable is CONFIG_INITRAMFS_SOURCE
+
diff --git a/fs/initramfs/gen_initramfs_list.sh b/fs/initramfs/gen_initramfs_list.sh
new file mode 100644
index 000000000..26252b619
--- /dev/null
+++ b/fs/initramfs/gen_initramfs_list.sh
@@ -0,0 +1,203 @@
+#!/bin/sh
+# Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org>
+# Released under the terms of the GNU GPL
+#
+# Generate a newline separated list of entries from the file/directory
+# supplied as an argument.
+#
+# If a file/directory is not supplied then generate a small dummy file.
+#
+# The output is suitable for gen_init_cpio built from usr/gen_init_cpio.c.
+#
+
+default_initramfs() {
+ cat <<-EOF
+ # This is a very simple, default initramfs
+
+ dir /dev 0755 0 0
+ nod /dev/console 0600 0 0 c 5 1
+ dir /root 0700 0 0
+ EOF
+}
+
+filetype() {
+ local argv1="$1"
+
+ # symlink test must come before file test
+ if [ -L "$argv1" ]; then
+ echo "slink"
+ elif [ -f "$argv1" ]; then
+ echo "file"
+ elif [ -d "$argv1" ]; then
+ echo "dir"
+ elif [ -b "$argv1" -o -c "$argv1" ]; then
+ echo "nod"
+ elif [ -p "$argv1" ]; then
+ echo "pipe"
+ elif [ -S "$argv1" ]; then
+ echo "sock"
+ else
+ echo "invalid"
+ fi
+ return 0
+}
+
+print_mtime() {
+ local argv1="$1"
+ local mymtime="0"
+
+ if [ -e "$argv1" ]; then
+ mymtime=$(find "$argv1" -printf "%T@\n" | sort -r | head -n 1)
+ fi
+
+ echo "# Last modified: $mymtime"
+ echo
+}
+
+parse() {
+ local location="$1"
+ local name=$(echo "$location" | sed -e "s,$srcdir,,")
+ # change '//' into '/'
+ name=$(echo $name | sed -e 's,/[/]*,/,g')
+ local mode="$2"
+ local uid="$3"
+ local gid="$4"
+ local ftype=$(filetype "$location")
+ # remap uid/gid to 0 if necessary
+ [ "x$uid" != "x" ] && [ $uid -eq $root_uid ] && uid=0
+ [ "x$gid" != "x" ] && [ $gid -eq $root_gid ] && gid=0
+ local str="$mode $uid $gid"
+
+ [ "$ftype" = "invalid" ] && return 0
+ [ "$location" = "$srcdir" ] && return 0
+
+ case "$ftype" in
+ "file")
+ str="$ftype $name $location $str"
+ ;;
+ "nod")
+ local devtype=
+ local maj=$(LC_ALL=C ls -l "$location" | \
+ awk '{sub(/,/, "", $5); print $5}')
+ local min=$(LC_ALL=C ls -l "$location" | \
+ awk '{print $6}')
+
+ if [ -b "$location" ]; then
+ devtype="b"
+ else
+ devtype="c"
+ fi
+ str="$ftype $name $str $devtype $maj $min"
+ ;;
+ "slink")
+ local target=$(LC_ALL=C ls -l "$location" | \
+ awk '{print $11}')
+ str="$ftype $name $target $str"
+ ;;
+ *)
+ str="$ftype $name $str"
+ ;;
+ esac
+
+ echo "$str"
+
+ return 0
+}
+
+usage() {
+ printf "Usage:\n"
+ printf "$0 [ [-u <root_uid>] [-g <root_gid>] [-d | <cpio_source>] ] . . .\n"
+ printf "\n"
+ printf -- "-u <root_uid> User ID to map to user ID 0 (root).\n"
+ printf " <root_uid> is only meaningful if <cpio_source>\n"
+ printf " is a directory.\n"
+ printf -- "-g <root_gid> Group ID to map to group ID 0 (root).\n"
+ printf " <root_gid> is only meaningful if <cpio_source>\n"
+ printf " is a directory.\n"
+ printf "<cpio_source> File list or directory for cpio archive.\n"
+ printf " If <cpio_source> is not provided then a\n"
+ printf " a default list will be output.\n"
+ printf -- "-d Output the default cpio list. If no <cpio_source>\n"
+ printf " is given then the default cpio list will be output.\n"
+ printf "\n"
+ printf "All options may be repeated and are interpreted sequentially\n"
+ printf "and immediately. -u and -g states are preserved across\n"
+ printf "<cpio_source> options so an explicit \"-u 0 -g 0\" is required\n"
+ printf "to reset the root/group mapping.\n"
+}
+
+build_list() {
+ printf "\n#####################\n# $cpio_source\n"
+
+ if [ -f "$cpio_source" ]; then
+ print_mtime "$cpio_source"
+ cat "$cpio_source"
+ elif [ -d "$cpio_source" ]; then
+ srcdir=$(echo "$cpio_source" | sed -e 's://*:/:g;s:/$::')
+ dirlist=$(find "$srcdir" -printf "%p %m %U %G\n" 2>/dev/null)
+
+ # If $dirlist is only one line, then the directory is empty
+ if [ "$(echo "$dirlist" | wc -l)" -gt 1 ]; then
+ print_mtime "$cpio_source"
+
+ echo "$dirlist" | \
+ while read x; do
+ parse $x
+ done
+ else
+ # Failsafe in case directory is empty
+ default_initramfs
+ fi
+ else
+ echo " $0: Cannot open '$cpio_source'" >&2
+ exit 1
+ fi
+}
+
+
+root_uid=0
+root_gid=0
+
+while [ $# -gt 0 ]; do
+ arg="$1"
+ shift
+ case "$arg" in
+ "-u")
+ root_uid="$1"
+ shift
+ ;;
+ "-g")
+ root_gid="$1"
+ shift
+ ;;
+ "-d")
+ default_list="$arg"
+ default_initramfs
+ ;;
+ "-h")
+ usage
+ exit 0
+ ;;
+ *)
+ case "$arg" in
+ "-"*)
+ printf "ERROR: unknown option \"$arg\"\n" >&2
+ printf "If the filename validly begins with '-', then it must be prefixed\n" >&2
+ printf "by './' so that it won't be interpreted as an option." >&2
+ printf "\n" >&2
+ usage >&2
+ exit 1
+ ;;
+ *)
+ cpio_source="$arg"
+ build_list
+ ;;
+ esac
+ ;;
+ esac
+done
+
+# spit out the default cpio list if a source hasn't been specified
+[ -z "$cpio_source" -a -z "$default_list" ] && default_initramfs
+
+exit 0
diff --git a/fs/initramfs/initramfs.mk b/fs/initramfs/initramfs.mk
new file mode 100644
index 000000000..cf1fcdbae
--- /dev/null
+++ b/fs/initramfs/initramfs.mk
@@ -0,0 +1,18 @@
+#############################################################
+#
+# Make a initramfs_list file to be used by gen_init_cpio
+# gen_init_cpio is part of the 2.6 linux kernels to build an
+# initial ramdisk filesystem based on cpio
+#
+#############################################################
+
+define ROOTFS_INITRAMFS_INIT_SYMLINK
+ rm -f $(TARGET_DIR)/init
+ ln -s sbin/init $(TARGET_DIR)/init
+endef
+
+define ROOTFS_INITRAMFS_CMD
+ $(SHELL) target/initramfs/gen_initramfs_list.sh -u 0 -g 0 $(TARGET_DIR) > $$@
+endef
+
+$(eval $(call ROOTFS_TARGET,initramfs)) \ No newline at end of file
diff --git a/fs/iso9660/Config.in b/fs/iso9660/Config.in
new file mode 100644
index 000000000..ceee52ff9
--- /dev/null
+++ b/fs/iso9660/Config.in
@@ -0,0 +1,16 @@
+config BR2_TARGET_ROOTFS_ISO9660
+ bool "iso image"
+ depends on BR2_i386
+ depends on !BR2_KERNEL_none
+ select BR2_TARGET_ROOTFS_EXT2
+ select BR2_TARGET_GRUB
+ help
+ Build a bootable iso9660 image
+
+config BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU
+ string "Boot menu.lst file"
+ depends on BR2_TARGET_ROOTFS_ISO9660
+ default "target/iso9660/menu.lst"
+
+comment "iso image requires a Linux kernel to be built"
+ depends on BR2_i386 && BR2_KERNEL_none
diff --git a/fs/iso9660/iso9660.mk b/fs/iso9660/iso9660.mk
new file mode 100644
index 000000000..66e2de20b
--- /dev/null
+++ b/fs/iso9660/iso9660.mk
@@ -0,0 +1,49 @@
+#############################################################
+#
+# Build the iso96600 root filesystem image
+#
+# Cannot be converted to the ROOTFS_TARGET infrastructure, because of
+# the temporary construction in ISO9660_TARGET_DIR.
+#
+#############################################################
+
+ISO9660_TARGET_DIR=$(BUILD_DIR)/iso9660
+ISO9660_BOOT_MENU:=$(call qstrip,$(BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU))
+ISO9660_OPTS:=
+
+ifeq ($(BR2_TARGET_ROOTFS_ISO9660_SQUASH),y)
+ISO9660_OPTS+=-U
+endif
+
+$(BINARIES_DIR)/rootfs.iso9660: host-cdrkit host-fakeroot $(LINUX_KERNEL) $(BINARIES_DIR)/rootfs.ext2 grub
+ @$(call MESSAGE,"Generating root filesystem image rootfs.iso9660")
+ mkdir -p $(ISO9660_TARGET_DIR)
+ mkdir -p $(ISO9660_TARGET_DIR)/boot/grub
+ cp $(GRUB_DIR)/stage2/stage2_eltorito $(ISO9660_TARGET_DIR)/boot/grub/
+ cp $(ISO9660_BOOT_MENU) $(ISO9660_TARGET_DIR)/boot/grub/menu.lst
+ cp $(LINUX_KERNEL) $(ISO9660_TARGET_DIR)/kernel
+ cp $(EXT2_TARGET) $(ISO9660_TARGET_DIR)/initrd
+ # Use fakeroot to pretend all target binaries are owned by root
+ rm -f $(FAKEROOT_SCRIPT)
+ touch $(BUILD_DIR)/.fakeroot.00000
+ cat $(BUILD_DIR)/.fakeroot* > $(FAKEROOT_SCRIPT)
+ echo "chown -R 0:0 $(ISO9660_TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
+ # Use fakeroot so mkisofs believes the previous fakery
+ echo "$(HOST_DIR)/usr/bin/genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot " \
+ "-boot-load-size 4 -boot-info-table -o $@ $(ISO9660_TARGET_DIR)" \
+ >> $(FAKEROOT_SCRIPT)
+ chmod a+x $(FAKEROOT_SCRIPT)
+ $(HOST_DIR)/usr/bin/fakeroot -- $(FAKEROOT_SCRIPT)
+ -@rm -f $(FAKEROOT_SCRIPT)
+ -@rm -rf $(ISO9660_TARGET_DIR)
+
+iso9660-root: $(BINARIES_DIR)/rootfs.iso9660
+
+#############################################################
+#
+# Toplevel Makefile options
+#
+#############################################################
+ifeq ($(BR2_TARGET_ROOTFS_ISO9660),y)
+TARGETS+=iso9660-root
+endif
diff --git a/fs/iso9660/menu.lst b/fs/iso9660/menu.lst
new file mode 100644
index 000000000..d78caebe1
--- /dev/null
+++ b/fs/iso9660/menu.lst
@@ -0,0 +1,11 @@
+default 0
+timeout 10
+color cyan/blue white/blue
+
+title Hard Drive (first partition)
+rootnoverify (hd0)
+chainloader +1
+
+title BuildRoot ISO9660 image
+kernel /kernel
+initrd /initrd
diff --git a/fs/jffs2/Config.in b/fs/jffs2/Config.in
new file mode 100644
index 000000000..b787ec9d1
--- /dev/null
+++ b/fs/jffs2/Config.in
@@ -0,0 +1,117 @@
+config BR2_TARGET_ROOTFS_JFFS2
+ bool "jffs2 root filesystem"
+ help
+ Build a jffs2 root filesystem
+
+if BR2_TARGET_ROOTFS_JFFS2
+
+choice
+ prompt "Flash Type"
+ default BR2_TARGET_ROOTFS_JFFS2_FLASH_128
+
+config BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_1056
+ bool "AT45 dataflash with 1056 byte pagesize"
+ select BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER
+
+config BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_528
+ bool "AT45 dataflash with 528 byte pagesize"
+ select BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER
+
+config BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_512_16K
+ bool "NAND flash with 512B Page and 16 kB erasesize"
+ select BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER
+
+config BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_2K_128K
+ bool "NAND flash with 2kB Page and 128 kB erasesize"
+ select BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER
+
+config BR2_TARGET_ROOTFS_JFFS2_FLASH_128
+ bool "Parallel flash with 4 kB pagesize and 128 kB erase size"
+
+config BR2_TARGET_ROOTFS_JFFS2_FLASH_64
+ bool "Parallel flash with 4 kB pagesize and 64 kB erase size"
+
+config BR2_TARGET_ROOTFS_JFFS2_CUSTOM
+ bool "Select custom page and erase size"
+
+endchoice
+
+config BR2_TARGET_ROOTFS_JFFS2_CUSTOM_PAGESIZE
+ hex "Page Size"
+ depends on BR2_TARGET_ROOTFS_JFFS2_CUSTOM
+ default 0x1000
+ help
+ Set to pagesize of memory
+
+config BR2_TARGET_ROOTFS_JFFS2_CUSTOM_EBSIZE
+ hex "Erase block size"
+ depends on BR2_TARGET_ROOTFS_JFFS2_CUSTOM
+ default 0x20000
+ help
+ Set to erase size of memory
+
+config BR2_TARGET_ROOTFS_JFFS2_PAGESIZE
+ hex
+ default 0x420 if BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_1056
+ default 0x210 if BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_528
+ default 0x200 if BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_512_16K
+ default 0x800 if BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_2K_128K
+ default 0x1000 if BR2_TARGET_ROOTFS_JFFS2_FLASH_128
+ default 0x1000 if BR2_TARGET_ROOTFS_JFFS2_FLASH_64
+ default $(BR2_TARGET_ROOTFS_JFFS2_CUSTOM_PAGESIZE) if BR2_TARGET_ROOTFS_JFFS2_CUSTOM
+
+config BR2_TARGET_ROOTFS_JFFS2_EBSIZE
+ hex
+ default 0x2100 if BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_1056
+ default 0x1080 if BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_528
+ default 0x4000 if BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_512_16K
+ default 0x20000 if BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_2K_128K
+ default 0x20000 if BR2_TARGET_ROOTFS_JFFS2_FLASH_128
+ default 0x10000 if BR2_TARGET_ROOTFS_JFFS2_FLASH_64
+ default $(BR2_TARGET_ROOTFS_JFFS2_CUSTOM_EBSIZE) if BR2_TARGET_ROOTFS_JFFS2_CUSTOM
+
+config BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER
+ bool "Do not use Cleanmarker"
+ default y if BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_1056
+ default y if BR2_TARGET_ROOTFS_JFFS2_DATAFLASH_528
+ default y if BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_512_16K
+ default y if BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_2K_128K
+ help
+ Do not use cleanmarkers if using NAND flash or Dataflash where
+ the pagesize is not a power of 2
+
+config BR2_JFFS2_TARGET_SREC
+ bool "RootFS in SREC file formet"
+
+config BR2_TARGET_ROOTFS_JFFS2_PAD
+ bool "Pad output"
+
+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_BE if BR2_alpha || BR2_armeb || \
+ BR2_avr32 || BR2_m68k || BR2_mips || \
+ BR2_powerpc || BR2_sh2a_nofpueb || BR2_sh2eb || \
+ BR2_sh3eb || BR2_sh4eb || BR2_sparc || BR2_sparc64
+
+config BR2_TARGET_ROOTFS_JFFS2_LE
+ bool "little-endian"
+
+config BR2_TARGET_ROOTFS_JFFS2_BE
+ bool "big-endian"
+
+endchoice
+
+config BR2_TARGET_ROOTFS_JFFS2_SUMMARY
+ bool "Produce a summarized JFFS2 image"
+ help
+ A summarised image can be mounted faster if support is
+ enabled in the kernel (CONFIG_JFFS2_SUMMARY)
+
+endif
diff --git a/fs/jffs2/jffs2root.mk b/fs/jffs2/jffs2root.mk
new file mode 100644
index 000000000..a0a563d18
--- /dev/null
+++ b/fs/jffs2/jffs2root.mk
@@ -0,0 +1,61 @@
+#############################################################
+#
+# Build the jffs2 root filesystem image
+#
+#############################################################
+
+JFFS2_OPTS := -e $(BR2_TARGET_ROOTFS_JFFS2_EBSIZE)
+SUMTOOL_OPTS := $(JFFS2_OPTS)
+
+ifeq ($(BR2_TARGET_ROOTFS_JFFS2_PAD),y)
+ifneq ($(strip $(BR2_TARGET_ROOTFS_JFFS2_PADSIZE)),0x0)
+JFFS2_OPTS += --pad=$(strip $(BR2_TARGET_ROOTFS_JFFS2_PADSIZE))
+else
+JFFS2_OPTS += -p
+endif
+SUMTOOL_OPTS += -p
+endif
+
+ifeq ($(BR2_TARGET_ROOTFS_JFFS2_LE),y)
+JFFS2_OPTS += -l
+SUMTOOL_OPTS += -l
+endif
+
+ifeq ($(BR2_TARGET_ROOTFS_JFFS2_BE),y)
+JFFS2_OPTS += -b
+SUMTOOL_OPTS += -b
+endif
+
+JFFS2_OPTS += -s $(BR2_TARGET_ROOTFS_JFFS2_PAGESIZE)
+ifeq ($(BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER),y)
+JFFS2_OPTS += -n
+SUMTOOL_OPTS += -n
+endif
+
+ifneq ($(TARGET_DEVICE_TABLE),)
+JFFS2_OPTS += -D $(TARGET_DEVICE_TABLE)
+endif
+
+ROOTFS_JFFS2_DEPENDENCIES = host-mtd
+
+ifneq ($(BR2_TARGET_ROOTFS_JFFS2_SUMMARY),)
+define ROOTFS_JFFS2_CMD
+ $(MKFS_JFFS2) $(JFFS2_OPTS) -d $(TARGET_DIR) -o $$@.nosummary && \
+ $(SUMTOOL) $(SUMTOOL_OPTS) -i $$@.nosummary -o $$@ && \
+ rm $$@.nosummary
+endef
+else
+define ROOTFS_JFFS2_CMD
+ $(MKFS_JFFS2) $(JFFS2_OPTS) -d $(TARGET_DIR) -o $$@
+endef
+endif
+
+define JFFS2_GEN_SREC
+ $(TARGET_CROSS)objcopy -I binary -O srec --adjust-vma 0xa1000000 $$@ $$@.srec
+endef
+
+ifeq ($(BR2_JFFS2_TARGET_SREC),y)
+ROOTFS_JFFS2_POST_GEN_HOOKS += JFFS2_GEN_SREC
+endif
+
+$(eval $(call ROOTFS_TARGET,jffs2)) \ No newline at end of file
diff --git a/fs/romfs/Config.in b/fs/romfs/Config.in
new file mode 100644
index 000000000..7a8c663dd
--- /dev/null
+++ b/fs/romfs/Config.in
@@ -0,0 +1,5 @@
+config BR2_TARGET_ROOTFS_ROMFS
+ bool "romfs root filesystem"
+ help
+ Build a romfs image of the root filesystem.
+
diff --git a/fs/romfs/romfs.mk b/fs/romfs/romfs.mk
new file mode 100644
index 000000000..971947880
--- /dev/null
+++ b/fs/romfs/romfs.mk
@@ -0,0 +1,15 @@
+#############################################################
+#
+# Build the romfs root filesystem image
+#
+#############################################################
+
+ROMFS_TARGET=$(IMAGE).romfs
+
+ROOTFS_ROMFS_DEPENDENCIES = host-genromfs
+
+define ROOTFS_ROMFS_CMD
+ $(HOST_DIR)/usr/bin/genromfs -d $(TARGET_DIR) -f $$@
+endef
+
+$(eval $(call ROOTFS_TARGET,romfs)) \ No newline at end of file
diff --git a/fs/squashfs/Config.in b/fs/squashfs/Config.in
new file mode 100644
index 000000000..6cc8fcae0
--- /dev/null
+++ b/fs/squashfs/Config.in
@@ -0,0 +1,4 @@
+config BR2_TARGET_ROOTFS_SQUASHFS
+ bool "squashfs root filesystem"
+ help
+ Build a squashfs root filesystem
diff --git a/fs/squashfs/squashfsroot.mk b/fs/squashfs/squashfsroot.mk
new file mode 100644
index 000000000..d72388ebf
--- /dev/null
+++ b/fs/squashfs/squashfsroot.mk
@@ -0,0 +1,13 @@
+#############################################################
+#
+# Build the squashfs root filesystem image
+#
+#############################################################
+
+ROOTFS_SQUASHFS_DEPENDENCIES = host-squashfs
+
+define ROOTFS_SQUASHFS_CMD
+ $(HOST_DIR)/usr/bin/mksquashfs $(TARGET_DIR) $$@ -noappend
+endef
+
+$(eval $(call ROOTFS_TARGET,squashfs)) \ No newline at end of file
diff --git a/fs/tar/Config.in b/fs/tar/Config.in
new file mode 100644
index 000000000..0adca795f
--- /dev/null
+++ b/fs/tar/Config.in
@@ -0,0 +1,47 @@
+config BR2_TARGET_ROOTFS_TAR
+ bool "tar the root filesystem"
+ help
+ Build a tar archive of the root filesystem
+
+choice
+ prompt "Compression method"
+ default BR2_TARGET_ROOTFS_TAR_NONE
+ depends on BR2_TARGET_ROOTFS_TAR
+ help
+ Select compressor for tar archive of the root filesystem
+
+config BR2_TARGET_ROOTFS_TAR_NONE
+ bool "no compression"
+ help
+ Do not compress the tarball.
+
+config BR2_TARGET_ROOTFS_TAR_GZIP
+ bool "gzip"
+ help
+ Do compress the tarball with gzip.
+ Note that you either have to have gzip installed on your host
+ or select to build a gzip for your host. See the packages submenu.
+
+config BR2_TARGET_ROOTFS_TAR_BZIP2
+ bool "bzip2"
+ help
+ Do compress the tarball with bzip2.
+ Note that you either have to have bzip2 installed on your host
+ or select to build a bzip2 for your host. See the packages submenu.
+
+config BR2_TARGET_ROOTFS_TAR_LZMA
+ bool "lzma"
+ help
+ Do compress the tarball with lzma.
+ Note that you either have to have lzma installed on your host
+ or select to build a lzma for your host. See the packages submenu.
+
+endchoice
+
+config BR2_TARGET_ROOTFS_TAR_OPTIONS
+ string "other random options to pass to tar"
+ depends on BR2_TARGET_ROOTFS_TAR
+ default ""
+ help
+ Any other flags you want to pass to tar
+ Refer to tar --help for details
diff --git a/fs/tar/tarroot.mk b/fs/tar/tarroot.mk
new file mode 100644
index 000000000..4d435cb33
--- /dev/null
+++ b/fs/tar/tarroot.mk
@@ -0,0 +1,13 @@
+#############################################################
+#
+# tar to archive target filesystem
+#
+#############################################################
+
+TAR_OPTS:=$(BR2_TARGET_ROOTFS_TAR_OPTIONS)
+
+define ROOTFS_TAR_CMD
+ tar -c$(TAR_OPTS)f $$@ -C $(TARGET_DIR) .
+endef
+
+$(eval $(call ROOTFS_TARGET,tar))
diff --git a/fs/ubifs/Config.in b/fs/ubifs/Config.in
new file mode 100644
index 000000000..9fa510e75
--- /dev/null
+++ b/fs/ubifs/Config.in
@@ -0,0 +1,88 @@
+config BR2_TARGET_ROOTFS_UBIFS
+ bool "ubifs root filesystem"
+ help
+ Build a ubifs root filesystem
+
+config BR2_TARGET_ROOTFS_UBIFS_LEBSIZE
+ hex "UBI logical erase block size"
+ depends on BR2_TARGET_ROOTFS_UBIFS
+ default 0x1f800
+
+config BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE
+ hex "UBI minimum I/O size"
+ depends on BR2_TARGET_ROOTFS_UBIFS
+ default 0x800
+ help
+ Some comment required here
+
+config BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT
+ int "Maximum LEB count"
+ depends on BR2_TARGET_ROOTFS_UBIFS
+ default 2048
+ help
+ Some comment required here
+
+choice
+ prompt "ubifs runtime compression"
+ default BR2_TARGET_ROOTFS_UBIFS_RT_LZO
+ depends on BR2_TARGET_ROOTFS_UBIFS
+ help
+ Select which compression format to use at run-time within
+ the ubifs file system.
+
+config BR2_TARGET_ROOTFS_UBIFS_RT_NONE
+ bool "no compression"
+ help
+ Don't use run-time compression.
+
+config BR2_TARGET_ROOTFS_UBIFS_RT_ZLIB
+ bool "gzip"
+ help
+ Use zlib compression at run-time.
+
+config BR2_TARGET_ROOTFS_UBIFS_RT_LZO
+ bool "lzo"
+ help
+ Use lzo compression at run-time.
+
+endchoice
+
+choice
+ prompt "Compression method"
+ default BR2_TARGET_ROOTFS_UBIFS_NONE
+ depends on BR2_TARGET_ROOTFS_UBIFS
+ help
+ Select which compression format to compress the final image
+ into.
+
+config BR2_TARGET_ROOTFS_UBIFS_NONE
+ bool "no compression"
+ help
+ Do not compress the ubifs filesystem.
+
+config BR2_TARGET_ROOTFS_UBIFS_GZIP
+ bool "gzip"
+ help
+ Do compress the ubifs filesystem with gzip.
+ Note that you either have to have gzip installed on your
+ host or select to build a gzip for your host. See the
+ packages submenu.
+
+config BR2_TARGET_ROOTFS_UBIFS_BZIP2
+ bool "bzip2"
+ help
+ Do compress the ubifs filesystem with bzip2.
+ Note that you either have to have bzip2 installed on your
+ host or select to build a bzip2 for your host. See the
+ packages submenu.
+
+config BR2_TARGET_ROOTFS_UBIFS_LZMA
+ bool "lzma"
+ help
+ Do compress the ubifs filesystem with lzma.
+ Note that you either have to have lzma installed on your
+ host or select to build a lzma for your host. See the
+ packages submenu.
+
+endchoice
+
diff --git a/fs/ubifs/ubifsroot.mk b/fs/ubifs/ubifsroot.mk
new file mode 100644
index 000000000..0fad23421
--- /dev/null
+++ b/fs/ubifs/ubifsroot.mk
@@ -0,0 +1,25 @@
+#############################################################
+#
+# Build the ubifs root filesystem image
+#
+#############################################################
+
+UBIFS_OPTS := -e $(BR2_TARGET_ROOTFS_UBIFS_LEBSIZE) -c $(BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT) -m $(BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE)
+
+ifeq ($(BR2_TARGET_ROOTFS_UBIFS_RT_ZLIB),y)
+UBIFS_OPTS += -x zlib
+endif
+ifeq ($(BR2_TARGET_ROOTFS_UBIFS_RT_LZI),y)
+UBIFS_OPTS += -x lzo
+endif
+ifeq ($(BR2_TARGET_ROOTFS_UBIFS_RT_NONE),y)
+UBIFS_OPTS += -x none
+endif
+
+ROOTFS_UBIFS_DEPENDENCIES = host-mtd
+
+define ROOTFS_UBIFS_CMD
+ $(HOST_DIR)/usr/sbin/mkfs.ubifs -d $(TARGET_DIR) $(UBIFS_OPTS) -o $$@
+endef
+
+$(eval $(call ROOTFS_TARGET,ubifs)) \ No newline at end of file