* [PATCH 2.6.9-rc2-mm2] Select cpio_list or source directory for initramfs image [u]
@ 2004-09-26 22:47 Martin Schlemmer [c]
2004-10-17 15:14 ` Martin Schlemmer [c]
0 siblings, 1 reply; 3+ messages in thread
From: Martin Schlemmer [c] @ 2004-09-26 22:47 UTC (permalink / raw)
To: Andrew Morton; +Cc: Linux Kernel Mailing Lists
[-- Attachment #1.1: Type: text/plain, Size: 6804 bytes --]
Hi,
Attached is a patch that adds CONFIG_INITRAMFS_SOURCE, enabling you to
either specify a file as cpio_list, or a directory to generate a list
from. It depreciate the INITRAMFS_LIST environment variable introduced
not long ago.
There are some issues (suggestions/patches welcome) that I am not
sure about:
1) I put the menu entry under block devices, but I am not sure if
this is the correct location?
2) There might be a better (or more correct) way to do this with
kbuild?
3) Variable names and especially help text needs some love.
4) I am not sure if I am duplicating work in progress?
I did add an inline version of the patch, but the new evo 2.0 is
brain dead again concerning patches (yes, even with 'preformat'),
so I attached it as well. Also, I have not signed it off, as this is
more for review/comments.
Comments will be appreciated.
-----
diff -urpN -X dontdiff linux-2.6.9-rc2-mm2/drivers/block/Kconfig linux-2.6.9-rc2-mm2.az/drivers/block/Kconfig
--- linux-2.6.9-rc2-mm2/drivers/block/Kconfig 2004-09-24 02:20:02.000000000 +0200
+++ linux-2.6.9-rc2-mm2.az/drivers/block/Kconfig 2004-09-27 00:08:01.970645528 +0200
@@ -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
diff -urpN -X dontdiff linux-2.6.9-rc2-mm2/scripts/gen_initramfs_list.sh linux-2.6.9-rc2-mm2.az/scripts/gen_initramfs_list.sh
--- linux-2.6.9-rc2-mm2/scripts/gen_initramfs_list.sh 1970-01-01 02:00:00.000000000 +0200
+++ linux-2.6.9-rc2-mm2.az/scripts/gen_initramfs_list.sh 2004-09-26 22:56:09.881182768 +0200
@@ -0,0 +1,84 @@
+#!/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
diff -urpN -X dontdiff linux-2.6.9-rc2-mm2/usr/Makefile linux-2.6.9-rc2-mm2.az/usr/Makefile
--- linux-2.6.9-rc2-mm2/usr/Makefile 2004-09-26 23:04:47.648470176 +0200
+++ linux-2.6.9-rc2-mm2.az/usr/Makefile 2004-09-27 00:00:54.733595432 +0200
@@ -8,7 +8,7 @@ clean-files := initramfs_data.cpio.gz
# 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
@@ -23,6 +23,24 @@ $(obj)/initramfs_data.o: $(obj)/initramf
# 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) > $@
Regards,
--
Martin Schlemmer
[-- Attachment #1.2: initramfs-source.patch --]
[-- Type: text/x-patch, Size: 5046 bytes --]
diff -urpN -X dontdiff linux-2.6.9-rc2-mm2/drivers/block/Kconfig linux-2.6.9-rc2-mm2.az/drivers/block/Kconfig
--- linux-2.6.9-rc2-mm2/drivers/block/Kconfig 2004-09-24 02:20:02.000000000 +0200
+++ linux-2.6.9-rc2-mm2.az/drivers/block/Kconfig 2004-09-27 00:08:01.970645528 +0200
@@ -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
diff -urpN -X dontdiff linux-2.6.9-rc2-mm2/scripts/gen_initramfs_list.sh linux-2.6.9-rc2-mm2.az/scripts/gen_initramfs_list.sh
--- linux-2.6.9-rc2-mm2/scripts/gen_initramfs_list.sh 1970-01-01 02:00:00.000000000 +0200
+++ linux-2.6.9-rc2-mm2.az/scripts/gen_initramfs_list.sh 2004-09-26 22:56:09.881182768 +0200
@@ -0,0 +1,84 @@
+#!/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
diff -urpN -X dontdiff linux-2.6.9-rc2-mm2/usr/Makefile linux-2.6.9-rc2-mm2.az/usr/Makefile
--- linux-2.6.9-rc2-mm2/usr/Makefile 2004-09-26 23:04:47.648470176 +0200
+++ linux-2.6.9-rc2-mm2.az/usr/Makefile 2004-09-27 00:00:54.733595432 +0200
@@ -8,7 +8,7 @@ clean-files := initramfs_data.cpio.gz
# 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
@@ -23,6 +23,24 @@ $(obj)/initramfs_data.o: $(obj)/initramf
# 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) > $@
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH 2.6.9-rc2-mm2] Select cpio_list or source directory for initramfs image [u] 2004-09-26 22:47 [PATCH 2.6.9-rc2-mm2] Select cpio_list or source directory for initramfs image [u] Martin Schlemmer [c] @ 2004-10-17 15:14 ` Martin Schlemmer [c] 2004-10-17 15:33 ` Martin Schlemmer [c] 0 siblings, 1 reply; 3+ messages in thread From: Martin Schlemmer [c] @ 2004-10-17 15:14 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux Kernel Mailing Lists [-- Attachment #1.1: Type: text/plain, Size: 7738 bytes --] On Mon, 2004-09-27 at 00:47 +0200, Martin Schlemmer wrote: Hi, > Attached is a patch that adds CONFIG_INITRAMFS_SOURCE, enabling you to > either specify a file as cpio_list, or a directory to generate a list > from. It depreciate the INITRAMFS_LIST environment variable introduced > not long ago. > > There are some issues (suggestions/patches welcome) that I am not > sure about: > 1) I put the menu entry under block devices, but I am not sure if > this is the correct location? > 2) There might be a better (or more correct) way to do this with > kbuild? > 3) Variable names and especially help text needs some love. > 4) I am not sure if I am duplicating work in progress? > > I did add an inline version of the patch, but the new evo 2.0 is > brain dead again concerning patches (yes, even with 'preformat'), > so I attached it as well. Also, I have not signed it off, as this is > more for review/comments. > > Comments will be appreciated. > Attached is a patch (also inline, but evo 2.0 seems to not get 'preformat' right anymore) that replaces select-cpio_list-or-source-directory-for-initramfs-image.patch in 2.6.9-rc4-mm1, including the indentation fix, as well as fix an issue reported by Esben Nielsen <simlo@phys.au.dk> as proposed by Sam Ravnborg (Should fix failing to build if $O is set). 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 list/directory, then building will not fail). Signed-off-by: Martin Schlemmer <azarah@nosferatu.za.org> diff -urpN linux-2.6.9-rc4-mm1.orig/drivers/block/Kconfig linux-2.6.9-rc4-mm1/drivers/block/Kconfig --- linux-2.6.9-rc4-mm1.orig/drivers/block/Kconfig 2004-10-17 17:00:13.424934520 +0200 +++ linux-2.6.9-rc4-mm1/drivers/block/Kconfig 2004-10-17 16:58:35.451828696 +0200 @@ -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 diff -urpN linux-2.6.9-rc4-mm1.orig/scripts/gen_initramfs_list.sh linux-2.6.9-rc4-mm1/scripts/gen_initramfs_list.sh --- linux-2.6.9-rc4-mm1.orig/scripts/gen_initramfs_list.sh 1970-01-01 02:00:00.000000000 +0200 +++ linux-2.6.9-rc4-mm1/scripts/gen_initramfs_list.sh 2004-10-17 16:58:28.939818672 +0200 @@ -0,0 +1,84 @@ +#!/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 diff -urpN linux-2.6.9-rc4-mm1.orig/usr/Makefile linux-2.6.9-rc4-mm1/usr/Makefile --- linux-2.6.9-rc4-mm1.orig/usr/Makefile 2004-10-17 17:00:13.433933152 +0200 +++ linux-2.6.9-rc4-mm1/usr/Makefile 2004-10-17 16:59:56.040577344 +0200 @@ -8,7 +8,7 @@ clean-files := initramfs_data.cpio.gz # 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 @@ -23,6 +23,25 @@ $(obj)/initramfs_data.o: $(obj)/initramf # 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 $@'; \ + echo 'cp -f $(srctree)/$(CONFIG_INITRAMFS_SOURCE).shipped $@'; \ + fi; \ + elif test -d $(CONFIG_INITRAMFS_SOURCE); then \ + echo 'scripts/gen_initramfs_list.sh $(CONFIG_INITRAMFS_SOURCE) > $@'; \ + else \ + echo 'echo Using shipped $@'; \ + echo 'cp -f $(srctree)/$(CONFIG_INITRAMFS_SOURCE).shipped $@'; \ + fi) + +$(INITRAMFS_LIST): FORCE + $(call cmd,gen_list) + quiet_cmd_cpio = CPIO $@ cmd_cpio = ./$< $(INITRAMFS_LIST) > $@ diff -urpN linux-2.6.9-rc4-mm1.orig/usr/initramfs_list linux-2.6.9-rc4-mm1/usr/initramfs_list --- linux-2.6.9-rc4-mm1.orig/usr/initramfs_list 2004-10-17 16:48:14.262263864 +0200 +++ linux-2.6.9-rc4-mm1/usr/initramfs_list 1970-01-01 02:00:00.000000000 +0200 @@ -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 diff -urpN linux-2.6.9-rc4-mm1.orig/usr/initramfs_list.shipped linux-2.6.9-rc4-mm1/usr/initramfs_list.shipped --- linux-2.6.9-rc4-mm1.orig/usr/initramfs_list.shipped 1970-01-01 02:00:00.000000000 +0200 +++ linux-2.6.9-rc4-mm1/usr/initramfs_list.shipped 2004-10-17 16:28:57.667093056 +0200 @@ -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 Thanks, -- Martin Schlemmer [-- Attachment #1.2: select-cpio_list-or-source-directory-for-initramfs-image.patch --] [-- Type: text/x-patch, Size: 6057 bytes --] diff -urpN linux-2.6.9-rc4-mm1.orig/drivers/block/Kconfig linux-2.6.9-rc4-mm1/drivers/block/Kconfig --- linux-2.6.9-rc4-mm1.orig/drivers/block/Kconfig 2004-10-17 17:00:13.424934520 +0200 +++ linux-2.6.9-rc4-mm1/drivers/block/Kconfig 2004-10-17 16:58:35.451828696 +0200 @@ -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 diff -urpN linux-2.6.9-rc4-mm1.orig/scripts/gen_initramfs_list.sh linux-2.6.9-rc4-mm1/scripts/gen_initramfs_list.sh --- linux-2.6.9-rc4-mm1.orig/scripts/gen_initramfs_list.sh 1970-01-01 02:00:00.000000000 +0200 +++ linux-2.6.9-rc4-mm1/scripts/gen_initramfs_list.sh 2004-10-17 16:58:28.939818672 +0200 @@ -0,0 +1,84 @@ +#!/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 diff -urpN linux-2.6.9-rc4-mm1.orig/usr/Makefile linux-2.6.9-rc4-mm1/usr/Makefile --- linux-2.6.9-rc4-mm1.orig/usr/Makefile 2004-10-17 17:00:13.433933152 +0200 +++ linux-2.6.9-rc4-mm1/usr/Makefile 2004-10-17 16:59:56.040577344 +0200 @@ -8,7 +8,7 @@ clean-files := initramfs_data.cpio.gz # 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 @@ -23,6 +23,25 @@ $(obj)/initramfs_data.o: $(obj)/initramf # 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 $@'; \ + echo 'cp -f $(srctree)/$(CONFIG_INITRAMFS_SOURCE).shipped $@'; \ + fi; \ + elif test -d $(CONFIG_INITRAMFS_SOURCE); then \ + echo 'scripts/gen_initramfs_list.sh $(CONFIG_INITRAMFS_SOURCE) > $@'; \ + else \ + echo 'echo Using shipped $@'; \ + echo 'cp -f $(srctree)/$(CONFIG_INITRAMFS_SOURCE).shipped $@'; \ + fi) + +$(INITRAMFS_LIST): FORCE + $(call cmd,gen_list) + quiet_cmd_cpio = CPIO $@ cmd_cpio = ./$< $(INITRAMFS_LIST) > $@ diff -urpN linux-2.6.9-rc4-mm1.orig/usr/initramfs_list linux-2.6.9-rc4-mm1/usr/initramfs_list --- linux-2.6.9-rc4-mm1.orig/usr/initramfs_list 2004-10-17 16:48:14.262263864 +0200 +++ linux-2.6.9-rc4-mm1/usr/initramfs_list 1970-01-01 02:00:00.000000000 +0200 @@ -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 diff -urpN linux-2.6.9-rc4-mm1.orig/usr/initramfs_list.shipped linux-2.6.9-rc4-mm1/usr/initramfs_list.shipped --- linux-2.6.9-rc4-mm1.orig/usr/initramfs_list.shipped 1970-01-01 02:00:00.000000000 +0200 +++ linux-2.6.9-rc4-mm1/usr/initramfs_list.shipped 2004-10-17 16:28:57.667093056 +0200 @@ -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 [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 2.6.9-rc2-mm2] Select cpio_list or source directory for initramfs image [u] 2004-10-17 15:14 ` Martin Schlemmer [c] @ 2004-10-17 15:33 ` Martin Schlemmer [c] 0 siblings, 0 replies; 3+ messages in thread From: Martin Schlemmer [c] @ 2004-10-17 15:33 UTC (permalink / raw) To: Andrew Morton; +Cc: Linux Kernel Mailing Lists [-- Attachment #1.1: Type: text/plain, Size: 7842 bytes --] On Sun, 2004-10-17 at 17:14 +0200, Martin Schlemmer wrote: > On Mon, 2004-09-27 at 00:47 +0200, Martin Schlemmer wrote: > > Hi, > > > Attached is a patch that adds CONFIG_INITRAMFS_SOURCE, enabling you to > > either specify a file as cpio_list, or a directory to generate a list > > from. It depreciate the INITRAMFS_LIST environment variable introduced > > not long ago. > > > > There are some issues (suggestions/patches welcome) that I am not > > sure about: > > 1) I put the menu entry under block devices, but I am not sure if > > this is the correct location? > > 2) There might be a better (or more correct) way to do this with > > kbuild? > > 3) Variable names and especially help text needs some love. > > 4) I am not sure if I am duplicating work in progress? > > > > I did add an inline version of the patch, but the new evo 2.0 is > > brain dead again concerning patches (yes, even with 'preformat'), > > so I attached it as well. Also, I have not signed it off, as this is > > more for review/comments. > > > > Comments will be appreciated. > > > > Attached is a patch (also inline, but evo 2.0 seems to not get > 'preformat' right anymore) that replaces > select-cpio_list-or-source-directory-for-initramfs-image.patch in > 2.6.9-rc4-mm1, including the indentation fix, as well as fix an issue > reported by Esben Nielsen <simlo@phys.au.dk> as proposed by Sam Ravnborg > (Should fix failing to build if $O is set). > > 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 list/directory, then building will not fail). > Here is a working one tested on a clean tree - sorry for first boo-boo. Signed-off-by: Martin Schlemmer <azarah@nosferatu.za.org> diff -urpN linux-2.6.9-rc4-mm1.orig/drivers/block/Kconfig linux-2.6.9-rc4-mm1/drivers/block/Kconfig --- linux-2.6.9-rc4-mm1.orig/drivers/block/Kconfig 2004-10-17 17:00:13.424934520 +0200 +++ linux-2.6.9-rc4-mm1/drivers/block/Kconfig 2004-10-17 16:58:35.451828696 +0200 @@ -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 diff -urpN linux-2.6.9-rc4-mm1.orig/scripts/gen_initramfs_list.sh linux-2.6.9-rc4-mm1/scripts/gen_initramfs_list.sh --- linux-2.6.9-rc4-mm1.orig/scripts/gen_initramfs_list.sh 1970-01-01 02:00:00.000000000 +0200 +++ linux-2.6.9-rc4-mm1/scripts/gen_initramfs_list.sh 2004-10-17 16:58:28.939818672 +0200 @@ -0,0 +1,84 @@ +#!/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 diff -urpN linux-2.6.9-rc4-mm1.orig/usr/Makefile linux-2.6.9-rc4-mm1/usr/Makefile --- linux-2.6.9-rc4-mm1.orig/usr/Makefile 2004-10-17 17:00:13.433933152 +0200 +++ linux-2.6.9-rc4-mm1/usr/Makefile 2004-10-17 16:59:56.040577344 +0200 @@ -8,7 +8,7 @@ clean-files := initramfs_data.cpio.gz # 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 @@ -23,6 +23,23 @@ $(obj)/initramfs_data.o: $(obj)/initramf # 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 'cp -f $(srctree)/$(INITRAMFS_LIST).shipped $@'; \ + fi; \ + elif test -d $(CONFIG_INITRAMFS_SOURCE); then \ + echo 'scripts/gen_initramfs_list.sh $(CONFIG_INITRAMFS_SOURCE) > $@'; \ + else \ + echo 'cp -f $(srctree)/$(INITRAMFS_LIST).shipped $@'; \ + fi) + +$(INITRAMFS_LIST): FORCE + $(call cmd,gen_list) + quiet_cmd_cpio = CPIO $@ cmd_cpio = ./$< $(INITRAMFS_LIST) > $@ diff -urpN linux-2.6.9-rc4-mm1.orig/usr/initramfs_list linux-2.6.9-rc4-mm1/usr/initramfs_list --- linux-2.6.9-rc4-mm1.orig/usr/initramfs_list 2004-10-17 16:48:14.262263864 +0200 +++ linux-2.6.9-rc4-mm1/usr/initramfs_list 1970-01-01 02:00:00.000000000 +0200 @@ -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 diff -urpN linux-2.6.9-rc4-mm1.orig/usr/initramfs_list.shipped linux-2.6.9-rc4-mm1/usr/initramfs_list.shipped --- linux-2.6.9-rc4-mm1.orig/usr/initramfs_list.shipped 1970-01-01 02:00:00.000000000 +0200 +++ linux-2.6.9-rc4-mm1/usr/initramfs_list.shipped 2004-10-17 16:28:57.667093056 +0200 @@ -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 -- Martin Schlemmer [-- Attachment #1.2: select-cpio_list-or-source-directory-for-initramfs-image.patch --] [-- Type: text/x-patch, Size: 5963 bytes --] diff -urpN linux-2.6.9-rc4-mm1.orig/drivers/block/Kconfig linux-2.6.9-rc4-mm1/drivers/block/Kconfig --- linux-2.6.9-rc4-mm1.orig/drivers/block/Kconfig 2004-10-17 17:00:13.424934520 +0200 +++ linux-2.6.9-rc4-mm1/drivers/block/Kconfig 2004-10-17 16:58:35.451828696 +0200 @@ -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 diff -urpN linux-2.6.9-rc4-mm1.orig/scripts/gen_initramfs_list.sh linux-2.6.9-rc4-mm1/scripts/gen_initramfs_list.sh --- linux-2.6.9-rc4-mm1.orig/scripts/gen_initramfs_list.sh 1970-01-01 02:00:00.000000000 +0200 +++ linux-2.6.9-rc4-mm1/scripts/gen_initramfs_list.sh 2004-10-17 16:58:28.939818672 +0200 @@ -0,0 +1,84 @@ +#!/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 diff -urpN linux-2.6.9-rc4-mm1.orig/usr/Makefile linux-2.6.9-rc4-mm1/usr/Makefile --- linux-2.6.9-rc4-mm1.orig/usr/Makefile 2004-10-17 17:00:13.433933152 +0200 +++ linux-2.6.9-rc4-mm1/usr/Makefile 2004-10-17 16:59:56.040577344 +0200 @@ -8,7 +8,7 @@ clean-files := initramfs_data.cpio.gz # 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 @@ -23,6 +23,23 @@ $(obj)/initramfs_data.o: $(obj)/initramf # 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 'cp -f $(srctree)/$(INITRAMFS_LIST).shipped $@'; \ + fi; \ + elif test -d $(CONFIG_INITRAMFS_SOURCE); then \ + echo 'scripts/gen_initramfs_list.sh $(CONFIG_INITRAMFS_SOURCE) > $@'; \ + else \ + echo 'cp -f $(srctree)/$(INITRAMFS_LIST).shipped $@'; \ + fi) + +$(INITRAMFS_LIST): FORCE + $(call cmd,gen_list) + quiet_cmd_cpio = CPIO $@ cmd_cpio = ./$< $(INITRAMFS_LIST) > $@ diff -urpN linux-2.6.9-rc4-mm1.orig/usr/initramfs_list linux-2.6.9-rc4-mm1/usr/initramfs_list --- linux-2.6.9-rc4-mm1.orig/usr/initramfs_list 2004-10-17 16:48:14.262263864 +0200 +++ linux-2.6.9-rc4-mm1/usr/initramfs_list 1970-01-01 02:00:00.000000000 +0200 @@ -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 diff -urpN linux-2.6.9-rc4-mm1.orig/usr/initramfs_list.shipped linux-2.6.9-rc4-mm1/usr/initramfs_list.shipped --- linux-2.6.9-rc4-mm1.orig/usr/initramfs_list.shipped 1970-01-01 02:00:00.000000000 +0200 +++ linux-2.6.9-rc4-mm1/usr/initramfs_list.shipped 2004-10-17 16:28:57.667093056 +0200 @@ -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 [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-10-17 15:34 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-09-26 22:47 [PATCH 2.6.9-rc2-mm2] Select cpio_list or source directory for initramfs image [u] Martin Schlemmer [c] 2004-10-17 15:14 ` Martin Schlemmer [c] 2004-10-17 15:33 ` Martin Schlemmer [c]
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox