• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# note: requires x86 because we assume grub is the mbr bootloader.
2ifeq ($(TARGET_ARCH),x86)
3ifeq ($(TARGET_USE_DISKINSTALLER),true)
4
5diskinstaller_root := bootable/diskinstaller
6
7android_sysbase_modules := \
8	libc \
9	libcutils \
10	libdl \
11	liblog \
12	libm \
13	libstdc++ \
14	linker \
15	sh \
16	toolbox \
17	logcat \
18	gdbserver \
19	strace \
20	netcfg
21android_sysbase_files = \
22	$(call module-installed-files,$(android_sysbase_modules))
23
24# $(1): source base dir
25# $(2): target base dir
26define sysbase-copy-files
27$(hide) $(foreach _f,$(android_sysbase_files), \
28	f=$(patsubst $(1)/%,$(2)/%,$(_f)); \
29	mkdir -p `dirname $$f`; \
30	echo "Copy: $$f" ; \
31	cp -fR $(_f) $$f; \
32)
33endef
34
35installer_base_modules := \
36	libdiskconfig \
37	libext2fs \
38	libext2_com_err \
39	libext2_e2p \
40	libext2_blkid \
41	libext2_uuid \
42	libext2_profile \
43	badblocks \
44	resize2fs \
45	tune2fs \
46	mke2fs \
47	e2fsck
48installer_base_files = \
49	$(call module-built-files,$(installer_base_modules))
50
51# $(1): source base dir
52# $(2): target base dir
53define installer-copy-modules
54$(hide) $(foreach m,$(installer_base_modules), \
55	src=$(firstword $(strip $(call module-built-files,$(m)))); \
56	dest=$(patsubst $(strip $(1))/%,$(strip $(2))/%,\
57		$(firstword $(strip $(call module-installed-files,$(m))))); \
58	echo "Copy: $$src -> $$dest"; \
59	mkdir -p `dirname $$dest`; \
60	cp -fdp $$src $$dest; \
61)
62endef
63
64# Build the installer ramdisk image
65installer_initrc := $(diskinstaller_root)/init.rc
66installer_kernel := $(INSTALLED_KERNEL_TARGET)
67installer_ramdisk := $(TARGET_INSTALLER_OUT)/ramdisk-installer.img
68installer_build_prop := $(INSTALLED_BUILD_PROP_TARGET)
69installer_config := $(diskinstaller_root)/installer.conf
70installer_binary := \
71	$(call intermediates-dir-for,EXECUTABLES,diskinstaller)/diskinstaller
72
73$(installer_ramdisk): $(diskinstaller_root)/config.mk \
74		$(MKBOOTFS) \
75		$(INSTALLED_RAMDISK_TARGET) \
76		$(INSTALLED_BOOTIMAGE_TARGET) \
77		$(TARGET_DISK_LAYOUT_CONFIG) \
78		$(installer_binary) \
79		$(installer_initrc) \
80		$(installer_kernel) \
81		$(installer_config) \
82		$(android_sysbase_files) \
83		$(installer_base_files) \
84		$(installer_build_prop)
85	@echo ----- Making installer image ------
86	rm -rf $(TARGET_INSTALLER_OUT)
87	mkdir -p $(TARGET_INSTALLER_OUT)
88	mkdir -p $(TARGET_INSTALLER_ROOT_OUT)
89	mkdir -p $(TARGET_INSTALLER_ROOT_OUT)/sbin
90	mkdir -p $(TARGET_INSTALLER_ROOT_OUT)/data
91	mkdir -p $(TARGET_INSTALLER_SYSTEM_OUT)
92	mkdir -p $(TARGET_INSTALLER_SYSTEM_OUT)/etc
93	mkdir -p $(TARGET_INSTALLER_SYSTEM_OUT)/bin
94	@echo Copying baseline ramdisk...
95	cp -fR $(TARGET_ROOT_OUT) $(TARGET_INSTALLER_OUT)
96	@echo Copying sysbase files...
97	$(call sysbase-copy-files,$(TARGET_OUT),$(TARGET_INSTALLER_SYSTEM_OUT))
98	@echo Copying installer base files...
99	$(call installer-copy-modules,$(TARGET_OUT),\
100		$(TARGET_INSTALLER_SYSTEM_OUT))
101	@echo Modifying ramdisk contents...
102	cp -f $(installer_initrc) $(TARGET_INSTALLER_ROOT_OUT)/
103	cp -f $(TARGET_DISK_LAYOUT_CONFIG) \
104		$(TARGET_INSTALLER_SYSTEM_OUT)/etc/disk_layout.conf
105	cp -f $(installer_config) \
106		$(TARGET_INSTALLER_SYSTEM_OUT)/etc/installer.conf
107	cp -f $(installer_binary) $(TARGET_INSTALLER_SYSTEM_OUT)/bin/installer
108	$(hide) chmod ug+rw $(TARGET_INSTALLER_ROOT_OUT)/default.prop
109	cat $(installer_build_prop) >> $(TARGET_INSTALLER_ROOT_OUT)/default.prop
110	$(MKBOOTFS) $(TARGET_INSTALLER_ROOT_OUT) | gzip > $(installer_ramdisk)
111	@echo ----- Made installer ramdisk -[ $@ ]-
112
113######################################################################
114# Now the installer boot image which includes the kernel and the ramdisk
115internal_installerimage_args := \
116	--kernel $(installer_kernel) \
117	--ramdisk $(installer_ramdisk)
118
119internal_installerimage_files := \
120	$(filter-out --%,$(internal_installerimage_args))
121
122BOARD_KERNEL_CMDLINE := $(strip $(BOARD_KERNEL_CMDLINE))
123ifdef BOARD_KERNEL_CMDLINE
124  internal_installerimage_args += --cmdline "$(BOARD_KERNEL_CMDLINE)"
125endif
126
127installer_tmp_img := $(TARGET_INSTALLER_OUT)/installer_tmp.img
128tmp_dir_for_inst_image := \
129	$(call intermediates-dir-for,EXECUTABLES,installer_img)/installer_img
130internal_installerimage_args += --tmpdir $(tmp_dir_for_inst_image)
131internal_installerimage_args += --genext2fs $(MKEXT2IMG)
132$(installer_tmp_img): $(MKEXT2IMG) $(internal_installerimage_files)
133	$(call pretty,"Target installer image: $@")
134	$(hide) $(MKEXT2BOOTIMG) $(internal_installerimage_args) --output $@
135
136######################################################################
137# Now make a data image that contains all the target image files for the
138# installer.
139bootldr_bin := $(PRODUCT_OUT)/grub/grub.bin
140installer_target_data_files := \
141	$(INSTALLED_BOOTIMAGE_TARGET) \
142	$(INSTALLED_SYSTEMIMAGE) \
143	$(INSTALLED_USERDATAIMAGE_TARGET) \
144	$(bootldr_bin)
145
146installer_data_img := $(TARGET_INSTALLER_OUT)/installer_data.img
147$(installer_data_img): $(diskinstaller_root)/config.mk \
148			$(installer_target_data_files) \
149			$(MKEXT2IMG) \
150			$(installer_ramdisk)
151	@echo --- Making installer data image ------
152	mkdir -p $(TARGET_INSTALLER_OUT)
153	mkdir -p $(TARGET_INSTALLER_OUT)/data
154	cp -f $(bootldr_bin) $(TARGET_INSTALLER_OUT)/data/bootldr.bin
155	cp -f $(INSTALLED_BOOTIMAGE_TARGET) $(TARGET_INSTALLER_OUT)/data/boot.img
156	cp -f $(INSTALLED_SYSTEMIMAGE) \
157		$(TARGET_INSTALLER_OUT)/data/system.img
158	cp -f $(INSTALLED_USERDATAIMAGE_TARGET) \
159		$(TARGET_INSTALLER_OUT)/data/userdata.img
160	$(call build-userimage-ext2-target,$(TARGET_INSTALLER_OUT)/data,$@,\
161		inst_data,)
162	@echo --- Finished installer data image -[ $@ ]-
163
164######################################################################
165# now combine the installer image with the grub bootloader
166grub_bin := $(PRODUCT_OUT)/grub/grub.bin
167installer_layout := $(diskinstaller_root)/installer_img_layout.conf
168edit_mbr := $(HOST_OUT_EXECUTABLES)/editdisklbl
169
170INSTALLED_DISKINSTALLERIMAGE_TARGET := $(PRODUCT_OUT)/installer.img
171$(INSTALLED_DISKINSTALLERIMAGE_TARGET): \
172					$(installer_tmp_img) \
173					$(installer_data_img) \
174					$(grub_bin) \
175					$(edit_mbr) \
176					$(installer_layout)
177	@echo "Creating bootable installer image: $@"
178	@rm -f $@
179	@cat $(grub_bin) > $@
180	@$(edit_mbr) -l $(installer_layout) -i $@ \
181		inst_boot=$(installer_tmp_img) \
182		inst_data=$(installer_data_img)
183	@echo "Done with bootable installer image -[ $@ ]-"
184
185else  # ! TARGET_USE_DISKINSTALLER
186INSTALLED_DISKINSTALLERIMAGE_TARGET :=
187endif
188endif # TARGET_ARCH == x86
189
190.PHONY: installer_img
191installer_img: $(INSTALLED_DISKINSTALLERIMAGE_TARGET)
192