linux-yocto/usr/Makefile
Sam Ravnborg d39a206bc3 kbuild: rebuild initramfs if content of initramfs changes
initramfs.cpio.gz being build in usr/ and included in the
kernel was not rebuild when the included files changed.

To fix this the following was done:
- let gen_initramfs.sh generate a list of files and directories included
  in the initramfs
- gen_initramfs generate the gzipped cpio archive so we could simplify
  the kbuild file (Makefile)
- utilising the kbuild infrastructure so when uid/gid root mapping changes
  the initramfs will be rebuild

With this change we have a much more robust initramfs generation.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
2006-04-11 13:24:32 +02:00

1.7 KiB

kbuild file for usr/ - including initramfs image

klibcdirs:;

Generate builtin.o based on initramfs_data.o

obj-y := initramfs_data.o

initramfs_data.o contains the initramfs_data.cpio.gz image.

The image is included using .incbin, a dependency which is not

tracked automatically.

$(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE

Generate the initramfs cpio archive

hostprogs-y := gen_init_cpio initramfs := $(CONFIG_SHELL) $(srctree)/scripts/gen_initramfs_list.sh ramfs-input := $(if $(filter-out "",$(CONFIG_INITRAMFS_SOURCE)),
$(CONFIG_INITRAMFS_SOURCE),-d) ramfs-args :=
$(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID))
$(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID))
$(ramfs-input)

.initramfs_data.cpio.gz.d is used to identify all files included

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

ifneq ($(wildcard $(obj)/.initramfs_data.cpio.gz.d),) include $(obj)/.initramfs_data.cpio.gz.d endif

quiet_cmd_initfs = GEN $@ cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)

targets := initramfs_data.cpio.gz $(deps_initramfs): klibcdirs

We rebuild initramfs_data.cpio.gz if:

1) Any included file is newer then initramfs_data.cpio.gz

2) There are changes in which files are included (added or deleted)

3) If gen_init_cpio are newer than initramfs_data.cpio.gz

4) arguments to gen_initramfs.sh changes

$(obj)/initramfs_data.cpio.gz: $(obj)/gen_init_cpio $(deps_initramfs) klibcdirs $(Q)$(initramfs) -l $(ramfs-input) > $(obj)/.initramfs_data.cpio.gz.d $(call if_changed,initfs)