Commit 187ada2d authored by Martin Schlemmer's avatar Martin Schlemmer Committed by Linus Torvalds

[PATCH] Select cpio_list or source directory for initramfs image

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?
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 6fa95f2b
...@@ -348,6 +348,32 @@ config BLK_DEV_INITRD ...@@ -348,6 +348,32 @@ config BLK_DEV_INITRD
"real" root file system, etc. See <file:Documentation/initrd.txt> "real" root file system, etc. See <file:Documentation/initrd.txt>
for details. 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 config LBD
bool "Support for Large Block Devices" bool "Support for Large Block Devices"
depends on X86 || MIPS32 || PPC32 || ARCH_S390_31 || SUPERH depends on X86 || MIPS32 || PPC32 || ARCH_S390_31 || SUPERH
......
#!/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
...@@ -8,7 +8,7 @@ clean-files := initramfs_data.cpio.gz ...@@ -8,7 +8,7 @@ clean-files := initramfs_data.cpio.gz
# If you want a different list of files in the initramfs_data.cpio # If you want a different list of files in the initramfs_data.cpio
# then you can either overwrite the cpio_list in this directory # then you can either overwrite the cpio_list in this directory
# or set INITRAMFS_LIST to another filename. # 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. # initramfs_data.o contains the initramfs_data.cpio.gz image.
# The image is included using .incbin, a dependency which is not # The image is included using .incbin, a dependency which is not
...@@ -23,6 +23,24 @@ $(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE ...@@ -23,6 +23,24 @@ $(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE
# Commented out for now # Commented out for now
# initramfs-y := $(obj)/root/hello # 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 $@ quiet_cmd_cpio = CPIO $@
cmd_cpio = ./$< $(INITRAMFS_LIST) > $@ cmd_cpio = ./$< $(INITRAMFS_LIST) > $@
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment