diff --git a/core/Makefile b/core/Makefile index 598b62090..7da3b2355 100644 --- a/core/Makefile +++ b/core/Makefile @@ -460,12 +460,12 @@ BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET) $(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) | $(MINIGZIP) $(call pretty,"Target ram disk: $@") - $(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@ + $(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@ .PHONY: ramdisk-nodeps ramdisk-nodeps: $(MKBOOTFS) | $(MINIGZIP) @echo "make $@: ignoring dependencies" - $(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $(INSTALLED_RAMDISK_TARGET) + $(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $(INSTALLED_RAMDISK_TARGET) ifneq ($(strip $(TARGET_NO_KERNEL)),true) @@ -884,7 +884,7 @@ define build-recoveryimage-target $(hide) cp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keys $(hide) cat $(INSTALLED_DEFAULT_PROP_TARGET) $(recovery_build_prop) \ > $(TARGET_RECOVERY_ROOT_OUT)/default.prop - $(hide) $(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk) + $(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk) $(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)), \ $(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1).unsigned, \ $(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1) --id > $(RECOVERYIMAGE_ID_FILE)) @@ -995,7 +995,7 @@ define build-systemimage-target skip_fsck=true) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ - $(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1) \ + $(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1) $(TARGET_OUT) \ || ( echo "Out of space? the tree size of $(TARGET_OUT) is (MB): " 1>&2 ;\ du -sm $(TARGET_OUT) 1>&2;\ if [ "$(INTERNAL_USERIMAGES_EXT_VARIANT)" == "ext4" ]; then \ @@ -1062,7 +1062,7 @@ define build-systemtarball-target $(call create-system-vendor-symlink) $(MKTARBALL) $(FS_GET_STATS) \ $(PRODUCT_OUT) system $(PRIVATE_SYSTEM_TAR) \ - $(INSTALLED_SYSTEMTARBALL_TARGET) + $(INSTALLED_SYSTEMTARBALL_TARGET) $(TARGET_OUT) endef ifndef SYSTEM_TARBALL_FORMAT @@ -1130,7 +1130,7 @@ define build-boottarball-target $(hide) echo $(BOARD_KERNEL_CMDLINE) > $(PRODUCT_OUT)/boot/cmdline $(hide) $(MKTARBALL) $(FS_GET_STATS) \ $(PRODUCT_OUT) boot $(PRIVATE_BOOT_TAR) \ - $(INSTALLED_BOOTTARBALL_TARGET) + $(INSTALLED_BOOTTARBALL_TARGET) $(TARGET_OUT) endef ifndef BOOT_TARBALL_FORMAT @@ -1174,7 +1174,7 @@ define build-userdataimage-target $(call generate-userimage-prop-dictionary, $(userdataimage_intermediates)/userdata_image_info.txt, skip_fsck=true) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ - $(TARGET_OUT_DATA) $(userdataimage_intermediates)/userdata_image_info.txt $(INSTALLED_USERDATAIMAGE_TARGET) + $(TARGET_OUT_DATA) $(userdataimage_intermediates)/userdata_image_info.txt $(INSTALLED_USERDATAIMAGE_TARGET) $(TARGET_OUT) $(hide) $(call assert-max-image-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_PARTITION_SIZE)) endef @@ -1198,7 +1198,7 @@ define build-userdatatarball-target "$(INSTALLED_USERDATATARBALL_TARGET)") $(MKTARBALL) $(FS_GET_STATS) \ $(PRODUCT_OUT) data $(PRIVATE_USERDATA_TAR) \ - $(INSTALLED_USERDATATARBALL_TARGET) + $(INSTALLED_USERDATATARBALL_TARGET) $(TARGET_OUT) endef userdata_tar := $(PRODUCT_OUT)/userdata.tar @@ -1229,7 +1229,7 @@ define build-cacheimage-target $(call generate-userimage-prop-dictionary, $(cacheimage_intermediates)/cache_image_info.txt, skip_fsck=true) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ - $(TARGET_OUT_CACHE) $(cacheimage_intermediates)/cache_image_info.txt $(INSTALLED_CACHEIMAGE_TARGET) + $(TARGET_OUT_CACHE) $(cacheimage_intermediates)/cache_image_info.txt $(INSTALLED_CACHEIMAGE_TARGET) $(TARGET_OUT) $(hide) $(call assert-max-image-size,$(INSTALLED_CACHEIMAGE_TARGET),$(BOARD_CACHEIMAGE_PARTITION_SIZE)) endef @@ -1267,7 +1267,7 @@ define build-vendorimage-target $(call generate-userimage-prop-dictionary, $(vendorimage_intermediates)/vendor_image_info.txt, skip_fsck=true) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ - $(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt $(INSTALLED_VENDORIMAGE_TARGET) + $(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt $(INSTALLED_VENDORIMAGE_TARGET) $(TARGET_OUT) $(hide) $(call assert-max-image-size,$(INSTALLED_VENDORIMAGE_TARGET),$(BOARD_VENDORIMAGE_PARTITION_SIZE)) endef @@ -1519,10 +1519,10 @@ endif $(hide) (cd $(zip_root) && zip -qry ../$(notdir $@) .) @# Run fs_config on all the system, vendor, boot ramdisk, @# and recovery ramdisk files in the zip, and save the output - $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="SYSTEM/" } /^SYSTEM\// {print "system/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/filesystem_config.txt - $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="VENDOR/" } /^VENDOR\// {print "vendor/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/vendor_filesystem_config.txt - $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/boot_filesystem_config.txt - $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="RECOVERY/RAMDISK/" } /^RECOVERY\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/recovery_filesystem_config.txt + $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="SYSTEM/" } /^SYSTEM\// {print "system/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/filesystem_config.txt + $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="VENDOR/" } /^VENDOR\// {print "vendor/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/vendor_filesystem_config.txt + $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/boot_filesystem_config.txt + $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="RECOVERY/RAMDISK/" } /^RECOVERY\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/recovery_filesystem_config.txt $(hide) (cd $(zip_root) && zip -q ../$(notdir $@) META/*filesystem_config.txt) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH MKBOOTIMG=$(MKBOOTIMG) \ ./build/tools/releasetools/add_img_to_target_files -p $(HOST_OUT) $@ diff --git a/tools/fs_config/fs_config.c b/tools/fs_config/fs_config.c index f594c1e93..b9a14e172 100644 --- a/tools/fs_config/fs_config.c +++ b/tools/fs_config/fs_config.c @@ -68,16 +68,17 @@ static struct selabel_handle* get_sehnd(const char* context_file) { } static void usage() { - fprintf(stderr, "Usage: fs_config [-S context_file] [-C]\n"); + fprintf(stderr, "Usage: fs_config [-D product_out_path] [-S context_file] [-C]\n"); } int main(int argc, char** argv) { char buffer[1024]; const char* context_file = NULL; + const char* product_out_path = NULL; struct selabel_handle* sehnd = NULL; int print_capabilities = 0; int opt; - while((opt = getopt(argc, argv, "CS:")) != -1) { + while((opt = getopt(argc, argv, "CS:D:")) != -1) { switch(opt) { case 'C': print_capabilities = 1; @@ -85,6 +86,9 @@ int main(int argc, char** argv) { case 'S': context_file = optarg; break; + case 'D': + product_out_path = optarg; + break; default: usage(); exit(EXIT_FAILURE); @@ -115,7 +119,7 @@ int main(int argc, char** argv) { unsigned uid = 0, gid = 0, mode = 0; uint64_t capabilities; - fs_config(buffer, is_dir, &uid, &gid, &mode, &capabilities); + fs_config(buffer, is_dir, product_out_path, &uid, &gid, &mode, &capabilities); printf("%s %d %d %o", buffer, uid, gid, mode); if (sehnd != NULL) { diff --git a/tools/fs_get_stats/fs_get_stats.c b/tools/fs_get_stats/fs_get_stats.c index a9814b919..159e2aa91 100644 --- a/tools/fs_get_stats/fs_get_stats.c +++ b/tools/fs_get_stats/fs_get_stats.c @@ -25,11 +25,12 @@ print_help(void) { fprintf(stderr, "fs_get_stats: retrieve the target file stats " "for the specified file\n"); - fprintf(stderr, "usage: fs_get_stats cur_perms is_dir filename\n"); + fprintf(stderr, "usage: fs_get_stats cur_perms is_dir filename targetout\n"); fprintf(stderr, "\tcur_perms - The current permissions of " "the file\n"); fprintf(stderr, "\tis_dir - Is filename is a dir, 1. Otherwise, 0.\n"); fprintf(stderr, "\tfilename - The filename to lookup\n"); + fprintf(stderr, "\ttargetout - The target out path to query device specific FS configs\n"); fprintf(stderr, "\n"); } @@ -42,7 +43,7 @@ main(int argc, const char *argv[]) unsigned uid = (unsigned)-1; unsigned gid = (unsigned)-1; - if (argc < 4) { + if (argc < 5) { ERROR("Invalid arguments\n"); print_help(); exit(-1); @@ -58,7 +59,7 @@ main(int argc, const char *argv[]) is_dir = 1; uint64_t capabilities; - fs_config(argv[3], is_dir, &uid, &gid, &perms, &capabilities); + fs_config(argv[3], is_dir, argv[4], &uid, &gid, &perms, &capabilities); fprintf(stdout, "%d %d 0%o\n", uid, gid, perms); return 0; diff --git a/tools/mktarball.sh b/tools/mktarball.sh index 3e3200649..ef0fe86db 100755 --- a/tools/mktarball.sh +++ b/tools/mktarball.sh @@ -5,8 +5,9 @@ # $3: subdir to tar up (from $2) # $4: target tar name # $5: target tarball name (usually $(3).bz2) +# $6: TARGET_OUT path to query device specific FS configs -if [ $# -ne 5 ]; then +if [ $# -ne 6 ]; then echo "Error: wrong number of arguments in cmd: $0 $* " exit 1 fi @@ -16,6 +17,7 @@ start_dir=`readlink -f $2` dir_to_tar=$3 target_tar=`readlink -f $4` target_tarball=`readlink -f $5` +target_out=`readlink -f $6` cd $2 @@ -28,7 +30,7 @@ files=`find ${dir_to_tar} \! -type d -print` for f in ${subdirs} ${files} ; do curr_perms=`stat -c 0%a $f` [ -d "$f" ] && is_dir=1 || is_dir=0 - new_info=`${fs_get_stats} ${curr_perms} ${is_dir} ${f}` + new_info=`${fs_get_stats} ${curr_perms} ${is_dir} ${f} ${target_out}` new_uid=`echo ${new_info} | awk '{print $1;}'` new_gid=`echo ${new_info} | awk '{print $2;}'` new_perms=`echo ${new_info} | awk '{print $3;}'` diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py index 5e8f0e618..4b43c0cf5 100755 --- a/tools/releasetools/build_image.py +++ b/tools/releasetools/build_image.py @@ -204,13 +204,14 @@ def MakeVerityEnabledImage(out_file, prop_dict): shutil.rmtree(tempdir_name, ignore_errors=True) return True -def BuildImage(in_dir, prop_dict, out_file): +def BuildImage(in_dir, prop_dict, out_file, target_out=None): """Build an image to out_file from in_dir with property prop_dict. Args: in_dir: path of input directory. prop_dict: property dictionary. out_file: path of the output image file. + target_out: path of the product out directory to read device specific FS config files. Returns: True iff the image is built successfully. @@ -272,6 +273,8 @@ def BuildImage(in_dir, prop_dict, out_file): build_command.extend(["-T", str(prop_dict["timestamp"])]) if fs_config: build_command.extend(["-C", fs_config]) + if target_out: + build_command.extend(["-D", target_out]) if "block_list" in prop_dict: build_command.extend(["-B", prop_dict["block_list"]]) build_command.extend(["-L", prop_dict["mount_point"]]) @@ -282,6 +285,8 @@ def BuildImage(in_dir, prop_dict, out_file): build_command.extend([in_dir, out_file]) build_command.extend(["-s"]) build_command.extend(["-m", prop_dict["mount_point"]]) + if target_out: + build_command.extend(["-d", target_out]) if "selinux_fc" in prop_dict: build_command.extend(["-c", prop_dict["selinux_fc"]]) if "squashfs_compressor" in prop_dict: @@ -467,13 +472,14 @@ def LoadGlobalDict(filename): def main(argv): - if len(argv) != 3: + if len(argv) != 4: print __doc__ sys.exit(1) in_dir = argv[0] glob_dict_file = argv[1] out_file = argv[2] + target_out = argv[3] glob_dict = LoadGlobalDict(glob_dict_file) if "mount_point" in glob_dict: @@ -499,7 +505,7 @@ def main(argv): image_properties = ImagePropFromGlobalDict(glob_dict, mount_point) - if not BuildImage(in_dir, image_properties, out_file): + if not BuildImage(in_dir, image_properties, out_file, target_out): print >> sys.stderr, "error: failed to build %s from %s" % (out_file, in_dir) exit(1)