Recovery添加从U盘升级功能

来源:互联网 发布:linux classpath 编辑:程序博客网 时间:2024/05/18 06:41

Platform: imx6

OS: Android 4.4


device/fsl 目录:

diff --git a/common/recovery/Android.mk b/common/recovery/Android.mkindex f98468b..c7a7886 100644--- a/common/recovery/Android.mk+++ b/common/recovery/Android.mk@@ -1,6 +1,10 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) +#Kris,20151214, update by udisk.+LOCAL_CFLAGS += -DUDISK_UPDATE++ LOCAL_MODULE_TAGS := eng LOCAL_C_INCLUDES += bootable/recovery LOCAL_SRC_FILES := recovery_ui.cppdiff --git a/common/recovery/recovery_ui.cpp b/common/recovery/recovery_ui.cppindex 8d128e4..5b083c7 100644--- a/common/recovery/recovery_ui.cpp+++ b/common/recovery/recovery_ui.cpp@@ -35,6 +35,12 @@ const char* ITEMS[] = { "reboot system now",                         "wipe cache partition",                         /*Kris, Support upgrading from external sd.*/                         "apply update from external sd",+/*Kris, 20151214, update by udisk. {*/+ #ifdef UDISK_UPDATE+                        "apply update from udisk",+#endif+/*Kris, 20151214, update by udisk. }*/+                         NULL };  class ImxUI : public ScreenRecoveryUI {@@ -83,6 +89,11 @@ class ImxDevice : public Device {           case 3: return WIPE_CACHE;           /*Kris, Support upgrading from external sd.*/           case 4: return APPLY_EXT;+ /*Kris, 20151214, update by udisk. {*/+#ifdef UDISK_UPDATE+          case 5: return APPLY_FROM_UDISK;+#endif+ /*Kris, 20151214, update by udisk. }*/           default: return NO_ACTION;         }     }diff --git a/tek_mx6/fstab_recovery.freescale b/tek_mx6/fstab_recovery.freescaleindex 65cd716..ec62247 100644--- a/tek_mx6/fstab_recovery.freescale+++ b/tek_mx6/fstab_recovery.freescale@@ -5,6 +5,7 @@  #Kris, mount external sd to /sdcard. /dev/block/mmcblk1p1    /sdcard      vfat    nosuid,nodev,barrier=1,data=ordered,nodelalloc                                   wait+/dev/block/sda1         /udisk       vfat    nosuid,nodev,barrier=1,data=ordered,nodelalloc                                   wait /dev/block/mmcblk0p5    /system      ext4    ro                                                                               wait /dev/block/mmcblk0p4    /data        ext4    nosuid,nodev,nodiratime,noatime,nomblk_io_submit,noauto_da_alloc,errors=panic    wait,encryptable=footer /dev/block/mmcblk0p6    /cache       ext4    nosuid,nodev,nomblk_io_submit                                                    wait

bootable/recovery目录改动:

diff --git a/Android.mk b/Android.mkindex 2578c11..37ec3a4 100644--- a/Android.mk+++ b/Android.mk@@ -54,6 +54,10 @@ LOCAL_STATIC_LIBRARIES := \     libm \     libc +#Kris,20151214, update by udisk.+LOCAL_CFLAGS += -DUDISK_UPDATE++ LOCAL_CFLAGS += -DUSE_EXT4 LOCAL_C_INCLUDES += system/extras/ext4_utils LOCAL_STATIC_LIBRARIES += libext4_utils_static libzdiff --git a/device.h b/device.hindex 583de75..b469d48 100644--- a/device.h+++ b/device.h@@ -65,8 +65,15 @@ class Device {     //   - invoke a specific action (a menu position: any non-negative number)     virtual int HandleMenuKey(int key, int visible) = 0; +/*Kris, 20151214, update by udisk. {*/+ #ifdef UDISK_UPDATE     enum BuiltinAction { NO_ACTION, REBOOT, APPLY_EXT, APPLY_CACHE,+                         APPLY_ADB_SIDELOAD, APPLY_FROM_UDISK,WIPE_DATA, WIPE_CACHE };+ #else+     enum BuiltinAction { NO_ACTION, REBOOT, APPLY_EXT, APPLY_CACHE,                          APPLY_ADB_SIDELOAD, WIPE_DATA, WIPE_CACHE };+#endif+ /*Kris, 20151214, update by udisk. }*/      // Perform a recovery action selected from the menu.     // 'menu_position' will be the item number of the selected menudiff --git a/etc/init.rc b/etc/init.rcindex c634330..0b65db9 100644--- a/etc/init.rc+++ b/etc/init.rc@@ -15,6 +15,9 @@ on init      symlink /system/etc /etc +#Kris,20151214, update by udisk.+    mkdir /udisk+     mkdir /sdcard     mkdir /system     mkdir /datadiff --git a/recovery.cpp b/recovery.cppindex 5ddd730..876f036 100644--- a/recovery.cpp+++ b/recovery.cpp@@ -81,6 +81,12 @@ static const char *TEMPORARY_LOG_FILE = "/tmp/recovery.log"; static const char *TEMPORARY_INSTALL_FILE = "/tmp/last_install"; static const char *SIDELOAD_TEMP_DIR = "/tmp/sideload"; +/*Kris, 20151214, update by udisk. {*/+ #ifdef UDISK_UPDATE+ static const char *UDISK_ROOT = "/udisk";+ #endif+ /*Kris, 20151214, update by udisk. }*/+ RecoveryUI* ui = NULL; char* locale = NULL; char recovery_version[PROPERTY_VALUE_MAX+1];@@ -910,6 +916,32 @@ prompt_and_wait(Device* device, int status) {                     }                 }                 break;+/*Kris, 20151214, update by udisk. {*/+ #ifdef UDISK_UPDATE+              case Device::APPLY_FROM_UDISK:+  status = update_directory(UDISK_ROOT, UDISK_ROOT, &wipe_cache, device);+  if (status == INSTALL_SUCCESS && wipe_cache) {+  ui->Print("\n-- Wiping cache (at package request)...\n");+  if (erase_volume("/cache")) {+  ui->Print("Cache wipe failed.\n");+  } else {+  ui->Print("Cache wipe complete.\n");+  }+  }+  if (status >= 0) {+  if (status != INSTALL_SUCCESS) {+  ui->SetBackground(RecoveryUI::ERROR);+  ui->Print("Installation aborted.\n");+  } else if (!ui->IsTextVisible()) {+  return;  // reboot if logs aren't visible+  } else {+  ui->Print("\nInstall from udisk complete.\n");+  }+  }+  break;++ #endif+ /*Kris, 20151214, update by udisk. }*/         }     } }


1 0
原创粉丝点击