1b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0 2d39a206bSSam Ravnborg# 3d39a206bSSam Ravnborg# kbuild file for usr/ - including initramfs image 4d39a206bSSam Ravnborg# 51da177e4SLinus Torvalds 6*65e00e04SMasahiro Yamada# cmd_bzip2, cmd_lzma, cmd_lzo, cmd_lz4 from scripts/Makefile.lib appends the 7*65e00e04SMasahiro Yamada# size at the end of the compressed file, which unfortunately does not work 8*65e00e04SMasahiro Yamada# with unpack_to_rootfs(). Make size_append no-op. 9*65e00e04SMasahiro Yamadaoverride size_append := : 109e3596b0SNicholas Piggin 11*65e00e04SMasahiro Yamadacompress-$(CONFIG_INITRAMFS_COMPRESSION_NONE) := shipped 12*65e00e04SMasahiro Yamadacompress-$(CONFIG_INITRAMFS_COMPRESSION_GZIP) := gzip 13*65e00e04SMasahiro Yamadacompress-$(CONFIG_INITRAMFS_COMPRESSION_BZIP2) := bzip2 14*65e00e04SMasahiro Yamadacompress-$(CONFIG_INITRAMFS_COMPRESSION_LZMA) := lzma 15*65e00e04SMasahiro Yamadacompress-$(CONFIG_INITRAMFS_COMPRESSION_XZ) := xzmisc 16*65e00e04SMasahiro Yamadacompress-$(CONFIG_INITRAMFS_COMPRESSION_LZO) := lzo 17*65e00e04SMasahiro Yamadacompress-$(CONFIG_INITRAMFS_COMPRESSION_LZ4) := lz4 186ae64e42SHendrik Brueckner 196ae64e42SHendrik Bruecknerobj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o 201da177e4SLinus Torvalds 21*65e00e04SMasahiro Yamada$(obj)/initramfs_data.o: $(obj)/initramfs_inc_data 221da177e4SLinus Torvalds 23*65e00e04SMasahiro Yamadaramfs-input := $(strip $(shell echo $(CONFIG_INITRAMFS_SOURCE))) 24*65e00e04SMasahiro Yamadacpio-data := 25*65e00e04SMasahiro Yamada 26*65e00e04SMasahiro Yamada# If CONFIG_INITRAMFS_SOURCE is empty, generate a small initramfs with the 27*65e00e04SMasahiro Yamada# default contents. 28*65e00e04SMasahiro Yamadaifeq ($(ramfs-input),) 29*65e00e04SMasahiro Yamadaramfs-input := $(srctree)/$(src)/default_cpio_list 30*65e00e04SMasahiro Yamadaendif 31*65e00e04SMasahiro Yamada 32*65e00e04SMasahiro Yamadaifeq ($(words $(ramfs-input)),1) 33*65e00e04SMasahiro Yamada 34*65e00e04SMasahiro Yamada# If CONFIG_INITRAMFS_SOURCE specifies a single file, and it is suffixed with 35*65e00e04SMasahiro Yamada# .cpio, use it directly as an initramfs. 36*65e00e04SMasahiro Yamadaifneq ($(filter %.cpio,$(ramfs-input)),) 37*65e00e04SMasahiro Yamadacpio-data := $(ramfs-input) 38*65e00e04SMasahiro Yamadaendif 39*65e00e04SMasahiro Yamada 40*65e00e04SMasahiro Yamada# If CONFIG_INITRAMFS_SOURCE specifies a single file, and it is suffixed with 41*65e00e04SMasahiro Yamada# .cpio.*, use it directly as an initramfs, and avoid double compression. 42*65e00e04SMasahiro Yamadaifeq ($(words $(subst .cpio.,$(space),$(ramfs-input))),2) 43*65e00e04SMasahiro Yamadacpio-data := $(ramfs-input) 44*65e00e04SMasahiro Yamadacompress-y := shipped 45*65e00e04SMasahiro Yamadaendif 46*65e00e04SMasahiro Yamada 47*65e00e04SMasahiro Yamadaendif 48*65e00e04SMasahiro Yamada 49*65e00e04SMasahiro Yamada# For other cases, generate the initramfs cpio archive based on the contents 50*65e00e04SMasahiro Yamada# specified by CONFIG_INITRAMFS_SOURCE. 51*65e00e04SMasahiro Yamadaifeq ($(cpio-data),) 52*65e00e04SMasahiro Yamada 53*65e00e04SMasahiro Yamadacpio-data := $(obj)/initramfs_data.cpio 54d39a206bSSam Ravnborg 55d39a206bSSam Ravnborghostprogs-y := gen_init_cpio 56d39a206bSSam Ravnborg 57*65e00e04SMasahiro Yamada# .initramfs_data.cpio.d is used to identify all files included 58d39a206bSSam Ravnborg# in initramfs and to detect if any files are added/removed. 59d39a206bSSam Ravnborg# Removed files are identified by directory timestamp being updated 60d39a206bSSam Ravnborg# The dependency list is generated by gen_initramfs.sh -l 61*65e00e04SMasahiro Yamada-include $(obj)/.initramfs_data.cpio.d 629e3596b0SNicholas Piggin 6358a2f7d8SSam Ravnborg# do not try to update files included in initramfs 6458a2f7d8SSam Ravnborg$(deps_initramfs): ; 6558a2f7d8SSam Ravnborg 66*65e00e04SMasahiro Yamadaquiet_cmd_initfs = GEN $@ 67*65e00e04SMasahiro Yamada cmd_initfs = \ 68*65e00e04SMasahiro Yamada $(CONFIG_SHELL) $< -o $@ -l $(obj)/.initramfs_data.cpio.d \ 69*65e00e04SMasahiro Yamada $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \ 70*65e00e04SMasahiro Yamada $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) \ 71*65e00e04SMasahiro Yamada $(ramfs-input) 72*65e00e04SMasahiro Yamada 73a26ee60fSAlain Knaff# We rebuild initramfs_data.cpio if: 74c7fe0608SEugen Cazacu# 1) Any included file is newer than initramfs_data.cpio 75d39a206bSSam Ravnborg# 2) There are changes in which files are included (added or deleted) 76a26ee60fSAlain Knaff# 3) If gen_init_cpio are newer than initramfs_data.cpio 77c7fe0608SEugen Cazacu# 4) Arguments to gen_initramfs.sh changes 78*65e00e04SMasahiro Yamada$(obj)/initramfs_data.cpio: $(src)/gen_initramfs.sh $(obj)/gen_init_cpio $(deps_initramfs) FORCE 79d39a206bSSam Ravnborg $(call if_changed,initfs) 80d6fc9fcbSMasahiro Yamada 81*65e00e04SMasahiro Yamadaendif 82*65e00e04SMasahiro Yamada 83*65e00e04SMasahiro Yamada$(obj)/initramfs_inc_data: $(cpio-data) FORCE 84*65e00e04SMasahiro Yamada $(call if_changed,$(compress-y)) 85*65e00e04SMasahiro Yamada 86*65e00e04SMasahiro Yamadatargets += initramfs_data.cpio initramfs_inc_data 87*65e00e04SMasahiro Yamada 88d6fc9fcbSMasahiro Yamadasubdir-$(CONFIG_UAPI_HEADER_TEST) += include 89