.. | .. |
---|
3 | 3 | # kbuild file for usr/ - including initramfs image |
---|
4 | 4 | # |
---|
5 | 5 | |
---|
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 := : |
---|
8 | 10 | |
---|
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 |
---|
13 | 19 | |
---|
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 |
---|
19 | 20 | obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o |
---|
20 | 21 | |
---|
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 |
---|
25 | 23 | |
---|
26 | | -##### |
---|
27 | | -# Generate the initramfs cpio archive |
---|
| 24 | +ramfs-input := $(strip $(shell echo $(CONFIG_INITRAMFS_SOURCE))) |
---|
| 25 | +cpio-data := |
---|
28 | 26 | |
---|
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 |
---|
36 | 32 | |
---|
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 |
---|
38 | 59 | # in initramfs and to detect if any files are added/removed. |
---|
39 | 60 | # Removed files are identified by directory timestamp being updated |
---|
40 | 61 | # 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 |
---|
49 | 63 | |
---|
50 | 64 | # do not try to update files included in initramfs |
---|
51 | 65 | $(deps_initramfs): ; |
---|
52 | 66 | |
---|
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 | + |
---|
54 | 74 | # 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 |
---|
56 | 76 | # 2) There are changes in which files are included (added or deleted) |
---|
57 | 77 | # 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 |
---|
61 | 80 | $(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 |
---|