mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 09:44:18 +08:00
a26d79ca81
Fix bug 7401. Handle more than one source dir or file list to the initramfs gen scripts. The Kconfig help for INITRAMFS_SOURCE claims that you can specify multiple space-separated sources in order to allow unprivileged users to build an image. There are two bugs in the current implementation that prevent this from working. First, we pass "file1 dir2" to the gen_initramfs_list.sh script, which it obviously can't open. Second, gen_initramfs_list.sh -l outputs multiple definitions for deps_initramfs -- one for each argument. Signed-off-by: Thomas Chou <thomas@wytron.com.tw> Cc: Sam Ravnborg <sam@ravnborg.org> Acked-by: Matthew Wilcox <matthew@wil.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
53 lines
1.8 KiB
Makefile
53 lines
1.8 KiB
Makefile
#
|
|
# kbuild file for usr/ - including initramfs image
|
|
#
|
|
|
|
klibcdirs:;
|
|
PHONY += klibcdirs
|
|
|
|
|
|
# Generate builtin.o based on initramfs_data.o
|
|
obj-y := initramfs_data.o
|
|
|
|
# initramfs_data.o contains the initramfs_data.cpio.gz image.
|
|
# The image is included using .incbin, a dependency which is not
|
|
# tracked automatically.
|
|
$(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE
|
|
|
|
#####
|
|
# Generate the initramfs cpio archive
|
|
|
|
hostprogs-y := gen_init_cpio
|
|
initramfs := $(CONFIG_SHELL) $(srctree)/scripts/gen_initramfs_list.sh
|
|
ramfs-input := $(if $(filter-out "",$(CONFIG_INITRAMFS_SOURCE)), \
|
|
$(shell echo $(CONFIG_INITRAMFS_SOURCE)),-d)
|
|
ramfs-args := \
|
|
$(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
|
|
$(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID))
|
|
|
|
# .initramfs_data.cpio.gz.d is used to identify all files included
|
|
# in initramfs and to detect if any files are added/removed.
|
|
# Removed files are identified by directory timestamp being updated
|
|
# The dependency list is generated by gen_initramfs.sh -l
|
|
ifneq ($(wildcard $(obj)/.initramfs_data.cpio.gz.d),)
|
|
include $(obj)/.initramfs_data.cpio.gz.d
|
|
endif
|
|
|
|
quiet_cmd_initfs = GEN $@
|
|
cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)
|
|
|
|
targets := initramfs_data.cpio.gz
|
|
# do not try to update files included in initramfs
|
|
$(deps_initramfs): ;
|
|
|
|
$(deps_initramfs): klibcdirs
|
|
# We rebuild initramfs_data.cpio.gz if:
|
|
# 1) Any included file is newer then initramfs_data.cpio.gz
|
|
# 2) There are changes in which files are included (added or deleted)
|
|
# 3) If gen_init_cpio are newer than initramfs_data.cpio.gz
|
|
# 4) arguments to gen_initramfs.sh changes
|
|
$(obj)/initramfs_data.cpio.gz: $(obj)/gen_init_cpio $(deps_initramfs) klibcdirs
|
|
$(Q)$(initramfs) -l $(ramfs-input) > $(obj)/.initramfs_data.cpio.gz.d
|
|
$(call if_changed,initfs)
|
|
|