Skip to contentSkip to conversation

Select cpio_list or source directory for initramfs image updates [u]

PATCH In review Martin Schlemmer [c] 4 participants 14 messages Oct 23, 2004 – Oct 31, 2004 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw

PATCH 1/1 Select cpio_list or source directory for initramfs image updates [u]

Hi,

Here is some updates after talking to Sam Ravnborg. He did not yet come back to me, I am not sure if I understood 100% what he meant, but hopefully somebody else will be so kind as to comment.

Here is a shortish changelog:

- Fix an issue reported by Esben Nielsen <[email protected]> (with suggestion from Sam Ravnborg). Build failed if $O (output dir) was set. This is done by pre-pending $srctree if the shipped list is referenced.

- Also fix calling of gen_initramfs_list.sh if $O (output dir) is set by pre-pending $srctree.

- I also moved initramfs_list to initramfs_list.shipped, to make sure we always have an 'fall back' list (say you unset CONFIG_INITRAMFS_SOURCE and deleted your custom intramfs source directory, then building will not fail).

- Kbuild style cleanups.

- Improved error checking. For example gen_initramfs_list.sh will output a simple list if the target directory is empty, and we verify that the shipped initramfs_list is present before touching it.

- Only update the temp initramfs_list if the source list/directory have changed.

- Cleanup temporary initramfs_list when 'make clean' or 'make mrproper' is called.

This patch should apply to both 2.6.9-bk7 and 2.6.9-mm1.

(Note that evo does some tab/newline damage)

scripts/gen_initramfs_list.sh +18 -4
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/scripts/gen_initramfs_list.sh linux-2.6.9-bk7/scripts/gen_initramfs_list.sh
@@ -76,9 +76,23 @@ parse() {
 	return 0
 }
 
-find "${srcdir}" -printf "%p %m %U %G\n" | \
-while read x; do
-	parse ${x}
-done
+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
+	echo "${dirlist}" | \
+	while read x; do
+		parse ${x}
+	done
+else
+	# Failsafe in case directory is empty
+	cat <<-EOF
+		# This is a very simple initramfs
+
+		dir /dev 0755 0 0
+		nod /dev/console 0600 0 0 c 5 1
+		dir /root 0700 0 0
+	EOF
+fi
 
 exit 0
usr/Makefile +66 -17

103 lines not on this page · raw message

usr/initramfs_list +0 -5
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/usr/initramfs_list linux-2.6.9-bk7/usr/initramfs_list
@@ -1,5 +0,0 @@
-# This is a very simple initramfs - mostly preliminary for future expansion
-
-dir /dev 0755 0 0
-nod /dev/console 0600 0 0 c 5 1
-dir /root 0700 0 0
usr/initramfs_list.shipped +5 -0
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/usr/initramfs_list.shipped linux-2.6.9-bk7/usr/initramfs_list.shipped
@@ -0,0 +1,5 @@
+# This is a very simple initramfs - mostly preliminary for future expansion
+
+dir /dev 0755 0 0
+nod /dev/console 0600 0 0 c 5 1
+dir /root 0700 0 0
Signature · 1 line
Martin Schlemmer
drivers/block/Kconfig +26 -0
diff -uprN -X dontdiff linux-2.6.9-rc4-mm1.orig/drivers/block/Kconfig linux-2.6.9-rc4-mm1/drivers/block/Kconfig
@@ -348,6 +348,32 @@ config BLK_DEV_INITRD
 	  "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
scripts/gen_initramfs_list.sh +98 -0

98 lines not on this page · raw message

usr/Makefile +40 -5

59 lines not on this page · raw message

usr/initramfs_list +0 -5
diff -uprN -X dontdiff linux-2.6.9-rc4-mm1.orig/usr/initramfs_list linux-2.6.9-rc4-mm1/usr/initramfs_list
@@ -1,5 +0,0 @@
-# This is a very simple initramfs - mostly preliminary for future expansion
-
-dir /dev 0755 0 0
-nod /dev/console 0600 0 0 c 5 1
-dir /root 0700 0 0
usr/initramfs_list.shipped +5 -0
diff -uprN -X dontdiff linux-2.6.9-rc4-mm1.orig/usr/initramfs_list.shipped linux-2.6.9-rc4-mm1/usr/initramfs_list.shipped
@@ -0,0 +1,5 @@
+# This is a very simple initramfs - mostly preliminary for future expansion
+
+dir /dev 0755 0 0
+nod /dev/console 0600 0 0 c 5 1
+dir /root 0700 0 0
scripts/gen_initramfs_list.sh +18 -4
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/scripts/gen_initramfs_list.sh linux-2.6.9-bk7/scripts/gen_initramfs_list.sh
@@ -76,9 +76,23 @@ parse() {
 	return 0
 }
 
-find "${srcdir}" -printf "%p %m %U %G\n" | \
-while read x; do
-	parse ${x}
-done
+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
+	echo "${dirlist}" | \
+	while read x; do
+		parse ${x}
+	done
+else
+	# Failsafe in case directory is empty
+	cat <<-EOF
+		# This is a very simple initramfs
+
+		dir /dev 0755 0 0
+		nod /dev/console 0600 0 0 c 5 1
+		dir /root 0700 0 0
+	EOF
+fi
 
 exit 0
usr/Makefile +66 -17

103 lines not on this page · raw message

usr/initramfs_list +0 -5
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/usr/initramfs_list linux-2.6.9-bk7/usr/initramfs_list
@@ -1,5 +0,0 @@
-# This is a very simple initramfs - mostly preliminary for future expansion
-
-dir /dev 0755 0 0
-nod /dev/console 0600 0 0 c 5 1
-dir /root 0700 0 0
usr/initramfs_list.shipped +5 -0
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/usr/initramfs_list.shipped linux-2.6.9-bk7/usr/initramfs_list.shipped
@@ -0,0 +1,5 @@
+# This is a very simple initramfs - mostly preliminary for future expansion
+
+dir /dev 0755 0 0
+nod /dev/console 0600 0 0 c 5 1
+dir /root 0700 0 0
#2 lore raw
Quoted 26 lines · Martin Schlemmer [c]

Here is some updates after talking to Sam Ravnborg. He did not yet come
back to me, I am not sure if I understood 100% what he meant, but hopefully somebody else will be so kind as to comment.

Here is a shortish changelog:

- Fix an issue reported by Esben Nielsen <[email protected]> (with suggestion from Sam Ravnborg). Build failed if $O (output dir) was set. This is done by pre-pending $srctree if the shipped list is referenced.

- Also fix calling of gen_initramfs_list.sh if $O (output dir) is set by pre-pending $srctree.

- I also moved initramfs_list to initramfs_list.shipped, to make sure we always have an 'fall back' list (say you unset CONFIG_INITRAMFS_SOURCE and deleted your custom intramfs source directory, then building will not fail).

- Kbuild style cleanups.

- Improved error checking. For example gen_initramfs_list.sh will output a simple list if the target directory is empty, and we verify that the shipped initramfs_list is present before touching it.

Quoted 8 lines

- Only update the temp initramfs_list if the source list/directory have changed.

- Cleanup temporary initramfs_list when 'make clean' or 'make mrproper' is called.

This patch should apply to both 2.6.9-bk7 and 2.6.9-mm1.

hmm. You have a patch in the email body and two slightly different patches as attachments. All bases covered ;)

I'll stick "select-cpio_list-or-source-directory-for-initramfs-image-v7.patch" into -mm but would prefer that this patch come in via Sam's tree please.

#3 lore raw
Quoted 34 lines · Andrew Morton
Quoted 33 lines · Martin Schlemmer [c]

Here is some updates after talking to Sam Ravnborg. He did not yet come
back to me, I am not sure if I understood 100% what he meant, but hopefully somebody else will be so kind as to comment.

Here is a shortish changelog:

- Fix an issue reported by Esben Nielsen <[email protected]> (with suggestion from Sam Ravnborg). Build failed if $O (output dir) was set. This is done by pre-pending $srctree if the shipped list is referenced.

- Also fix calling of gen_initramfs_list.sh if $O (output dir) is set by pre-pending $srctree.

- I also moved initramfs_list to initramfs_list.shipped, to make sure we always have an 'fall back' list (say you unset CONFIG_INITRAMFS_SOURCE and deleted your custom intramfs source directory, then building will not fail).

- Kbuild style cleanups.

- Improved error checking. For example gen_initramfs_list.sh will output a simple list if the target directory is empty, and we verify that the shipped initramfs_list is present before touching it.

- Only update the temp initramfs_list if the source list/directory have changed.

- Cleanup temporary initramfs_list when 'make clean' or 'make mrproper' is called.

Quoted 9 lines
Quoted 1 line

This patch should apply to both 2.6.9-bk7 and 2.6.9-mm1.

hmm. You have a patch in the email body and two slightly different patches as attachments. All bases covered ;)

I'll stick "select-cpio_list-or-source-directory-for-initramfs-image-v7.patch" into -mm but would prefer that this patch come in via Sam's tree please.

No comment =) v7 should be fine, but it have one typo that wont affect anything, so here is v8. I have tested with O= set, and all fail conditions I could think of, and it seems all right.

Thanks,

Signature · 1 line
Martin Schlemmer
scripts/gen_initramfs_list.sh +18 -4
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/scripts/gen_initramfs_list.sh linux-2.6.9-bk7/scripts/gen_initramfs_list.sh
@@ -76,9 +76,23 @@ parse() {
 	return 0
 }
 
-find "${srcdir}" -printf "%p %m %U %G\n" | \
-while read x; do
-	parse ${x}
-done
+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
+	echo "${dirlist}" | \
+	while read x; do
+		parse ${x}
+	done
+else
+	# Failsafe in case directory is empty
+	cat <<-EOF
+		# This is a very simple initramfs
+
+		dir /dev 0755 0 0
+		nod /dev/console 0600 0 0 c 5 1
+		dir /root 0700 0 0
+	EOF
+fi
 
 exit 0
usr/Makefile +66 -17

103 lines not on this page · raw message

usr/initramfs_list +0 -5
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/usr/initramfs_list linux-2.6.9-bk7/usr/initramfs_list
@@ -1,5 +0,0 @@
-# This is a very simple initramfs - mostly preliminary for future expansion
-
-dir /dev 0755 0 0
-nod /dev/console 0600 0 0 c 5 1
-dir /root 0700 0 0
usr/initramfs_list.shipped +5 -0
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/usr/initramfs_list.shipped linux-2.6.9-bk7/usr/initramfs_list.shipped
@@ -0,0 +1,5 @@
+# This is a very simple initramfs - mostly preliminary for future expansion
+
+dir /dev 0755 0 0
+nod /dev/console 0600 0 0 c 5 1
+dir /root 0700 0 0
#4 lore raw
In reply to Andrew Morton
Quoted 8 lines · Andrew Morton

"Martin Schlemmer [c]" <[email protected]> wrote:

hmm. You have a patch in the email body and two slightly different patches as attachments. All bases covered ;)

I'll stick "select-cpio_list-or-source-directory-for-initramfs-image-v7.patch" into -mm but would prefer that this patch come in via Sam's tree please.

Fighting with my backlog..
While being away from Linux for a while my kernel suddenly would not compile. A make mrproper was needed.
This was no good and I realised that generating asm_offsets.h for i386 did not check all dependencies.

My fix involve all architectures and I want that pushed -mm before anything else. And it get rid of the annoying print "asm_offsets.h is up to date"
I do not want to think what horor it could trigger if we change a constant and asm_offsets.h was not re-generated when it should.

Sam

#5 lore raw
In reply to Martin Schlemmer [c]
Quoted 5 lines · Martin Schlemmer [c]

Hi,

Here is some updates after talking to Sam Ravnborg. He did not yet come back to me, I am not sure if I understood 100% what he meant, but hopefully somebody else will be so kind as to comment.

Hi Martin.
Took a look at your patch and did not like it. Attached my version which I will push towards Linus soon.

Main difference is that I move logic to gen_initramfs_list-sh. Then I also use filechk - so I actually generate the file - but do not update the final file unless needed.

Current patch will not rebuild image if one of the programs listed are changed. But it should give a good foundation to do so.

Sam

# This is a BitKeeper generated diff -Nru style patch. #
# ChangeSet
# 2004/10/27 00:07:03+02:00 [email protected]
# kbuild/usr: initramfs list fixed and simplified
#

#   Moving logic to scripts/gen_initramfs_list.sh make a nice cleanup in
#   usr/Makefile.
#   A new initramfs image will be generated if the initramfs_list file changes.
#   This patch also fixes the bug with make O=..

#
# Signed-off-by: Sam Ravnborg <[email protected]>
#
# usr/Makefile
# 2004/10/27 00:06:46+02:00 [email protected] +9 -20
# Simplify - logic moved to gen_initramfs_list.sh script
#

# scripts/gen_initramfs_list.sh
#   2004/10/27 00:06:46+02:00 [email protected] +35 -16
#   Moved logic to this file.
#   It now handles both dirs, files and no input given.
#   For invalid input print error and boild out.
# 
# scripts/Makefile.lib
#   2004/10/27 00:06:46+02:00 [email protected] +27 -0
#   Added filechk - copy from top level Makefile
# 
# BitKeeper/etc/ignore
#   2004/10/27 00:06:24+02:00 [email protected] +1 -0
#   added usr/initramfs_list
# 
# BitKeeper/deleted/.del-initramfs_list~e02c62efaa478389
#   2004/10/27 00:02:17+02:00 [email protected] +0 -0
#   Delete: usr/initramfs_list
# 
diff -Nru a/scripts/Makefile.lib b/scripts/Makefile.lib
--- a/scripts/Makefile.lib	2004-10-27 00:07:50 +02:00
+++ b/scripts/Makefile.lib	2004-10-27 00:07:50 +02:00
@@ -232,3 +232,30 @@
 # Usage:
 # $(Q)$(MAKE) $(build)=dir
 build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
+
+# filechk is used to check if the content of a generated file is updated.
+# Sample usage:
+# define filechk_sample
+#	echo $KERNELRELEASE
+# endef
+# version.h : Makefile
+#	$(call filechk,sample)
+# The rule defined shall write to stdout the content of the new file.
+# The existing file will be compared with the new one.
+# - If no file exist it is created
+# - If the content differ the new file is used
+# - If they are equal no change, and no timestamp update
+
+define filechk
+	$(Q)set -e;				\
+	echo '  CHK     $@';			\
+	mkdir -p $(dir $@);			\
+	$(filechk_$(1)) $(2) > [email protected];		\
+	if [ -r $@ ] && cmp -s $@ [email protected]; then	\
+		rm -f [email protected];			\
+	else					\
+		echo '  UPD     $@';		\
+		mv -f [email protected] $@;		\
+	fi
+endef
+
diff -Nru a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh
--- a/scripts/gen_initramfs_list.sh	2004-10-27 00:07:50 +02:00
+++ b/scripts/gen_initramfs_list.sh	2004-10-27 00:07:50 +02:00
@@ -2,25 +2,26 @@
 # Copyright (C) Martin Schlemmer <[email protected]>
 # 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.
+# Generate a newline separated list of entries from the file/directory pointed
+# out by the environment variable: CONFIG_INITRAMFS_SOURCE
 #
-# Arguements: $1 -- the source directory
+# If CONFIG_INITRAMFS_SOURCE is non-existing then generate a small dummy file.
+#
+# The output is suitable for gen_init_cpio as found in usr/Makefile.
 #
 # TODO:  Add support for symlinks, sockets and pipes when gen_init_cpio
 #        supports them.

-usage() {
- echo "Usage: $0 initramfs-source-dir"
- exit 1
+simple_initramfs() {
+ cat <<-EOF
+ # This is a very simple initramfs
+
+ dir /dev 0755 0 0
+ nod /dev/console 0600 0 0 c 5 1
+ dir /root 0700 0 0
+ EOF
}

-srcdir=$(echo "$1" | sed -e 's://*:/:g')
-
-if [ "$#" -gt 1 -o ! -d "${srcdir}" ]; then
- usage
-fi
-
filetype() {
local argv1="$1"

@@ -76,9 +77,27 @@
return 0
}

-find "${srcdir}" -printf "%p %m %U %G\n" | \
-while read x; do
- parse ${x}
-done
+if [ -z $1 ]; then
+ simple_initramfs
+elif [ -f $1 ]; then
+ cat $1
+elif [ -d $1 ]; then
+ srcdir=$(echo "$1" | sed -e 's://*:/:g')
+ 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
+ echo "${dirlist}" | \
+ while read x; do
+ parse ${x}
+ done
+ else
+ # Failsafe in case directory is empty
+ simple_initramfs
+ fi
+else
+ echo " $0: Cannot open '$1' (CONFIG_INITRAMFS_SOURCE)" >&2
+ exit 1
+fi

exit 0

usr/Makefile +9 -20
diff -Nru a/usr/Makefile b/usr/Makefile
@@ -3,7 +3,7 @@
 
 hostprogs-y  := gen_init_cpio
 
-clean-files := initramfs_data.cpio.gz
+clean-files := initramfs_data.cpio.gz initramfs_list
 
 # If you want a different list of files in the initramfs_data.cpio
 # then you can either overwrite the cpio_list in this directory
@@ -23,28 +23,17 @@
 # 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)
+filechk_initramfs_list = $(CONFIG_SHELL) \
+ $(srctree)/scripts/gen_initramfs_list.sh $(CONFIG_INITRAMFS_SOURCE)
+			   
+$(obj)/initramfs_list: FORCE
+	$(call filechk,initramfs_list)
 
 quiet_cmd_cpio = CPIO    $@
-      cmd_cpio = ./$< $(INITRAMFS_LIST) > $@
+      cmd_cpio = ./$< $(obj)/initramfs_list > $@
 
-$(obj)/initramfs_data.cpio: $(obj)/gen_init_cpio $(initramfs-y) $(INITRAMFS_LIST) FORCE
+$(obj)/initramfs_data.cpio: $(obj)/gen_init_cpio \
+                            $(initramfs-y) $(obj)/initramfs_list FORCE
 	$(call if_changed,cpio)
 
 targets += initramfs_data.cpio
usr/initramfs_list deleted +0 -5
diff -Nru a/usr/initramfs_list b/usr/initramfs_list
@@ -1,5 +0,0 @@
-# This is a very simple initramfs - mostly preliminary for future expansion
-
-dir /dev 0755 0 0
-nod /dev/console 0600 0 0 c 5 1
-dir /root 0700 0 0
#6 lore raw
Quoted 11 lines · Sam Ravnborg
Quoted 5 lines · Martin Schlemmer [c]

Hi,

Here is some updates after talking to Sam Ravnborg. He did not yet come back to me, I am not sure if I understood 100% what he meant, but hopefully somebody else will be so kind as to comment.

Hi Martin.
Took a look at your patch and did not like it. Attached my version which I will push towards Linus soon.

Thats ok - I never said I was an expert with kbuild =)

Quoted 4 lines

Main difference is that I move logic to gen_initramfs_list-sh. Then I also use filechk - so I actually generate the file - but do not update the final file unless needed.

Much more elegant, thanks.

Quoted 4 lines

Current patch will not rebuild image if one of the programs listed are changed. But it should give a good foundation to do so.

I will see if I get the time to get that implemented elegantly if you do not beat me to it.

Thanks,

Signature · 1 line
Martin Schlemmer
#7 lore raw
Quoted 7 lines · Martin Schlemmer [c]
Quoted 4 lines

Current patch will not rebuild image if one of the programs listed are changed. But it should give a good foundation to do so.

I will see if I get the time to get that implemented elegantly if you do not beat me to it.

Something as simple as putting relevant timestamps in the generated file as coment should do it.
If timestamp differ then initramfs_list will be updated and initramfs image will be remade.

All changes isolated to gen_initramfs_list.sh.
Care to give that a spin?

Sam

#8 lore raw
Quoted 10 lines · Sam Ravnborg
Quoted 7 lines · Martin Schlemmer [c]
Quoted 4 lines

Current patch will not rebuild image if one of the programs listed are changed. But it should give a good foundation to do so.

I will see if I get the time to get that implemented elegantly if you do not beat me to it.

Quoted 8 lines

Something as simple as putting relevant timestamps in the generated file as coment should do it.
If timestamp differ then initramfs_list will be updated and initramfs image will be remade.

All changes isolated to gen_initramfs_list.sh.
Care to give that a spin?

Yep. Bit late now, so will only get to it tomorrow though.

Signature · 1 line
Martin Schlemmer
#9 lore raw
In reply to Sam Ravnborg
Quoted 9 lines · Sam Ravnborg
Quoted 5 lines · Martin Schlemmer [c]
Quoted 4 lines

Current patch will not rebuild image if one of the programs listed are changed. But it should give a good foundation to do so.

Quoted 7 lines
Quoted 2 lines

I will see if I get the time to get that implemented elegantly if you do not beat me to it.

Something as simple as putting relevant timestamps in the generated file as coment should do it.
If timestamp differ then initramfs_list will be updated and initramfs image will be remade.

please put the timestamps somewhere that don't end up in the final kernel....

My life involves reproducing complete FLASH systems at any point in time exactly the same as the ones I produced at the previous point in time, I've had to hack about 5 or 6 things in the kernel to do this, I'd like to try avoiding people adding any more unless they really are needed.. or at least give me some way to override it ...

Dave.

#10 lore raw
Quoted 4 lines · Dave Airlie

If timestamp differ then initramfs_list will be updated and initramfs

Quoted 1 line

image will be remade.

please put the timestamps somewhere that don't end up in the final kernel....

initramfs_list is only an inputfile to gen_cpio. So comments in this file will/should not end up in final image.

Quoted 3 lines

My life involves reproducing complete FLASH systems at any point in time exactly the same as the ones I produced at the previous point in time, I've had to hack about 5 or 6 things in the kernel to do this,

Could you try to list the places - maybe they do not all make sense.

Sam

#11 lore raw

timestamps in kernel was Re: [PATCH 2.6.9-bk7] Select cpio_list or source directory for initramfs image updates [u]

Quoted 2 lines

Could you try to list the places - maybe they do not all make sense.

Here is my current list in things that directly affect me:
sound/core/info.c contains __DATE__ to tell what date it was compiled on, I'm not sure this is really needed. usr/gen_init_cpio.c uses time(NULL) to set mtimes, scripts/Makefile.lib uses gzip with no -n flag

I can supply patches to get rid of these if people think they are a good/bad idea...

I also hack scripts/mkcompile_h so it never changes for me (this one is acceptable as it is very obvious that you have to do it...)

Dave.

#12 lore raw
In reply to Sam Ravnborg
Quoted 10 lines · Sam Ravnborg
Quoted 7 lines · Martin Schlemmer [c]
Quoted 4 lines

Current patch will not rebuild image if one of the programs listed are changed. But it should give a good foundation to do so.

I will see if I get the time to get that implemented elegantly if you do not beat me to it.

Quoted 8 lines

Something as simple as putting relevant timestamps in the generated file as coment should do it.
If timestamp differ then initramfs_list will be updated and initramfs image will be remade.

All changes isolated to gen_initramfs_list.sh.
Care to give that a spin?

How about below? Works as expected. I am open to suggestions short of coding a util to print numeric mtimes besides find, but for the life of me could not think of another way ...

scripts/gen_initramfs_list.sh +19 -4
diff -uprN -X dontdiff linux-2.6.9.orig/scripts/gen_initramfs_list.sh linux-2.6.9/scripts/gen_initramfs_list.sh
@@ -37,6 +37,18 @@ filetype() {
 	return 0
 }
 
+print_mtime() {
+	local argv1="$1"
+	local my_mtime="0"
+
+	if [ -e "${argv1}" ]; then
+		my_mtime=$(find "${argv1}" -printf "%T@\n" | sort -r | head -n 1)
+	fi
+	
+	echo "# Last modified: ${my_mtime}"
+	echo
+}
+
 parse() {
 	local location="$1"
 	local name="${location/${srcdir}//}"
@@ -77,16 +89,19 @@ parse() {
 	return 0
 }
 
-if [ -z $1 ]; then
+if [ -z "$1" ]; then
 	simple_initramfs
-elif [ -f $1 ]; then
-	cat $1
-elif [ -d $1 ]; then
+elif [ -f "$1" ]; then
+	print_mtime "$1"
+	cat "$1"
+elif [ -d "$1" ]; then
 	srcdir=$(echo "$1" | sed -e 's://*:/:g')
 	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 "$1"
+		
 		echo "${dirlist}" | \
 		while read x; do
 			parse ${x}
Signature · 1 line
Martin Schlemmer
scripts/gen_initramfs_list.sh +19 -4
diff -uprN -X dontdiff linux-2.6.9.orig/scripts/gen_initramfs_list.sh linux-2.6.9/scripts/gen_initramfs_list.sh
@@ -37,6 +37,18 @@ filetype() {
 	return 0
 }
 
+print_mtime() {
+	local argv1="$1"
+	local my_mtime="0"
+
+	if [ -e "${argv1}" ]; then
+		my_mtime=$(find "${argv1}" -printf "%T@\n" | sort -r | head -n 1)
+	fi
+	
+	echo "# Last modified: ${my_mtime}"
+	echo
+}
+
 parse() {
 	local location="$1"
 	local name="${location/${srcdir}//}"
@@ -77,16 +89,19 @@ parse() {
 	return 0
 }
 
-if [ -z $1 ]; then
+if [ -z "$1" ]; then
 	simple_initramfs
-elif [ -f $1 ]; then
-	cat $1
-elif [ -d $1 ]; then
+elif [ -f "$1" ]; then
+	print_mtime "$1"
+	cat "$1"
+elif [ -d "$1" ]; then
 	srcdir=$(echo "$1" | sed -e 's://*:/:g')
 	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 "$1"
+		
 		echo "${dirlist}" | \
 		while read x; do
 			parse ${x}
#13 lore raw
Quoted 5 lines · Martin Schlemmer [c]
Quoted 1 line

How about below? Works as expected. I am open to suggestions short of coding a util to print numeric mtimes besides find, but for the life of me could not think of another way ...

Looks good.
Please send me a version that is not whitespace damaged and with a proper changelog.
The changelog shall be descriptive in itself without relying on context from privious patch or comments in a mail.

Sam

#14 lore raw
Quoted 7 lines · Sam Ravnborg
Quoted 5 lines · Martin Schlemmer [c]
Quoted 1 line

How about below? Works as expected. I am open to suggestions short of coding a util to print numeric mtimes besides find, but for the life of me could not think of another way ...

Quoted 6 lines

Looks good.
Please send me a version that is not whitespace damaged and with a proper changelog.
The changelog shall be descriptive in itself without relying on context from privious patch or comments in a mail.

Unfortunately evolution 2.0 seems to have some issues, and the whitespace damage is one of them. Anyhow, here is the patch attached, with a changelog. Hope that is OK.

----

Add a comment to gen_initramfs_list.sh output that contains the numeric mtime of the last modified file in the source directory, or the mtime of the source list. This should cause the initramfs image to be rebuild if a file in the source directory changed, or the source list (if that was used rather than a directory as source).

Signature · 1 line
Martin Schlemmer
scripts/gen_initramfs_list.sh +19 -4
diff -uprN -X dontdiff linux-2.6.9.orig/scripts/gen_initramfs_list.sh linux-2.6.9/scripts/gen_initramfs_list.sh
@@ -37,6 +37,18 @@ filetype() {
 	return 0
 }
 
+print_mtime() {
+	local argv1="$1"
+	local my_mtime="0"
+
+	if [ -e "${argv1}" ]; then
+		my_mtime=$(find "${argv1}" -printf "%T@\n" | sort -r | head -n 1)
+	fi
+	
+	echo "# Last modified: ${my_mtime}"
+	echo
+}
+
 parse() {
 	local location="$1"
 	local name="${location/${srcdir}//}"
@@ -77,16 +89,19 @@ parse() {
 	return 0
 }
 
-if [ -z $1 ]; then
+if [ -z "$1" ]; then
 	simple_initramfs
-elif [ -f $1 ]; then
-	cat $1
-elif [ -d $1 ]; then
+elif [ -f "$1" ]; then
+	print_mtime "$1"
+	cat "$1"
+elif [ -d "$1" ]; then
 	srcdir=$(echo "$1" | sed -e 's://*:/:g')
 	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 "$1"
+		
 		echo "${dirlist}" | \
 		while read x; do
 			parse ${x}