高通平台 7.1 系统在 Recovery模式下 挂载内置存储并且增加内置存储升级的问题

 

最近在研究recovery模式下 挂载内置存储的问题,在安卓7.1 系统,高通平台 

修改点1 :

增加权限  system\sepolicy\recovery.te ,这样做的目的是让recovery模式下可以对data分区进行读取操作。

allow recovery media_rw_data_file:dir r_dir_perms; 
allow recovery media_rw_data_file:file r_file_perms; 

 

修改点3:

qcom/项目/fstab.qcom

@@ -7,7 +7,7 @@
 
 

@@ -7,7 +7,7 @@
 
 #<src>                                                <mnt_point>  <type>  <mnt_flags and options>                     <fs_mgr_flags>
 /dev/block/bootdevice/by-name/system         /system      ext4    ro,barrier=1,discard                                wait
-/dev/block/bootdevice/by-name/userdata       /data        ext4    nosuid,nodev,barrier=1,noauto_da_alloc,discard      wait,forceencrypt=footer
+/dev/block/bootdevice/by-name/userdata       /data        ext4    nosuid,nodev,barrier=1,noauto_da_alloc,discard      wait,encryptable=footer
 /devices/soc/7864900.sdhci/mmc_host*        /storage/sdcard1   vfat    nosuid,nodev         wait,voldmanaged=sdcard1:auto,noemulatedsd,encryptable=footer
 /dev/block/bootdevice/by-name/config         /frp  emmc    defaults                                            defaults
 /devices/soc/7000000.ssusb/7000000.dwc3/xhci-hcd.0.auto*       /storage/usbotg    vfat    nosuid,nodev         wait,voldmanaged=usbotg:auto

修改点4 :

目前升级失败了,继续解决。

问题解决了,重新制作了整包,加上了 -n 这个忽略时间戳的参数

最终升级成功了。从 data/media/0这目录进去

 

修改点2:

bootable/recovery 下面的修改内容如下

Index: device.cpp
===================================================================
--- device.cpp	(revision 131)
+++ device.cpp	(working copy)
@@ -20,6 +20,7 @@
     "Reboot system now",
     "Reboot to bootloader",
     "Apply update from ADB",
+    "Apply update from internal storage",
     "Apply update from SD card",
     "Wipe data/factory reset",
 #ifndef AB_OTA_UPDATER
@@ -36,6 +37,7 @@
     Device::REBOOT,
     Device::REBOOT_BOOTLOADER,
     Device::APPLY_ADB_SIDELOAD,
+    Device::APPLY_INTERNAL_STORAGE,
     Device::APPLY_SDCARD,
     Device::WIPE_DATA,
 #ifndef AB_OTA_UPDATER
Index: device.h
===================================================================
--- device.h	(revision 131)
+++ device.h	(working copy)
@@ -61,6 +61,7 @@
         REBOOT = 1,
         APPLY_SDCARD = 2,
         // APPLY_CACHE was 3.
+        APPLY_INTERNAL_STORAGE = 3,
         APPLY_ADB_SIDELOAD = 4,
         WIPE_DATA = 5,
         WIPE_CACHE = 6,
Index: recovery.cpp
===================================================================
--- recovery.cpp	(revision 131)
+++ recovery.cpp	(working copy)
@@ -110,6 +110,7 @@
 static const char *CACHE_ROOT = "/cache";
 static const char *DATA_ROOT = "/data";
 static const char *SDCARD_ROOT = "/sdcard";
+static const char *INNER_ROOT = "/data/media/0";
 static const char *TEMPORARY_LOG_FILE = "/tmp/recovery.log";
 static const char *TEMPORARY_INSTALL_FILE = "/tmp/last_install";
 static const char *LAST_KMSG_FILE = "/cache/recovery/last_kmsg";
@@ -1333,6 +1334,35 @@
     return result;
 }
 
+
+
+static int apply_from_internal(Device* device, bool* wipe_cache) {
+    modified_flash = true;   
+    if (ensure_path_mounted(INNER_ROOT) != 0) {
+        ui->Print("\n-- Couldn't  mount %s.\n", INNER_ROOT);
+        return INSTALL_ERROR;
+    }
+    char* path = browse_directory(INNER_ROOT, device);
+    if (path == NULL) {
+        ui->Print("\n-- No package file selected.\n");
+        return INSTALL_ERROR;
+    }
+
+    ui->Print("\n-- Install %s ...\n", path);
+    set_sdcard_update_bootloader_message();
+   // void* token = start_sdcard_fuse(path);
+
+    int status = install_package(path, wipe_cache,
+                                 TEMPORARY_INSTALL_FILE, false, 0/*retry_count*/);
+
+   // finish_sdcard_fuse(token);
+    ensure_path_unmounted(INNER_ROOT);
+    return status;
+}
 // Return REBOOT, SHUTDOWN, or REBOOT_BOOTLOADER.  Returning NO_ACTION
 // means to take the default, which is to reboot or shutdown depending
 // on if the --shutdown_after flag was passed to recovery.
@@ -1380,7 +1410,35 @@
                 if (!ui->IsTextVisible()) return Device::NO_ACTION;
                 break;
 
-            case Device::APPLY_ADB_SIDELOAD:
+
+			case Device::APPLY_INTERNAL_STORAGE:
+                 modified_flash = true;
+              //  if (mt_prompt_and_wait_install(device, status, CACH
+				
+					status = apply_from_internal(device, &should_wipe_cache);
+                   
+
+                    if (status == INSTALL_SUCCESS) {
+                        ota_completed = true;
+                    }
+                    if (status == INSTALL_SUCCESS && should_wipe_cache) {
+                        if (!wipe_cache(false, device)) {
+                            status = INSTALL_ERROR;
+                        }
+                    }
+
+                    if (status != INSTALL_SUCCESS) {
+                        ui->SetBackground(RecoveryUI::ERROR);
+                        ui->Print("Installation aborted.\n");
+                        copy_logs();
+                    } else if (!ui->IsTextVisible()) {
+                        return Device::NO_ACTION;  // reboot if logs aren't visible
+                    } else {
+                        ui->Print("\nInstall from %s complete.\n SD card");
+                    };
+                break;
+			
+			case Device::APPLY_ADB_SIDELOAD:
             case Device::APPLY_SDCARD:
                 {
                     bool adb = (chosen_action == Device::APPLY_ADB_SIDELOAD);
@@ -1812,7 +1870,7 @@
 				printf("(replacing path \"%s\" with \"%s\")\n",
                        update_package, modified_path);
                 update_package = modified_path;
			}
         }
         if (!strncmp("/sdcard", update_package, 7)) {
             //If this is a UFS device lets mount the sdcard ourselves.Depending

 

在android6.0系统上设置 --安全界面中有一个选项是【手机加密】

 

 

在android原生系统中该选项显示是:已加密,但在小米,华为等手机上该选项并是一定是显示:已加密,因为google把该选项的权限放给了各手机厂家,各手机厂家可以根据自己的要求是否要默认加密手机,如果手机加密了(即显示手机已加密)用户是不办法取消的,

一客户要求手机出厂后手机默认不加密,因为之前没有处理这问题,在网上找了很久也看了不少博客,但都没有解决方案,最后还是一同事知道我手上这样一个问题,他告诉我们需修改哪里,同事之中还是有不少高手的,

现记录一下方便自己以后修改,遇到同样问题的朋友也可参考一下,

device/qcom/xxxx(项目名)/fstab.qcom

上图红框部分内容如果是显示:forceencrypt则将其换成encryptable,如上图,然后再重新编译项目boot.img文件,fastboot flash boot入手机中再恢复出厂设置,设置-安全界面中【手机加密】默认已不是加密,

 

 

参考1  关闭高通平台加密   https://blog.csdn.net/nei504293736/article/details/51913749

参考2 ,5.0系统增加内置存储升级的方法 https://blog.csdn.net/m0_37321987/article/details/80347268

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值