Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ccc711c7 authored by Ethan Chen's avatar Ethan Chen Committed by Adnan Begovic
Browse files

Generate extra userdata partition if needed

* To support variants of devices which may come in 16/32/64GB variants.

Change-Id: I74c32d8316f0450a1445fe95a95e5cabb7a9dd1b
(cherry picked from commit aae837f9)
parent 1d86c80f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -777,6 +777,8 @@ $(if $(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR),$(hide) echo "system_squashfs_comp
$(if $(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR_OPT),$(hide) echo "system_squashfs_compressor_opt=$(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR_OPT)" >> $(1))
$(if $(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "userdata_fs_type=$(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
$(if $(BOARD_USERDATAIMAGE_PARTITION_SIZE),$(hide) echo "userdata_size=$(BOARD_USERDATAIMAGE_PARTITION_SIZE)" >> $(1))
$(if $(BOARD_USERDATAEXTRAIMAGE_PARTITION_SIZE),$(hide) echo "userdataextra_size=$(BOARD_USERDATAEXTRAIMAGE_PARTITION_SIZE)" >> $(1))
$(if $(BOARD_USERDATAEXTRAIMAGE_PARTITION_NAME),$(hide) echo "userdataextra_name=$(BOARD_USERDATAEXTRAIMAGE_PARTITION_NAME)" >> $(1))
$(if $(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "cache_fs_type=$(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
$(if $(BOARD_CACHEIMAGE_PARTITION_SIZE),$(hide) echo "cache_size=$(BOARD_CACHEIMAGE_PARTITION_SIZE)" >> $(1))
$(if $(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "vendor_fs_type=$(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
+29 −0
Original line number Diff line number Diff line
@@ -139,6 +139,35 @@ ALL_MODULES.$(LOCAL_MODULE).INSTALLED += $(INSTALLED_1G_USERDATAIMAGE_TARGET)
endif


#----------------------------------------------------------------------
# Generate extra userdata images (for variants with multiple mmc sizes)
#----------------------------------------------------------------------
ifneq ($(BOARD_USERDATAEXTRAIMAGE_PARTITION_SIZE),)

ifndef BOARD_USERDATAEXTRAIMAGE_PARTITION_NAME
  BOARD_USERDATAEXTRAIMAGE_PARTITION_NAME := extra
endif

BUILT_USERDATAEXTRAIMAGE_TARGET := $(PRODUCT_OUT)/userdata_$(BOARD_USERDATAEXTRAIMAGE_PARTITION_NAME).img

define build-userdataextraimage-target
    $(call pretty,"Target EXTRA userdata fs image: $(INSTALLED_USERDATAEXTRAIMAGE_TARGET)")
    @mkdir -p $(TARGET_OUT_DATA)
    $(hide) $(MKEXTUSERIMG) -s $(TARGET_OUT_DATA) $@ ext4 data $(BOARD_USERDATAEXTRAIMAGE_PARTITION_SIZE)
    $(hide) chmod a+r $@
    $(hide) $(call assert-max-image-size,$@,$(BOARD_USERDATAEXTRAIMAGE_PARTITION_SIZE),yaffs)
endef

INSTALLED_USERDATAEXTRAIMAGE_TARGET := $(BUILT_USERDATAEXTRAIMAGE_TARGET)
$(INSTALLED_USERDATAEXTRAIMAGE_TARGET): $(INSTALLED_USERDATAIMAGE_TARGET)
	$(build-userdataextraimage-target)

ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_USERDATAEXTRAIMAGE_TARGET)
ALL_MODULES.$(LOCAL_MODULE).INSTALLED += $(INSTALLED_USERDATAEXTRAIMAGE_TARGET)

endif


#----------------------------------------------------------------------
# Generate NAND images
#----------------------------------------------------------------------
+38 −0
Original line number Diff line number Diff line
@@ -191,6 +191,42 @@ def AddUserdata(output_zip, prefix="IMAGES/"):
  os.rmdir(temp_dir)


def AddUserdataExtra(output_zip):
  """Create extra userdata image and store it in output_zip."""

  image_props = build_image.ImagePropFromGlobalDict(OPTIONS.info_dict,
                                                  "data_extra")
  # If no userdataextra_size is provided for extfs, skip userdata_extra.img.
  if (image_props.get("fs_type", "").startswith("ext") and
      not image_props.get("partition_size")):
    return

  extra_name = image_props.get("partition_name", "extra")

  print "creating userdata_%s.img..." % extra_name

  # The name of the directory it is making an image out of matters to
  # mkyaffs2image.  So we create a temp dir, and within it we create an
  # empty dir named "data", and build the image from that.
  temp_dir = tempfile.mkdtemp()
  user_dir = os.path.join(temp_dir, "data")
  os.mkdir(user_dir)
  img = tempfile.NamedTemporaryFile()

  fstab = OPTIONS.info_dict["fstab"]
  if fstab:
    image_props["fs_type" ] = fstab["/data"].fs_type
  succ = build_image.BuildImage(user_dir, image_props, img.name)
  assert succ, "build userdata_%s.img image failed" % extra_name

  # Disable size check since this fetches original data partition size
  #common.CheckSize(img.name, "userdata_extra.img", OPTIONS.info_dict)
  output_zip.write(img.name, "userdata_%s.img" % extra_name)
  img.close()
  os.rmdir(user_dir)
  os.rmdir(temp_dir)


def AddCache(output_zip, prefix="IMAGES/"):
  """Create an empty cache image and store it in output_zip."""

@@ -290,6 +326,8 @@ def AddImagesToTargetFiles(filename):
    AddVendor(output_zip)
  banner("userdata")
  AddUserdata(output_zip)
  banner("extrauserdata")
  AddUserdataExtra(output_zip)
  banner("cache")
  AddCache(output_zip)

+11 −2
Original line number Diff line number Diff line
@@ -264,6 +264,10 @@ def BuildImage(in_dir, prop_dict, out_file, target_out=None):
    if "extfs_sparse_flag" in prop_dict:
      build_command.append(prop_dict["extfs_sparse_flag"])
      #run_fsck = True
    if "is_userdataextra" in prop_dict:
      build_command.extend([in_dir, out_file, fs_type,
                           "data"])
    else:
      build_command.extend([in_dir, out_file, fs_type,
                            prop_dict["mount_point"]])
    build_command.append(prop_dict["partition_size"])
@@ -439,6 +443,11 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
    copy_prop("fs_type", "fs_type")
    copy_prop("userdata_fs_type", "fs_type")
    copy_prop("userdata_size", "partition_size")
  elif mount_point == "data_extra":
    copy_prop("fs_type", "fs_type")
    copy_prop("userdataextra_size", "partition_size")
    copy_prop("userdataextra_name", "partition_name")
    d["is_userdataextra"] = True
  elif mount_point == "cache":
    copy_prop("cache_fs_type", "fs_type")
    copy_prop("cache_size", "partition_size")
+2 −2
Original line number Diff line number Diff line
@@ -612,8 +612,8 @@ def CheckSize(data, target, info_dict):
  fs_type = None
  limit = None
  if info_dict["fstab"]:
    if mount_point == "/userdata":
      mount_point = "/data"
    if mount_point == "/userdata_extra": mount_point = "/data"
    if mount_point == "/userdata": mount_point = "/data"
    p = info_dict["fstab"][mount_point]
    fs_type = p.fs_type
    device = p.device