hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/usr/Makefile
....@@ -3,59 +3,87 @@
33 # kbuild file for usr/ - including initramfs image
44 #
55
6
-klibcdirs:;
7
-PHONY += klibcdirs
6
+# cmd_bzip2, cmd_lzma, cmd_lzo, cmd_lz4 from scripts/Makefile.lib appends the
7
+# size at the end of the compressed file, which unfortunately does not work
8
+# with unpack_to_rootfs(). Make size_append no-op.
9
+override size_append := :
810
9
-suffix_y = $(subst $\",,$(CONFIG_INITRAMFS_COMPRESSION))
10
-datafile_y = initramfs_data.cpio$(suffix_y)
11
-datafile_d_y = .$(datafile_y).d
12
-AFLAGS_initramfs_data.o += -DINITRAMFS_IMAGE="usr/$(datafile_y)"
11
+compress-y := shipped
12
+compress-$(CONFIG_INITRAMFS_COMPRESSION_GZIP) := gzip
13
+compress-$(CONFIG_INITRAMFS_COMPRESSION_BZIP2) := bzip2
14
+compress-$(CONFIG_INITRAMFS_COMPRESSION_LZMA) := lzma
15
+compress-$(CONFIG_INITRAMFS_COMPRESSION_XZ) := xzmisc
16
+compress-$(CONFIG_INITRAMFS_COMPRESSION_LZO) := lzo
17
+compress-$(CONFIG_INITRAMFS_COMPRESSION_LZ4) := lz4
18
+compress-$(CONFIG_INITRAMFS_COMPRESSION_ZSTD) := zstd
1319
14
-# clean rules do not have CONFIG_INITRAMFS_COMPRESSION. So clean up after all
15
-# possible compression formats.
16
-clean-files += initramfs_data.cpio*
17
-
18
-# Generate builtin.o based on initramfs_data.o
1920 obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o
2021
21
-# initramfs_data.o contains the compressed initramfs_data.cpio image.
22
-# The image is included using .incbin, a dependency which is not
23
-# tracked automatically.
24
-$(obj)/initramfs_data.o: $(obj)/$(datafile_y) FORCE
22
+$(obj)/initramfs_data.o: $(obj)/initramfs_inc_data
2523
26
-#####
27
-# Generate the initramfs cpio archive
24
+ramfs-input := $(strip $(shell echo $(CONFIG_INITRAMFS_SOURCE)))
25
+cpio-data :=
2826
29
-hostprogs-y := gen_init_cpio
30
-initramfs := $(CONFIG_SHELL) $(srctree)/$(src)/gen_initramfs_list.sh
31
-ramfs-input := $(if $(filter-out "",$(CONFIG_INITRAMFS_SOURCE)), \
32
- $(shell echo $(CONFIG_INITRAMFS_SOURCE)),-d)
33
-ramfs-args := \
34
- $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
35
- $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID))
27
+# If CONFIG_INITRAMFS_SOURCE is empty, generate a small initramfs with the
28
+# default contents.
29
+ifeq ($(ramfs-input),)
30
+ramfs-input := $(srctree)/$(src)/default_cpio_list
31
+endif
3632
37
-# $(datafile_d_y) is used to identify all files included
33
+ifeq ($(words $(ramfs-input)),1)
34
+
35
+# If CONFIG_INITRAMFS_SOURCE specifies a single file, and it is suffixed with
36
+# .cpio, use it directly as an initramfs.
37
+ifneq ($(filter %.cpio,$(ramfs-input)),)
38
+cpio-data := $(ramfs-input)
39
+endif
40
+
41
+# If CONFIG_INITRAMFS_SOURCE specifies a single file, and it is suffixed with
42
+# .cpio.*, use it directly as an initramfs, and avoid double compression.
43
+ifeq ($(words $(subst .cpio.,$(space),$(ramfs-input))),2)
44
+cpio-data := $(ramfs-input)
45
+compress-y := shipped
46
+endif
47
+
48
+endif
49
+
50
+# For other cases, generate the initramfs cpio archive based on the contents
51
+# specified by CONFIG_INITRAMFS_SOURCE.
52
+ifeq ($(cpio-data),)
53
+
54
+cpio-data := $(obj)/initramfs_data.cpio
55
+
56
+hostprogs := gen_init_cpio
57
+
58
+# .initramfs_data.cpio.d is used to identify all files included
3859 # in initramfs and to detect if any files are added/removed.
3960 # Removed files are identified by directory timestamp being updated
4061 # The dependency list is generated by gen_initramfs.sh -l
41
-ifneq ($(wildcard $(obj)/$(datafile_d_y)),)
42
- include $(obj)/$(datafile_d_y)
43
-endif
44
-
45
-quiet_cmd_initfs = GEN $@
46
- cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)
47
-
48
-targets := $(datafile_y)
62
+-include $(obj)/.initramfs_data.cpio.d
4963
5064 # do not try to update files included in initramfs
5165 $(deps_initramfs): ;
5266
53
-$(deps_initramfs): klibcdirs
67
+quiet_cmd_initfs = GEN $@
68
+ cmd_initfs = \
69
+ $(CONFIG_SHELL) $< -o $@ -l $(obj)/.initramfs_data.cpio.d \
70
+ $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
71
+ $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) \
72
+ $(ramfs-input)
73
+
5474 # We rebuild initramfs_data.cpio if:
55
-# 1) Any included file is newer then initramfs_data.cpio
75
+# 1) Any included file is newer than initramfs_data.cpio
5676 # 2) There are changes in which files are included (added or deleted)
5777 # 3) If gen_init_cpio are newer than initramfs_data.cpio
58
-# 4) arguments to gen_initramfs.sh changes
59
-$(obj)/$(datafile_y): $(obj)/gen_init_cpio $(deps_initramfs) klibcdirs
60
- $(Q)$(initramfs) -l $(ramfs-input) > $(obj)/$(datafile_d_y)
78
+# 4) Arguments to gen_initramfs.sh changes
79
+$(obj)/initramfs_data.cpio: $(src)/gen_initramfs.sh $(obj)/gen_init_cpio $(deps_initramfs) FORCE
6180 $(call if_changed,initfs)
81
+
82
+endif
83
+
84
+$(obj)/initramfs_inc_data: $(cpio-data) FORCE
85
+ $(call if_changed,$(compress-y))
86
+
87
+targets += initramfs_data.cpio initramfs_inc_data
88
+
89
+subdir-$(CONFIG_UAPI_HEADER_TEST) += include