Makefile 2.9 KB
Newer Older
1
# SPDX-License-Identifier: GPL-2.0
2 3 4
#
# kbuild file for usr/ - including initramfs image
#
L
Linus Torvalds 已提交
5

6 7 8 9
# cmd_bzip2, cmd_lzma, cmd_lzo, cmd_lz4 from scripts/Makefile.lib appends the
# size at the end of the compressed file, which unfortunately does not work
# with unpack_to_rootfs(). Make size_append no-op.
override size_append := :
10

11 12 13 14 15 16 17
compress-$(CONFIG_INITRAMFS_COMPRESSION_NONE)	:= shipped
compress-$(CONFIG_INITRAMFS_COMPRESSION_GZIP)	:= gzip
compress-$(CONFIG_INITRAMFS_COMPRESSION_BZIP2)	:= bzip2
compress-$(CONFIG_INITRAMFS_COMPRESSION_LZMA)	:= lzma
compress-$(CONFIG_INITRAMFS_COMPRESSION_XZ)	:= xzmisc
compress-$(CONFIG_INITRAMFS_COMPRESSION_LZO)	:= lzo
compress-$(CONFIG_INITRAMFS_COMPRESSION_LZ4)	:= lz4
18 19

obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o
L
Linus Torvalds 已提交
20

21
$(obj)/initramfs_data.o: $(obj)/initramfs_inc_data
L
Linus Torvalds 已提交
22

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
ramfs-input := $(strip $(shell echo $(CONFIG_INITRAMFS_SOURCE)))
cpio-data :=

# If CONFIG_INITRAMFS_SOURCE is empty, generate a small initramfs with the
# default contents.
ifeq ($(ramfs-input),)
ramfs-input := $(srctree)/$(src)/default_cpio_list
endif

ifeq ($(words $(ramfs-input)),1)

# If CONFIG_INITRAMFS_SOURCE specifies a single file, and it is suffixed with
# .cpio, use it directly as an initramfs.
ifneq ($(filter %.cpio,$(ramfs-input)),)
cpio-data := $(ramfs-input)
endif

# If CONFIG_INITRAMFS_SOURCE specifies a single file, and it is suffixed with
# .cpio.*, use it directly as an initramfs, and avoid double compression.
ifeq ($(words $(subst .cpio.,$(space),$(ramfs-input))),2)
cpio-data := $(ramfs-input)
compress-y := shipped
endif

endif

# For other cases, generate the initramfs cpio archive based on the contents
# specified by CONFIG_INITRAMFS_SOURCE.
ifeq ($(cpio-data),)

cpio-data := $(obj)/initramfs_data.cpio
54 55 56

hostprogs-y := gen_init_cpio

57
# .initramfs_data.cpio.d is used to identify all files included
58 59 60
# 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
61
-include $(obj)/.initramfs_data.cpio.d
62

63 64 65
# do not try to update files included in initramfs
$(deps_initramfs): ;

66 67 68 69 70 71 72
quiet_cmd_initfs = GEN     $@
      cmd_initfs = \
	$(CONFIG_SHELL) $< -o $@ -l $(obj)/.initramfs_data.cpio.d \
	$(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
	$(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) \
	$(ramfs-input)

73
# We rebuild initramfs_data.cpio if:
74
# 1) Any included file is newer than initramfs_data.cpio
75
# 2) There are changes in which files are included (added or deleted)
76
# 3) If gen_init_cpio are newer than initramfs_data.cpio
77
# 4) Arguments to gen_initramfs.sh changes
78
$(obj)/initramfs_data.cpio: $(src)/gen_initramfs.sh $(obj)/gen_init_cpio $(deps_initramfs) FORCE
79
	$(call if_changed,initfs)
80

81 82 83 84 85 86 87
endif

$(obj)/initramfs_inc_data: $(cpio-data) FORCE
	$(call if_changed,$(compress-y))

targets += initramfs_data.cpio initramfs_inc_data

88
subdir-$(CONFIG_UAPI_HEADER_TEST) += include