Commit 96680975 authored by Masahiro Yamada's avatar Masahiro Yamada
Browse files

initramfs: generate dependency list and cpio at the same time



Currently, this script is run twice, for the dependency list, and then
for the cpio archive.

The first one is re-run every time although its build log is suppressed
so nobody notices it.

Make it work more efficiently by generating the cpio and the dependency
list at the same time.

Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
parent 3e176683
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ ifneq ($(wildcard $(obj)/$(datafile_d_y)),)
endif

quiet_cmd_initfs = GEN     $@
      cmd_initfs = $(CONFIG_SHELL) $< -o $@ $(ramfs-args) $(ramfs-input)
      cmd_initfs = $(CONFIG_SHELL) $< -o $@ -l $(obj)/$(datafile_d_y) $(ramfs-args) $(ramfs-input)

targets := $(datafile_y)

@@ -52,7 +52,6 @@ $(deps_initramfs): ;
# 3) If gen_init_cpio are newer than initramfs_data.cpio
# 4) Arguments to gen_initramfs.sh changes
$(obj)/$(datafile_y): $(src)/gen_initramfs.sh $(obj)/gen_init_cpio $(deps_initramfs) FORCE
	$(Q)$< -l $(ramfs-input) > $(obj)/$(datafile_d_y)
	$(call if_changed,initfs)

subdir-$(CONFIG_UAPI_HEADER_TEST) += include
+46 −62
Original line number Diff line number Diff line
@@ -15,9 +15,10 @@ set -e
usage() {
cat << EOF
Usage:
$0 [-o <file>] [-u <uid>] [-g <gid>] {-d | <cpio_source>} ...
$0 [-o <file>] [-l <dep_list>] [-u <uid>] [-g <gid>] {-d | <cpio_source>} ...
	-o <file>      Create compressed initramfs file named <file> using
		       gen_init_cpio and compressor depending on the extension
	-l <dep_list>  Create dependency list named <dep_list>
	-u <uid>       User ID to map to user ID 0 (root).
		       <uid> is only meaningful if <cpio_source> is a
		       directory.  "squash" forces all files to uid 0.
@@ -42,11 +43,6 @@ field() {
	shift $1 ; echo $1
}

list_default_initramfs() {
	# echo usr/kinit/kinit
	:
}

default_initramfs() {
	cat <<-EOF >> ${output}
		# This is a very simple, default initramfs
@@ -81,10 +77,6 @@ filetype() {
	return 0
}

list_print_mtime() {
	:
}

print_mtime() {
	local my_mtime="0"

@@ -97,10 +89,10 @@ print_mtime() {
}

list_parse() {
	if [ -L "$1" ]; then
	if [ -z "$dep_list" -o -L "$1" ]; then
		return
	fi
	echo "$1" | sed 's/:/\\:/g; s/$/ \\/'
	echo "$1" | sed 's/:/\\:/g; s/$/ \\/' >> $dep_list
}

# for each file print a line in following format
@@ -161,28 +153,25 @@ unknown_option() {
	exit 1
}

list_header() {
	:
}

header() {
	printf "\n#####################\n# $1\n" >> ${output}
}

# process one directory (incl sub-directories)
dir_filelist() {
	${dep_list}header "$1"
	header "$1"

	srcdir=$(echo "$1" | sed -e 's://*:/:g')
	dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n" | LANG=C sort)

	# If $dirlist is only one line, then the directory is empty
	if [  "$(echo "${dirlist}" | wc -l)" -gt 1 ]; then
		${dep_list}print_mtime "$1"
		print_mtime "$1"

		echo "${dirlist}" | \
		while read x; do
			${dep_list}parse ${x}
			list_parse $x
			parse $x
		done
	fi
}
@@ -193,22 +182,21 @@ dir_filelist() {
input_file() {
	source="$1"
	if [ -f "$1" ]; then
		${dep_list}header "$1"
		header "$1"
		is_cpio="$(echo "$1" | sed 's/^.*\.cpio\(\..*\)\{0,1\}/cpio/')"
		if [ $2 -eq 0 -a ${is_cpio} = "cpio" ]; then
			cpio_file=$1
			echo "$1" | grep -q '^.*\.cpio\..*' && is_cpio_compressed="compressed"
			[ ! -z ${dep_list} ] && echo "$1"
			[ -n "$dep_list" ] && echo "$1" >> $dep_list
			return 0
		fi
		if [ -z ${dep_list} ]; then
		print_mtime "$1" >> ${output}
		cat "$1"         >> ${output}
		else
		        echo "$1 \\"
		if [ -n "$dep_list" ]; then
		        echo "$1 \\"  >> $dep_list
			cat "$1" | while read type dir file perm ; do
				if [ "$type" = "file" ]; then
					echo "$file \\";
					echo "$file \\" >> $dep_list
				fi
			done
		fi
@@ -231,15 +219,16 @@ output_file=""
is_cpio_compressed=
compr="gzip -n -9 -f"

while [ $# -gt 0 ]; do
	arg="$1"
	shift
	case "$arg" in
		"-l")	# files included in initramfs - used by kbuild
		dep_list="list_"
		echo "deps_initramfs := \\"
			dep_list="$1"
			echo "deps_initramfs := \\" > $dep_list
			shift
			;;
		"-o")	# generate compressed cpio image named $1
		shift
			output_file="$1"
			cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)"
			output=${cpio_list}
@@ -264,11 +253,6 @@ case "$arg" in
			echo "$output_file" | grep -q "\.cpio$" && compr="cat"
			shift
			;;
esac
while [ $# -gt 0 ]; do
	arg="$1"
	shift
	case "$arg" in
		"-u")	# map $1 to uid=0 (root)
			root_uid="$1"
			[ "$root_uid" = "-1" ] && root_uid=$(id -u || echo 0)
@@ -280,7 +264,7 @@ while [ $# -gt 0 ]; do
			shift
			;;
		"-d")	# display default initramfs list
			${dep_list}default_initramfs
			default_initramfs
			;;
		"-h")
			usage