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

Commit 065521be authored by Ying Wang's avatar Ying Wang
Browse files

Backport ext4 support from master [DO NOT MERGE]

ext4 support is needed by crespo.

Change-Id: I604cb9ada526ce8ba6b3648171ac1d614a5519a9
parent ad3cf5f8
Loading
Loading
Loading
Loading
+44 −16
Original line number Diff line number Diff line
@@ -545,11 +545,38 @@ otacerts: $(TARGET_OUT_ETC)/security/otacerts.zip
# Targets for user images
# #################################################################

INTERNAL_USERIMAGES_EXT_VARIANT :=
ifeq ($(TARGET_USERIMAGES_USE_EXT2),true)
include external/genext2fs/Config.mk
INTERNAL_MKUSERFS := $(MKEXT2IMG)
INTERNAL_USERIMAGES_USE_EXT := true
INTERNAL_USERIMAGES_EXT_VARIANT := ext2
else
INTERNAL_MKUSERFS := $(MKYAFFS2)
ifeq ($(TARGET_USERIMAGES_USE_EXT3),true)
INTERNAL_USERIMAGES_USE_EXT := true
INTERNAL_USERIMAGES_EXT_VARIANT := ext3
else
ifeq ($(TARGET_USERIMAGES_USE_EXT4),true)
INTERNAL_USERIMAGES_USE_EXT := true
INTERNAL_USERIMAGES_EXT_VARIANT := ext4
endif
endif
endif

ifeq ($(INTERNAL_USERIMAGES_USE_EXT),true)
INTERNAL_USERIMAGES_DEPS := $(MKEXT2USERIMG) $(MAKE_EXT4FS)
INTERNAL_USERIMAGES_BINARY_PATHS := $(sort $(dir $(INTERNAL_USERIMAGES_DEPS)))

# $(1): src directory
# $(2): output file
# $(3): label
# $(4): ext variant (ext2, ext3, ext4)
# $(5): size of the partition
define build-userimage-ext-target
  @mkdir -p $(dir $(2))
    $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$(PATH) \
	  $(MKEXT2USERIMG) $(1) $(2) $(4) $(3) $(5)
endef
else
INTERNAL_USERIMAGES_DEPS := $(MKYAFFS2)
endif

# -----------------------------------------------------------------
@@ -664,15 +691,15 @@ INTERNAL_SYSTEMIMAGE_FILES := $(filter $(TARGET_OUT)/%, \
	$(ALL_GENERATED_SOURCES) \
	$(ALL_DEFAULT_INSTALLED_MODULES))

ifeq ($(TARGET_USERIMAGES_USE_EXT2),true)
ifeq ($(INTERNAL_USERIMAGES_USE_EXT),true)
## generate an ext2 image
# $(1): output file
define build-systemimage-target
    @echo "Target system fs image: $(1)"
    $(call build-userimage-ext2-target,$(TARGET_OUT),$(1),system,)
    $(call build-userimage-ext-target,$(TARGET_OUT),$(1),system,$(INTERNAL_USERIMAGES_EXT_VARIANT),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE))
endef

else # TARGET_USERIMAGES_USE_EXT2 != true
else # INTERNAL_USERIMAGES_USE_EXT != true

## generate a yaffs2 image
# $(1): output file
@@ -681,9 +708,9 @@ define build-systemimage-target
    @mkdir -p $(dir $(1))
    $(hide) $(MKYAFFS2) -f $(mkyaffs2_extra_flags) $(TARGET_OUT) $(1)
endef
endif # TARGET_USERIMAGES_USE_EXT2
endif # INTERNAL_USERIMAGES_USE_EXT

$(BUILT_SYSTEMIMAGE_UNOPT): $(INTERNAL_SYSTEMIMAGE_FILES) $(INTERNAL_MKUSERFS)
$(BUILT_SYSTEMIMAGE_UNOPT): $(INTERNAL_SYSTEMIMAGE_FILES) $(INTERNAL_USERIMAGES_DEPS)
	$(call build-systemimage-target,$@)

# The installed image, which may be optimized or unoptimized.
@@ -730,7 +757,7 @@ systemimage: $(INSTALLED_SYSTEMIMAGE)

.PHONY: systemimage-nodeps snod
systemimage-nodeps snod: $(filter-out systemimage-nodeps snod,$(MAKECMDGOALS)) \
	            | $(INTERNAL_MKUSERFS)
	            | $(INTERNAL_USERIMAGES_DEPS)
	@echo "make $@: ignoring dependencies"
	$(call build-systemimage-target,$(INSTALLED_SYSTEMIMAGE))
	$(hide) $(call assert-max-image-size,$(INSTALLED_SYSTEMIMAGE),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE),yaffs)
@@ -764,16 +791,16 @@ stnod: systemtarball-nodeps
INTERNAL_USERDATAIMAGE_FILES := \
	$(filter $(TARGET_OUT_DATA)/%,$(ALL_DEFAULT_INSTALLED_MODULES))

ifeq ($(TARGET_USERIMAGES_USE_EXT2),true)
## Generate an ext2 image
ifeq ($(INTERNAL_USERIMAGES_USE_EXT),true)
## Generate an ext image
define build-userdataimage-target
    $(call pretty,"Target userdata fs image: $(INSTALLED_USERDATAIMAGE_TARGET)")
    @mkdir -p $(TARGET_OUT_DATA)
    $(call build-userimage-ext2-target,$(TARGET_OUT_DATA),$(INSTALLED_USERDATAIMAGE_TARGET),userdata,)
    $(call build-userimage-ext-target,$(TARGET_OUT_DATA),$(INSTALLED_USERDATAIMAGE_TARGET),userdata,$(INTERNAL_USERIMAGES_EXT_VARIANT),$(BOARD_USERDATAIMAGE_PARTITION_SIZE))
    $(hide) $(call assert-max-image-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_PARTITION_SIZE),yaffs)
endef

else # TARGET_USERIMAGES_USE_EXT2 != true
else # INTERNAL_USERIMAGES_USE_EXT != true

## Generate a yaffs2 image
define build-userdataimage-target
@@ -782,18 +809,18 @@ define build-userdataimage-target
    $(hide) $(MKYAFFS2) -f $(mkyaffs2_extra_flags) $(TARGET_OUT_DATA) $(INSTALLED_USERDATAIMAGE_TARGET)
    $(hide) $(call assert-max-image-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_PARTITION_SIZE),yaffs)
endef
endif # TARGET_USERIMAGES_USE_EXT2
endif # INTERNAL_USERIMAGES_USE_EXT

BUILT_USERDATAIMAGE_TARGET := $(PRODUCT_OUT)/userdata.img

# We just build this directly to the install location.
INSTALLED_USERDATAIMAGE_TARGET := $(BUILT_USERDATAIMAGE_TARGET)
$(INSTALLED_USERDATAIMAGE_TARGET): $(INTERNAL_MKUSERFS) \
$(INSTALLED_USERDATAIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) \
                                   $(INTERNAL_USERDATAIMAGE_FILES)
	$(build-userdataimage-target)

.PHONY: userdataimage-nodeps
userdataimage-nodeps: $(INTERNAL_MKUSERFS)
userdataimage-nodeps: $(INTERNAL_USERIMAGES_DEPS)
	$(build-userdataimage-target)

#######
@@ -1142,6 +1169,7 @@ $(INTERNAL_UPDATE_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(OTATOOLS)
	$(hide) ./build/tools/releasetools/img_from_target_files \
	   -s $(extensions) \
	   -p $(HOST_OUT) \
	   $(addprefix --fs_type ,$(INTERNAL_USERIMAGES_EXT_VARIANT)) \
	   $(BUILT_TARGET_FILES_PACKAGE) $@

.PHONY: updatepackage
+2 −0
Original line number Diff line number Diff line
@@ -206,6 +206,8 @@ MKYAFFS2 := $(HOST_OUT_EXECUTABLES)/mkyaffs2image$(HOST_EXECUTABLE_SUFFIX)
APICHECK := $(HOST_OUT_EXECUTABLES)/apicheck$(HOST_EXECUTABLE_SUFFIX)
FS_GET_STATS := $(HOST_OUT_EXECUTABLES)/fs_get_stats$(HOST_EXECUTABLE_SUFFIX)
MKEXT2IMG := $(HOST_OUT_EXECUTABLES)/genext2fs$(HOST_EXECUTABLE_SUFFIX)
MAKE_EXT4FS := $(HOST_OUT_EXECUTABLES)/make_ext4fs$(HOST_EXECUTABLE_SUFFIX)
MKEXT2USERIMG := $(HOST_OUT_EXECUTABLES)/mkuserimg.sh
MKEXT2BOOTIMG := external/genext2fs/mkbootimg_ext2.sh
MKTARBALL := build/tools/mktarball.sh
TUNE2FS := tune2fs
+37 −7
Original line number Diff line number Diff line
@@ -23,6 +23,11 @@ Usage: img_from_target_files [flags] input_target_files output_image_zip
  -b  (--board_config)  <file>
      Deprecated.

  -f (--fs_type) <value>
     The file system type of the user image files to be created.
     It can be ext fs variants, such as ext2, ext3, ext4, etc.
     efault is yaffs.

"""

import sys
@@ -47,6 +52,9 @@ import common

OPTIONS = common.OPTIONS

class UserImageOptions(object): pass
USERIMAGE_OPTIONS = UserImageOptions()
USERIMAGE_OPTIONS.fs_type = None

def AddUserdata(output_zip):
  """Create an empty userdata image and store it in output_zip."""
@@ -61,9 +69,19 @@ def AddUserdata(output_zip):
  os.mkdir(user_dir)
  img = tempfile.NamedTemporaryFile()

  p = common.Run(["mkyaffs2image", "-f", user_dir, img.name])
  build_command = []
  if USERIMAGE_OPTIONS.fs_type is not None and USERIMAGE_OPTIONS.fs_type.startswith("ext"):
    build_command = ["mkuserimg.sh",
                     user_dir, img.name, USERIMAGE_OPTIONS.fs_type, "userdata"]
    if "userdata.img" in OPTIONS.max_image_size:
      build_command.append(str(OPTIONS.max_image_size["userdata.img"]))
  else:
    build_command = ["mkyaffs2image", "-f",
                     user_dir, img.name]

  p = common.Run(build_command)
  p.communicate()
  assert p.returncode == 0, "mkyaffs2image of userdata.img image failed"
  assert p.returncode == 0, "build userdata.img image failed"

  common.CheckSize(img.name, "userdata.img")
  output_zip.write(img.name, "userdata.img")
@@ -94,10 +112,20 @@ def AddSystem(output_zip):
    if (e.errno == errno.EEXIST):
      pass

  p = common.Run(["mkyaffs2image", "-f",
                  os.path.join(OPTIONS.input_tmp, "system"), img.name])
  build_command = []
  if USERIMAGE_OPTIONS.fs_type is not None and USERIMAGE_OPTIONS.fs_type.startswith("ext"):
    build_command = ["mkuserimg.sh",
                     os.path.join(OPTIONS.input_tmp, "system"), img.name,
                     USERIMAGE_OPTIONS.fs_type, "system"]
    if "system.img" in OPTIONS.max_image_size:
      build_command.append(str(OPTIONS.max_image_size["system.img"]))
  else:
    build_command = ["mkyaffs2image", "-f",
                     os.path.join(OPTIONS.input_tmp, "system"), img.name]

  p = common.Run(build_command)
  p.communicate()
  assert p.returncode == 0, "mkyaffs2image of system.img image failed"
  assert p.returncode == 0, "build system.img image failed"

  img.seek(os.SEEK_SET, 0)
  data = img.read()
@@ -118,13 +146,15 @@ def main(argv):
  def option_handler(o, a):
    if o in ("-b", "--board_config"):
      pass       # deprecated
    elif o in ("-f", "--fs_type"):
      USERIMAGE_OPTIONS.fs_type = a
    else:
      return False
    return True

  args = common.ParseOptions(argv, __doc__,
                             extra_opts="b:",
                             extra_long_opts=["board_config="],
                             extra_opts="b:f:",
                             extra_long_opts=["board_config=", "fs_type="],
                             extra_option_handler=option_handler)

  if len(args) != 2: