|
3 | 3 | # kbuild file for usr/ - including initramfs image
|
4 | 4 | #
|
5 | 5 |
|
6 |
| -suffix_y = $(subst $\",,$(CONFIG_INITRAMFS_COMPRESSION)) |
7 |
| -datafile_y = initramfs_data.cpio$(suffix_y) |
8 |
| -datafile_d_y = .$(datafile_y).d |
9 |
| -AFLAGS_initramfs_data.o += -DINITRAMFS_IMAGE="usr/$(datafile_y)" |
| 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 := : |
10 | 10 |
|
11 |
| -# clean rules do not have CONFIG_INITRAMFS_COMPRESSION. So clean up after all |
12 |
| -# possible compression formats. |
13 |
| -clean-files += initramfs_data.cpio* |
| 11 | +compress-$(CONFIG_INITRAMFS_COMPRESSION_NONE) := 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 |
14 | 18 |
|
15 |
| -# Generate builtin.o based on initramfs_data.o |
16 | 19 | obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o
|
17 | 20 |
|
18 |
| -# initramfs_data.o contains the compressed initramfs_data.cpio image. |
19 |
| -# The image is included using .incbin, a dependency which is not |
20 |
| -# tracked automatically. |
21 |
| -$(obj)/initramfs_data.o: $(obj)/$(datafile_y) FORCE |
| 21 | +$(obj)/initramfs_data.o: $(obj)/initramfs_inc_data |
22 | 22 |
|
23 |
| -##### |
24 |
| -# Generate the initramfs cpio archive |
| 23 | +ramfs-input := $(strip $(shell echo $(CONFIG_INITRAMFS_SOURCE))) |
| 24 | +cpio-data := |
| 25 | + |
| 26 | +# If CONFIG_INITRAMFS_SOURCE is empty, generate a small initramfs with the |
| 27 | +# default contents. |
| 28 | +ifeq ($(ramfs-input),) |
| 29 | +ramfs-input := $(srctree)/$(src)/default_cpio_list |
| 30 | +endif |
| 31 | + |
| 32 | +ifeq ($(words $(ramfs-input)),1) |
| 33 | + |
| 34 | +# If CONFIG_INITRAMFS_SOURCE specifies a single file, and it is suffixed with |
| 35 | +# .cpio, use it directly as an initramfs. |
| 36 | +ifneq ($(filter %.cpio,$(ramfs-input)),) |
| 37 | +cpio-data := $(ramfs-input) |
| 38 | +endif |
| 39 | + |
| 40 | +# If CONFIG_INITRAMFS_SOURCE specifies a single file, and it is suffixed with |
| 41 | +# .cpio.*, use it directly as an initramfs, and avoid double compression. |
| 42 | +ifeq ($(words $(subst .cpio.,$(space),$(ramfs-input))),2) |
| 43 | +cpio-data := $(ramfs-input) |
| 44 | +compress-y := shipped |
| 45 | +endif |
| 46 | + |
| 47 | +endif |
| 48 | + |
| 49 | +# For other cases, generate the initramfs cpio archive based on the contents |
| 50 | +# specified by CONFIG_INITRAMFS_SOURCE. |
| 51 | +ifeq ($(cpio-data),) |
| 52 | + |
| 53 | +cpio-data := $(obj)/initramfs_data.cpio |
25 | 54 |
|
26 | 55 | hostprogs-y := gen_init_cpio
|
27 |
| -ramfs-input := $(if $(filter-out "",$(CONFIG_INITRAMFS_SOURCE)), \ |
28 |
| - $(shell echo $(CONFIG_INITRAMFS_SOURCE)),$(srctree)/$(src)/default_cpio_list) |
29 |
| -ramfs-args := \ |
30 |
| - $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \ |
31 |
| - $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) |
32 | 56 |
|
33 |
| -# $(datafile_d_y) is used to identify all files included |
| 57 | +# .initramfs_data.cpio.d is used to identify all files included |
34 | 58 | # in initramfs and to detect if any files are added/removed.
|
35 | 59 | # Removed files are identified by directory timestamp being updated
|
36 | 60 | # The dependency list is generated by gen_initramfs.sh -l
|
37 |
| -ifneq ($(wildcard $(obj)/$(datafile_d_y)),) |
38 |
| - include $(obj)/$(datafile_d_y) |
39 |
| -endif |
40 |
| - |
41 |
| -quiet_cmd_initfs = GEN $@ |
42 |
| - cmd_initfs = $(CONFIG_SHELL) $< -o $@ -l $(obj)/$(datafile_d_y) $(ramfs-args) $(ramfs-input) |
43 |
| - |
44 |
| -targets := $(datafile_y) |
| 61 | +-include $(obj)/.initramfs_data.cpio.d |
45 | 62 |
|
46 | 63 | # do not try to update files included in initramfs
|
47 | 64 | $(deps_initramfs): ;
|
48 | 65 |
|
| 66 | +quiet_cmd_initfs = GEN $@ |
| 67 | + cmd_initfs = \ |
| 68 | + $(CONFIG_SHELL) $< -o $@ -l $(obj)/.initramfs_data.cpio.d \ |
| 69 | + $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \ |
| 70 | + $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) \ |
| 71 | + $(ramfs-input) |
| 72 | + |
49 | 73 | # We rebuild initramfs_data.cpio if:
|
50 | 74 | # 1) Any included file is newer than initramfs_data.cpio
|
51 | 75 | # 2) There are changes in which files are included (added or deleted)
|
52 | 76 | # 3) If gen_init_cpio are newer than initramfs_data.cpio
|
53 | 77 | # 4) Arguments to gen_initramfs.sh changes
|
54 |
| -$(obj)/$(datafile_y): $(src)/gen_initramfs.sh $(obj)/gen_init_cpio $(deps_initramfs) FORCE |
| 78 | +$(obj)/initramfs_data.cpio: $(src)/gen_initramfs.sh $(obj)/gen_init_cpio $(deps_initramfs) FORCE |
55 | 79 | $(call if_changed,initfs)
|
56 | 80 |
|
| 81 | +endif |
| 82 | + |
| 83 | +$(obj)/initramfs_inc_data: $(cpio-data) FORCE |
| 84 | + $(call if_changed,$(compress-y)) |
| 85 | + |
| 86 | +targets += initramfs_data.cpio initramfs_inc_data |
| 87 | + |
57 | 88 | subdir-$(CONFIG_UAPI_HEADER_TEST) += include
|
0 commit comments