"real" root file system, etc. See <file:Documentation/initrd.txt>
for details.
+config INITRAMFS_SOURCE
+ string "Source directory of cpio_list"
+ default ""
+ help
+ This can be set to either a directory containing files, etc to be
+ included in the initramfs archive, or a file containing newline
+ separated entries.
+
+ If it is a file, it should be in the following format:
+ # a comment
+ file <name> <location> <mode> <uid> <gid>
+ dir <name> <mode> <uid> <gid>
+ nod <name> <mode> <uid> <gid> <dev_type> <maj> <min>
+
+ Where:
+ <name> name of the file/dir/nod in the archive
+ <location> location of the file in the current filesystem
+ <mode> mode/permissions of the file
+ <uid> user id (0=root)
+ <gid> group id (0=root)
+ <dev_type> device type (b=block, c=character)
+ <maj> major number of nod
+ <min> minor number of nod
+
+ If you are not sure, leave it blank.
+
config LBD
bool "Support for Large Block Devices"
depends on X86 || MIPS32 || PPC32 || ARCH_S390_31 || SUPERH
--- /dev/null
+#!/bin/bash
+# Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org>
+# Released under the terms of the GNU GPL
+#
+# A script to generate newline separated entries (to stdout) from a directory's
+# contents suitable for use as a cpio_list for gen_init_cpio.
+#
+# Arguements: $1 -- the source directory
+#
+# TODO: Add support for symlinks, sockets and pipes when gen_init_cpio
+# supports them.
+
+usage() {
+ echo "Usage: $0 initramfs-source-dir"
+ exit 1
+}
+
+srcdir=$(echo "$1" | sed -e 's://*:/:g')
+
+if [ "$#" -gt 1 -o ! -d "${srcdir}" ]; then
+ usage
+fi
+
+filetype() {
+ local argv1="$1"
+
+ if [ -f "${argv1}" ]; then
+ echo "file"
+ elif [ -d "${argv1}" ]; then
+ echo "dir"
+ elif [ -b "${argv1}" -o -c "${argv1}" ]; then
+ echo "nod"
+ else
+ echo "invalid"
+ fi
+ return 0
+}
+
+parse() {
+ local location="$1"
+ local name="${location/${srcdir}//}"
+ local mode="$2"
+ local uid="$3"
+ local gid="$4"
+ local ftype=$(filetype "${location}")
+ local str="${mode} ${uid} ${gid}"
+
+ [ "${ftype}" == "invalid" ] && return 0
+ [ "${location}" == "${srcdir}" ] && return 0
+
+ case "${ftype}" in
+ "file")
+ str="${ftype} ${name} ${location} ${str}"
+ ;;
+ "nod")
+ local dev_type=
+ local maj=$(LC_ALL=C ls -l "${location}" | \
+ gawk '{sub(/,/, "", $5); print $5}')
+ local min=$(LC_ALL=C ls -l "${location}" | \
+ gawk '{print $6}')
+
+ if [ -b "${location}" ]; then
+ dev_type="b"
+ else
+ dev_type="c"
+ fi
+ str="${ftype} ${name} ${str} ${dev_type} ${maj} ${min}"
+ ;;
+ *)
+ str="${ftype} ${name} ${str}"
+ ;;
+ esac
+
+ echo "${str}"
+
+ return 0
+}
+
+find "${srcdir}" -printf "%p %m %U %G\n" | \
+while read x; do
+ parse ${x}
+done
+
+exit 0
# If you want a different list of files in the initramfs_data.cpio
# then you can either overwrite the cpio_list in this directory
# or set INITRAMFS_LIST to another filename.
-INITRAMFS_LIST ?= $(obj)/initramfs_list
+INITRAMFS_LIST := $(obj)/initramfs_list
# initramfs_data.o contains the initramfs_data.cpio.gz image.
# The image is included using .incbin, a dependency which is not
# Commented out for now
# initramfs-y := $(obj)/root/hello
+quiet_cmd_gen_list = GEN_INITRAMFS_LIST $@
+ cmd_gen_list = $(shell \
+ if test -f $(CONFIG_INITRAMFS_SOURCE); then \
+ if [ $(CONFIG_INITRAMFS_SOURCE) != $@ ]; then \
+ echo 'cp -f $(CONFIG_INITRAMFS_SOURCE) $@'; \
+ else \
+ echo 'echo Using shipped $@'; \
+ fi; \
+ elif test -d $(CONFIG_INITRAMFS_SOURCE); then \
+ echo 'scripts/gen_initramfs_list.sh $(CONFIG_INITRAMFS_SOURCE) > $@'; \
+ else \
+ echo 'echo Using shipped $@'; \
+ fi)
+
+
+$(INITRAMFS_LIST): FORCE
+ $(call cmd,gen_list)
+
quiet_cmd_cpio = CPIO $@
cmd_cpio = ./$< $(INITRAMFS_LIST) > $@