diff --git a/BoardConfig.mk b/BoardConfig.mk
index 36d9b930..df724901 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -29,7 +29,6 @@ TARGET_SPECIFIC_HEADER_PATH := $(LOCAL_PATH)/include
BOARD_VENDOR := htc
-
# Bootloader
TARGET_NO_BOOTLOADER := true
@@ -79,7 +78,6 @@ AUDIO_FEATURE_ENABLED_FM := true
TARGET_GPS_HAL_PATH := $(LOCAL_PATH)/gps
BOARD_VENDOR_QCOM_GPS_LOC_API_AMSS_VERSION := 50000
-
# Graphics
USE_OPENGL_RENDERER := true
TARGET_DISPLAY_USE_RETIRE_FENCE := true
@@ -87,6 +85,7 @@ TARGET_USES_C2D_COMPOSITION := true
TARGET_USES_ION := true
NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3
TARGET_DISPLAY_INSECURE_MM_HEAP := true
+DEVICE_RESOLUTION := 540x960
# Media
TARGET_NO_ADAPTIVE_PLAYBACK := true
@@ -112,11 +111,14 @@ BOARD_MKBOOTIMG_ARGS := --ramdisk_offset 0x01400000
TARGET_KERNEL_CONFIG := pyramid_defconfig
TARGET_KERNEL_SOURCE := kernel/htc/pyramid
+# Recovery
+TARGET_RECOVERY_DEVICE_MODULES += chargeled
TARGET_RECOVERY_FSTAB := device/htc/pyramid/rootdir/etc/fstab.pyramid
RECOVERY_FSTAB_VERSION := 2
TARGET_RECOVERY_PIXEL_FORMAT := "RGBX_8888"
RECOVERY_GRAPHICS_USE_LINELENGTH := true
TARGET_RECOVERY_DEVICE_DIRS += device/htc/pyramid
+RECOVERY_SDCARD_ON_DATA := true
# Required for Sensors
COMMON_GLOBAL_CFLAGS += -DNEEDS_VECTORIMPL_SYMBOLS
@@ -148,9 +150,6 @@ BOARD_SUPPRESS_EMMC_WIPE := true
# Use dlmalloc
MALLOC_IMPL := dlmalloc
-# Recovery
-TARGET_RECOVERY_DEVICE_MODULES += chargeled
-
# SELinux
-include device/qcom/sepolicy/sepolicy.mk
@@ -173,7 +172,7 @@ BOARD_SYSTEMIMAGE_PARTITION_SIZE := 838859776
BOARD_USERDATAIMAGE_PARTITION_SIZE := 1252770816
BOARD_FLASH_BLOCK_SIZE := 262144
-# Twrp
+# TWRP
TW_THEME := portrait_mdpi
TW_INCLUDE_CRYPTO := true
TW_NO_SCREEN_BLANK := true
@@ -183,3 +182,7 @@ TW_NEW_ION_HEAP := true
TW_INCLUDE_NTFS_3G := true
TW_BRIGHTNESS_PATH := "/sys/class/leds/lcd-backlight/brightness"
TARGET_USE_CUSTOM_LUN_FILE_PATH := "/sys/devices/platform/msm_hsusb/gadget/lun0/file"
+TW_BACKUP_DATA_MEDIA := true
+TW_INTERNAL_STORAGE_PATH := /sdcard
+TW_EXTERNAL_STORAGE_PATH := /sdcard1
+TW_INCLUDE_L_CRYPTO := true
diff --git a/device_pyramid.mk b/device_pyramid.mk
index d759d421..de6cbaf9 100644
--- a/device_pyramid.mk
+++ b/device_pyramid.mk
@@ -149,6 +149,7 @@ DEVICE_PACKAGE_OVERLAYS += $(LOCAL_PATH)/overlay
# Ramdisk
PRODUCT_PACKAGES += \
fstab.pyramid \
+ init.pyramid.sh \
init.pyramid.rc \
init.pyramid.usb.rc \
ueventd.pyramid.rc \
diff --git a/overlay/frameworks/base/core/res/res/xml/storage_list.xml b/overlay/frameworks/base/core/res/res/xml/storage_list.xml
index 208b2c3f..5d92fdae 100644
--- a/overlay/frameworks/base/core/res/res/xml/storage_list.xml
+++ b/overlay/frameworks/base/core/res/res/xml/storage_list.xml
@@ -1,7 +1,7 @@
-
+
-
-
+
+
+
+
+
+ android:storageDescription="@string/storage_usb"
+ android:removable="true" />
diff --git a/recovery.fstab b/recovery.fstab
index 780f9a78..bf1959e1 100644
--- a/recovery.fstab
+++ b/recovery.fstab
@@ -1,10 +1,11 @@
-# mount point fstype device [device2] [length=]
+# mount point fstype device [device2] [length=]
-/recovery emmc /dev/block/mmcblk0p21
-/boot emmc /dev/block/mmcblk0p20
-/cache ext4 /dev/block/mmcblk0p24
-/data ext4 /dev/block/mmcblk0p23 length=-16384
-/sd-ext ext4 /dev/block/mmcblk1p2
-/sdcard vfat /dev/block/mmcblk1p1
+/boot emmc /dev/block/mmcblk0p20
+/recovery emmc /dev/block/mmcblk0p21
/system ext4 /dev/block/mmcblk0p22
+/data f2fs /dev/block/mmcblk0p23 length=-16384
+/cache f2fs /dev/block/mmcblk0p24
/misc emmc /dev/block/mmcblk0p31
+/sdcard1 vfat /dev/block/mmcblk1p1 /dev/block/mmcblk1 flags=display="sdcard1";storage;wipeingui;removable
+/data1 f2fs /dev/block/mmcblk1p2 /dev/block/mmcblk1 flags=display="data1";wipeingui;removable
+/usbdisk vfat /dev/block/sda1 /dev/block/sda flags=display="usbdisk";storage;wipeingui;removable
diff --git a/recovery/root/etc/twrp.fstab b/recovery/root/etc/twrp.fstab
index 82a48d70..d24c4484 100644
--- a/recovery/root/etc/twrp.fstab
+++ b/recovery/root/etc/twrp.fstab
@@ -1,12 +1,11 @@
-# mount point fstype device [device2] [length=]
-
-/boot emmc /dev/block/mmcblk0p20
-/recovery emmc /dev/block/mmcblk0p21
-/system ext4 /dev/block/mmcblk0p22
-/data ext4 /dev/block/mmcblk0p23 length=-16384
-/cache ext4 /dev/block/mmcblk0p24
-/misc emmc /dev/block/mmcblk0p31
-/sdcard vfat /dev/block/mmcblk1p1 /dev/block/mmcblk1 flags=display="MicroSD card";storage;wipeingui;removable
-/sd-ext ext4 /dev/block/mmcblk1p2 flags=display="SD-Ext";wipeingui;removable
-#/usb-otg vfat /dev/block/sda1 /dev/block/sda flags=display="USB OTG";storage;wipeingui;removable
+# mount point fstype device [device2] [length=]
+/boot emmc /dev/block/mmcblk0p20
+/recovery emmc /dev/block/mmcblk0p21
+/system ext4 /dev/block/mmcblk0p22
+/data f2fs /dev/block/mmcblk0p23 length=-16384
+/cache f2fs /dev/block/mmcblk0p24
+/misc emmc /dev/block/mmcblk0p31
+/sdcard1 vfat /dev/block/mmcblk1p1 /dev/block/mmcblk1 flags=display="sdcard1";andsec;storage;wipeingui;removable
+/data1 f2fs /dev/block/mmcblk1p2 /dev/block/mmcblk1 flags=display="data1";wipeingui;removable
+/usbdisk vfat /dev/block/sda1 /dev/block/sda flags=display="usbdisk";storage;wipeingui;removable
diff --git a/rootdir/Android.mk b/rootdir/Android.mk
index 346808f8..6b6a7c06 100644
--- a/rootdir/Android.mk
+++ b/rootdir/Android.mk
@@ -8,6 +8,14 @@ LOCAL_SRC_FILES := etc/fstab.pyramid
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
include $(BUILD_PREBUILT)
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.pyramid.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/init.pyramid.sh
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
include $(CLEAR_VARS)
LOCAL_MODULE := init.pyramid.rc
LOCAL_MODULE_TAGS := optional eng
diff --git a/rootdir/etc/fstab.pyramid b/rootdir/etc/fstab.pyramid
old mode 100755
new mode 100644
index dd914230..59c9dffe
--- a/rootdir/etc/fstab.pyramid
+++ b/rootdir/etc/fstab.pyramid
@@ -1,25 +1,26 @@
# Android fstab file.
-#
-#/dev/block/platform/msm_sdcc.1/by-name/dsps /firmware_dsps vfat ro,shortname=lower wait
-/dev/block/platform/msm_sdcc.1/by-name/radio /firmware_radio vfat ro,shortname=lower,context=u:object_r:firmware_file:s0 wait
-/dev/block/platform/msm_sdcc.1/by-name/adsp /firmware_q6 vfat ro,shortname=lower,context=u:object_r:firmware_file:s0 wait
-#/dev/block/platform/msm_sdcc.1/by-name/wcnss /firmware_wcnss vfat ro,shortname=lower wait
-
-/dev/block/platform/msm_sdcc.1/by-name/boot /boot emmc defaults defaults
-/dev/block/platform/msm_sdcc.1/by-name/recovery /recovery emmc defaults defaults
-/dev/block/platform/msm_sdcc.1/by-name/misc /misc emmc defaults defaults
-/dev/block/platform/msm_sdcc.1/by-name/devlog /devlog ext4 noatime,nosuid,nodev,barrier=0 wait
-/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 rw,noatime,barrier=0 wait
-/dev/block/platform/msm_sdcc.1/by-name/cache /cache ext4 noatime,nosuid,nodev,barrier=0 wait
-/dev/block/platform/msm_sdcc.1/by-name/cache /cache f2fs rw,discard,nosuid,nodev,noatime,nodiratime,inline_xattr wait,check
-/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 noatime,nosuid,nodev,noauto_da_alloc,barrier=0 wait,encryptable=footer,length=-16384
-/dev/block/platform/msm_sdcc.1/by-name/userdata /data f2fs rw,discard,nosuid,nodev,noatime,nodiratime,inline_xattr wait,check,encryptable=footer,length=-16384
+#
+#/dev/block/platform/msm_sdcc.1/by-name/dsps /firmware_dsps vfat ro,shortname=lower wait
+/dev/block/platform/msm_sdcc.1/by-name/radio /firmware_radio vfat ro,shortname=lower,context=u:object_r:firmware_file:s0 wait
+/dev/block/platform/msm_sdcc.1/by-name/adsp /firmware_q6 vfat ro,shortname=lower,context=u:object_r:firmware_file:s0 wait
+#/dev/block/platform/msm_sdcc.1/by-name/wcnss /firmware_wcnss vfat ro,shortname=lower wait
+/dev/block/platform/msm_sdcc.1/by-name/boot /boot emmc defaults defaults
+/dev/block/platform/msm_sdcc.1/by-name/recovery /recovery emmc defaults defaults
+/dev/block/platform/msm_sdcc.1/by-name/misc /misc emmc defaults defaults
+/dev/block/platform/msm_sdcc.1/by-name/devlog /devlog ext4 noatime,nosuid,nodev,barrier=0 wait
+/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,noatime,barrier=1 wait
+/dev/block/platform/msm_sdcc.1/by-name/cache /cache ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic wait,check
+/dev/block/platform/msm_sdcc.1/by-name/cache /cache f2fs rw,discard,nosuid,nodev,noatime,nodiratime,inline_xattr wait,check
+/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic wait,check,encryptable=footer,length=-16384
+/dev/block/platform/msm_sdcc.1/by-name/userdata /data f2fs noatime,nodiratime,nosuid,nodev,inline_xattr,discard,rw wait,check,encryptable=footer,length=-16384
+/dev/block/platform/msm_sdcc.3/by-num/p2 /data1 ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic wait,check
+/dev/block/platform/msm_sdcc.3/by-num/p2 /data1 f2fs noatime,nodiratime,nosuid,nodev,inline_xattr,discard,rw wait,check
# SD card
-/devices/platform/msm_sdcc.3/mmc_host/mmc1* auto vfat defaults voldmanaged=sdcard0:auto,noemulatedsd
+/devices/platform/msm_sdcc.3/mmc_host/mmc1* auto vfat defaults voldmanaged=sdcard1:auto,noemulatedsd
# USB storage
-/devices/platform/msm_hsusb_host.0/usb1* auto auto defaults voldmanaged=usbdisk:auto
+d* auto auto defaults voldmanaged=usbdisk:auto,noemulatedsd
# ZRAM
-/dev/block/zram0 none swap defaults zramsize=268435456
+/dev/block/zram0 none swap defaults zramsize=268435456
\ No newline at end of file
diff --git a/rootdir/etc/init.pyramid.rc b/rootdir/etc/init.pyramid.rc
index 95935e52..26308de3 100755
--- a/rootdir/etc/init.pyramid.rc
+++ b/rootdir/etc/init.pyramid.rc
@@ -11,17 +11,28 @@ on early-init
on init
mkdir /devlog 0700 root root
- mkdir /mnt/media_rw/sdcard0 0700 media_rw media_rw
- mkdir /mnt/media_rw/usbdisk 0700 media_rw media_rw
- mkdir /storage/sdcard0 0700 root root
- mkdir /storage/usbdisk 0700 root root
+ # See storage config details at http://source.android.com/tech/storage/
+ mkdir /mnt/shell/emulated 0700 shell shell
+ mkdir /storage/emulated 0555 root root
- # for backwards compatibility
- symlink /storage/sdcard0 /sdcard
- symlink /storage/sdcard0 /mnt/sdcard
- symlink /storage/usbdisk /usbdisk
- symlink /storage/usbdisk /mnt/usbdisk
+ export EXTERNAL_STORAGE /storage/emulated/legacy
+ export EMULATED_STORAGE_SOURCE /mnt/shell/emulated
+ export EMULATED_STORAGE_TARGET /storage/emulated
+
+ # Secondary storage
+ mkdir /mnt/media_rw/sdcard1 0700 media_rw media_rw
+ mkdir /storage/sdcard1 0700 root root
+ export SECONDARY_STORAGE /storage/sdcard1
+
+ # Secondary data (optional)
+ mkdir /data1 0771 root root
+
+ # Support legacy paths
+ symlink /storage/emulated/legacy /sdcard
+ symlink /storage/emulated/legacy /mnt/sdcard
+ symlink /storage/emulated/legacy /storage/sdcard0
+ symlink /mnt/shell/emulated/0 /storage/emulated/legacy
setprop ro.usb.idproduct.ums 0c86
setprop ro.usb.idproduct.rndis 0c86
@@ -29,11 +40,7 @@ on init
setprop ro.usb.idproduct.mtp_adb 0f87
setprop ro.usb.idproduct.ptp 0f87
- export EXTERNAL_STORAGE /storage/sdcard0
- export SECONDARY_STORAGE /storage/usbdisk
-
on fs
-
# create firmware mount points
mkdir /firmware_radio 0771 system system
mkdir /firmware_q6 0771 system system
@@ -51,13 +58,17 @@ on fs
chmod 0644 /proc/cmdline
setprop ro.crypto.tmpfs_options size=128m,mode=0771,uid=1000,gid=1000
+ setprop ro.crypto.fuse_sdcard true
# Force loading of modem and Q6 images
write /dev/smd_pkt_loopback 1
- # link widevine drm library path
+ # link widevine drm library path
symlink /system/vendor/lib /vendor/lib
+ # run device's script
+ exec /init.pyramid.sh
+
mount_all /remount.pyramid
on post-fs-data
@@ -65,6 +76,8 @@ on post-fs-data
chown root root /devlog
chmod 0700 /devlog
+ mkdir /data/media 0770 media_rw media_rw
+
# Set indication (checked by vold) that we have finished this action
setprop vold.post_fs_data_done 1
@@ -262,13 +275,14 @@ service iprenew_wlan0 /system/bin/dhcpcd -n
oneshot
# wifi--
-service fuse_sdcard0 /system/bin/sdcard -u 1023 -g 1023 -d /mnt/media_rw/sdcard0 /storage/sdcard0
- class late_start
- disabled
+# external sdcard daemon running as media_rw (1023)
+service fuse_sdcard1 /system/bin/sdcard -u 1023 -g 1023 -d /mnt/media_rw/sdcard1 /storage/sdcard1
+ class late_start
+ disabled
-service fuse_usbdisk /system/bin/sdcard -u 1023 -g 1023 -d /mnt/media_rw/usbdisk /storage/usbdisk
- class late_start
- disabled
+# virtual sdcard daemon running as media_rw (1023)
+service sdcard /system/bin/sdcard -u 1023 -g 1023 -l /data/media /mnt/shell/emulated
+ class late_start
on property:init.svc.bootanim=stopped
start qcom-post-boot
diff --git a/rootdir/etc/init.pyramid.sh b/rootdir/etc/init.pyramid.sh
new file mode 100755
index 00000000..4429f84b
--- /dev/null
+++ b/rootdir/etc/init.pyramid.sh
@@ -0,0 +1,28 @@
+#!/system/bin/sh
+
+export PATH=${PATH}:/system/bin/:/system/xbin/
+
+# Log related mounts and mount points before
+log -p i -t userinit "[${0}] Before"
+echo "[${0}] Before" >> /cache/${0}.log
+mount >> /cache/${0}.log
+ls -la /data/ >> /cache/${0}.log
+ls -la /data1/ >> /cache/${0}.log
+
+# Attempt to link data content to secondary data (optional)
+# If we fail those locations will be used as usual
+# Ensure permissions are set correctly
+test -d /data1/app && chmod 0771 /data1/app && chown system:system /data1/app && rm -Rf /data/app && ln -s /data1/app /data/app && log -p i -t userinit "[${0}] Linked /data1/app" && echo "[${0}] Linked /data1/app" >> /cache/${0}.log
+#test -d /data1/app-asec && chmod 0700 /data1/app-asec && chown root:root /data1/app-asec && rm -Rf /data/app-asec && ln -s /data1/app-asec /data/app-asec && log -p i -t userinit "[${0}] Linked /data1/app-asec" && echo "[${0}] Linked /data1/app-asec" >> /cache/${0}.log
+#test -d /data1/app-lib && chmod 0771 /data1/app-lib && chown system:system /data1/app-lib && rm -Rf /data/app-lib && ln -s /data1/app-lib /data/app-lib && log -p i -t userinit "[${0}] Linked /data1/app-lib" && echo "[${0}] Linked /data1/app-lib" >> /cache/${0}.log
+#test -d /data1/app-private && chmod 0771 /data1/app-private && chown system:system /data1/app-private && rm -Rf /data/app-private && ln -s /data1/app-private /data/app-private && log -p i -t userinit "[${0}] Linked /data1/app-private" && echo "[${0}] Linked /data1/app-private" >> /cache/${0}.log
+test -d /data1/dalvik-cache && chmod 0771 /data1/dalvik-cache && chown root:root /data1/dalvik-cache && rm -Rf /data/dalvik-cache && ln -s /data1/dalvik-cache /data/dalvik-cache && log -p i -t userinit "[${0}] Linked /data1/dalvik-cache" && echo "[${0}] Linked /data1/dalvik-cache" >> /cache/${0}.log
+test -d /data1/data && chmod 0771 /data1/data && chown system:system /data1/data && rm -Rf /data/data && ln -s /data1/data /data/data && log -p i -t userinit "[${0}] Linked /data1/data" && echo "[${0}] Linked /data1/data" >> /cache/${0}.log
+test -d /data1/media && chmod 0770 /data1/media && chown media_rw:media_rw /data1/media && rm -Rf /data/media && ln -s /data1/media /data/media && log -p i -t userinit "[${0}] Linked /data1/media" && echo "[${0}] Linked /data1/media" >> /cache/${0}.log
+
+# Log related mounts and mount points after
+log -p i -t userinit "[${0}] After"
+echo "[${0}] After" >> /cache/${0}.log
+mount >> /cache/${0}.log
+ls -la /data/ >> /cache/${0}.log
+ls -la /data1/ >> /cache/${0}.log
diff --git a/rootdir/etc/remount.pyramid b/rootdir/etc/remount.pyramid
old mode 100755
new mode 100644
index 6dfc0ed8..b65a7edd
--- a/rootdir/etc/remount.pyramid
+++ b/rootdir/etc/remount.pyramid
@@ -1,3 +1,3 @@
# Android fstab file.
-#
-/dev/block/mmcblk0p22 /system ext4 remount,ro,noatime,barrier=0 wait
+#
+/dev/block/mmcblk0p22 /system ext4 remount,ro,noatime,barrier=0 wait