diff options
author | Sam Ravnborg <sam@mars.ravnborg.org> | 2006-04-11 07:24:32 -0400 |
---|---|---|
committer | Sam Ravnborg <sam@mars.ravnborg.org> | 2006-04-11 07:24:32 -0400 |
commit | d39a206bc35d46a3b2eb98cd4f34e340d5e56a50 (patch) | |
tree | c11cac2d3051264accc36dee7ef9a735f4420659 /usr | |
parent | d9df92e22aca939857c5bc9ecb130ef22307ccc1 (diff) |
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>
Diffstat (limited to 'usr')
-rw-r--r-- | usr/Makefile | 91 |
1 files changed, 37 insertions, 54 deletions
diff --git a/usr/Makefile b/usr/Makefile index e2129cb570bb..19d74e6f2685 100644 --- a/usr/Makefile +++ b/usr/Makefile | |||
@@ -1,65 +1,48 @@ | |||
1 | # | ||
2 | # kbuild file for usr/ - including initramfs image | ||
3 | # | ||
1 | 4 | ||
2 | obj-y := initramfs_data.o | 5 | klibcdirs:; |
3 | |||
4 | hostprogs-y := gen_init_cpio | ||
5 | 6 | ||
6 | clean-files := initramfs_data.cpio.gz initramfs_list | 7 | # Generate builtin.o based on initramfs_data.o |
8 | obj-y := initramfs_data.o | ||
7 | 9 | ||
8 | # initramfs_data.o contains the initramfs_data.cpio.gz image. | 10 | # initramfs_data.o contains the initramfs_data.cpio.gz image. |
9 | # The image is included using .incbin, a dependency which is not | 11 | # The image is included using .incbin, a dependency which is not |
10 | # tracked automatically. | 12 | # tracked automatically. |
11 | $(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE | 13 | $(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE |
12 | 14 | ||
13 | ifdef CONFIG_INITRAMFS_ROOT_UID | 15 | ##### |
14 | gen_initramfs_args += -u $(CONFIG_INITRAMFS_ROOT_UID) | 16 | # Generate the initramfs cpio archive |
15 | endif | 17 | |
16 | 18 | hostprogs-y := gen_init_cpio | |
17 | ifdef CONFIG_INITRAMFS_ROOT_GID | 19 | initramfs := $(CONFIG_SHELL) $(srctree)/scripts/gen_initramfs_list.sh |
18 | gen_initramfs_args += -g $(CONFIG_INITRAMFS_ROOT_GID) | 20 | ramfs-input := $(if $(filter-out "",$(CONFIG_INITRAMFS_SOURCE)), \ |
19 | endif | 21 | $(CONFIG_INITRAMFS_SOURCE),-d) |
20 | 22 | ramfs-args := \ | |
21 | # The $(shell echo $(CONFIG_INITRAMFS_SOURCE)) is to remove the | 23 | $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \ |
22 | # gratuitous begin and end quotes from the Kconfig string type. | 24 | $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) \ |
23 | # Internal, escaped quotes in the Kconfig string will loose the | 25 | $(ramfs-input) |
24 | # escape and become active quotes. | 26 | |
25 | quotefixed_initramfs_source := $(shell echo $(CONFIG_INITRAMFS_SOURCE)) | 27 | # .initramfs_data.cpio.gz.d is used to identify all files included |
26 | 28 | # in initramfs and to detect if any files are added/removed. | |
27 | filechk_initramfs_list = $(CONFIG_SHELL) \ | 29 | # Removed files are identified by directory timestamp being updated |
28 | $(srctree)/scripts/gen_initramfs_list.sh $(gen_initramfs_args) $(quotefixed_initramfs_source) | 30 | # The dependency list is generated by gen_initramfs.sh -l |
29 | 31 | ifneq ($(wildcard $(obj)/.initramfs_data.cpio.gz.d),) | |
30 | $(obj)/initramfs_list: $(obj)/Makefile FORCE | 32 | include $(obj)/.initramfs_data.cpio.gz.d |
31 | $(call filechk,initramfs_list) | ||
32 | |||
33 | quiet_cmd_cpio = CPIO $@ | ||
34 | cmd_cpio = ./$< $(obj)/initramfs_list > $@ | ||
35 | |||
36 | |||
37 | # Check if the INITRAMFS_SOURCE is a cpio archive | ||
38 | ifneq (,$(findstring .cpio,$(quotefixed_initramfs_source))) | ||
39 | |||
40 | # INITRAMFS_SOURCE has a cpio archive - verify that it's a single file | ||
41 | ifneq (1,$(words $(quotefixed_initramfs_source))) | ||
42 | $(error Only a single file may be specified in CONFIG_INITRAMFS_SOURCE (="$(quotefixed_initramfs_source)") when a cpio archive is directly specified.) | ||
43 | endif | ||
44 | # Now use the cpio archive directly | ||
45 | initramfs_data_cpio = $(quotefixed_initramfs_source) | ||
46 | targets += $(quotefixed_initramfs_source) | ||
47 | |||
48 | else | ||
49 | |||
50 | # INITRAMFS_SOURCE is not a cpio archive - create one | ||
51 | $(obj)/initramfs_data.cpio: $(obj)/gen_init_cpio \ | ||
52 | $(initramfs-y) $(obj)/initramfs_list FORCE | ||
53 | $(call if_changed,cpio) | ||
54 | |||
55 | targets += initramfs_data.cpio | ||
56 | initramfs_data_cpio = $(obj)/initramfs_data.cpio | ||
57 | |||
58 | endif | 33 | endif |
59 | 34 | ||
60 | 35 | quiet_cmd_initfs = GEN $@ | |
61 | $(obj)/initramfs_data.cpio.gz: $(initramfs_data_cpio) FORCE | 36 | cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input) |
62 | $(call if_changed,gzip) | 37 | |
63 | 38 | targets := initramfs_data.cpio.gz | |
64 | targets += initramfs_data.cpio.gz | 39 | $(deps_initramfs): klibcdirs |
40 | # We rebuild initramfs_data.cpio.gz if: | ||
41 | # 1) Any included file is newer then initramfs_data.cpio.gz | ||
42 | # 2) There are changes in which files are included (added or deleted) | ||
43 | # 3) If gen_init_cpio are newer than initramfs_data.cpio.gz | ||
44 | # 4) arguments to gen_initramfs.sh changes | ||
45 | $(obj)/initramfs_data.cpio.gz: $(obj)/gen_init_cpio $(deps_initramfs) klibcdirs | ||
46 | $(Q)$(initramfs) -l $(ramfs-input) > $(obj)/.initramfs_data.cpio.gz.d | ||
47 | $(call if_changed,initfs) | ||
65 | 48 | ||