目录

修改的文件:

文件修改说明:

1. recovery.cpp

2. mt_boot.c

3. platform.c

4. codegen.dws


这个修改主要是在多个文件中增加了一个选项,当设备在恢复模式下并且特定的GPIO引脚被设置时,设备将进行强制的工厂重置。

修改的文件:

  1. bootable/recovery/recovery.cpp
  2. vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
  3. vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6735/platform.c
  4. vendor/mediatek/proprietary/bootable/bootloader/lk/target/XX8735/dct/dct/codegen.dws
  5. vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/XX8735/dct/dct/codegen.dws

文件修改说明:

1. recovery.cpp

在这个文件中,增加了一个函数is_need_force_factory_reset(),该函数会检查/proc/cmdline中是否存在force_reset参数。如果存在,那么在恢复模式下,设备将进行强制的工厂重置。

2. mt_boot.c

在这个文件中,在恢复模式下检查了GPIO71的状态。如果GPIO71的状态为0,那么将在命令行参数中增加force_reset

3. platform.c

在这个文件中,也检查了GPIO71的状态。如果GPIO71的状态为0,那么将设备的启动模式设置为恢复模式。

4. codegen.dws

这两个二进制文件被修改,但由于它们是二进制文件,无法提供具体的修改内容(实际上是笔记忘记截图了) 就是用dct mtk专用的gpio 修改工具把gpio 改吧改吧就欧克了。

---bootable/recovery/recovery.cpp                |  28 +++++++++++++++++-.../bootloader/lk/app/mt_boot/mt_boot.c       |   8 ++++-.../bootloader/lk/platform/mt6735/platform.c  |   4 +++.../lk/target/XX8735/dct/dct/codegen.dws      | Bin 29887 -> 29887 bytes.../custom/XX8735/dct/dct/codegen.dws         | Bin 29938 -> 29887 bytes5 files changed, 38 insertions(+), 2 deletions(-)diff --git a/bootable/recovery/recovery.cpp b/bootable/recovery/recovery.cpp
index 736423e3644..823635b1872 100755
--- a/bootable/recovery/recovery.cpp
+++ b/bootable/recovery/recovery.cpp
@@ -116,6 +116,8 @@ 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";static const char *LAST_LOG_FILE = "/cache/recovery/last_log";
+
+static const char *COMMAND_LINE="/proc/cmdline";// We will try to apply the update package 5 times at most in case of an I/O error or// bspatch | imgpatch error.static const int RETRY_LIMIT = 4;
@@ -137,7 +139,7 @@ static bool has_cache = false;static bool has_nvdata = false;RecoveryUI* ui = nullptr;
-bool modified_flash = false;
+bool modified_flash = true;std::string stage;const char* reason = nullptr;struct selabel_handle* sehandle;
@@ -1359,6 +1361,23 @@ static void log_failure_code(ErrorCode code, const char *update_package) {LOG(INFO) << log_content;}+int is_need_force_factory_reset()
+{
+    char param[1024];
+    int fd, ret;
+    char *s=NULL;
+
+    memset(param,0,1024);
+    fd= open("/proc/cmdline", O_RDONLY);
+    ret = read(fd, (char*)param, 1024);
+    printf("cmdline=%s\n",param);
+    s = strstr(param,"force_reset");
+    if(s!= NULL)
+        return 1;
+    else
+        return 0;
+}
+int main(int argc, char **argv) {// We don't have logcat yet under recovery; so we'll print error on screen and// log to stdout (which is redirected to recovery.log) as we used to do.
@@ -1422,6 +1441,11 @@ int main(int argc, char **argv) {int retry_count = 0;bool security_update = false;+    if(args.size() == 1 && is_need_force_factory_reset() == 1){
+        should_wipe_data = true;
+        should_wipe_cache=true;
+        printf("exec wipe_data \n");
+    }int arg;int option_index;while ((arg = getopt_long(args_to_parse.size(), args_to_parse.data(), "", OPTIONS,
@@ -1466,6 +1490,8 @@ int main(int argc, char **argv) {}}+    //check_usbboot();
+printf("locale is [%s]\n", locale.c_str());printf("stage is [%s]\n", stage.c_str());printf("reason is [%s]\n", reason);
diff --git a/vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c b/vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
index 55e5b07f6f2..ca1272c99cc 100755
--- a/vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
+++ b/vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
@@ -70,7 +70,7 @@#include <iothread.h>#include <RoT.h>#include <odm_mdtbo.h>          // for load_overlay_dtbo()
-
+#include <platform/mt_gpio.h>#include <profiling.h>#include <rnd.h>@@ -2322,6 +2322,12 @@ int boot_linux_from_storage(void)}}+    if (g_boot_mode == RECOVERY_BOOT) {
+      if(mt_get_gpio_in(GPIO71) == 0){
+          cmdline_append("force_reset");
+      }
+  }
+/* pass the meta_log_disable to user space logger, default is enable */if (is_meta_log_disable && (is_meta_log_disable() == 1)) {cmdline_append("androidboot.meta_log_disable=1");
diff --git a/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6735/platform.c b/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6735/platform.c
index 86b91982c49..8558d001389 100755
--- a/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6735/platform.c
+++ b/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6735/platform.c
@@ -652,6 +652,10 @@ static void lk_boot_mode_select(void)boot_mode_select();+    if(mt_get_gpio_in(GPIO71) == 0){
+      g_boot_mode = RECOVERY_BOOT;
+  }
+#ifdef CFG_DTB_EARLY_LOADER_SUPPORT/* reload dtb when boot mode = recovery */if ((g_boot_mode == RECOVERY_BOOT) && (bldr_load_dtb("recovery") < 0))
diff --git a/vendor/mediatek/proprietary/bootable/bootloader/lk/target/XX8735/dct/dct/codegen.dws b/vendor/mediatek/proprietary/bootable/bootloader/lk/target/XX8735/dct/dct/codegen.dws
index c9abb1bee0fb5c20e775dea9edabe6a4357b2ef8..b6c155e31d9c2720249aee4a1c8a55df1e1a2866 100755
GIT binary patch
delta 34
scmV+-0Nww;=>fm#0k8ralWzn-lS>d7ldlX!lh7dqlb}o-v%VVvS@XsX2LJ#7delta 49
zcmV-10M7rv=>fm#0k8ralfWMYlfD}ek{u9}AQ=dgARP#kuq-5#a3@5Q&>;kqpiCUI
Hz8e8q%^(qndiff --git a/vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/XX8735/dct/dct/codegen.dws b/vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/XX8735/dct/dct/codegen.dws
index 1d72e4a55831802a51a1be0da022bb3c563e0eb4..17f6b28bac9fa453429ea36d21625c1fdbe82ca7 100755
GIT binary patch
delta 78
zcmezLl5zh_#tr|ZCMQU;OwMO<nCvZ}GC9CTV6uQD&*Xjqj>&q`5|i!SRVFt$2u%JV
htpR2qkP(@DK!#<qf+WY}cXkq!KZx;fo+A?$0RVCv8|VN4delta 109
zcmdo0lJV0^#tr|ZCV!BznEXIclEW*+(LFxI*?TghkisNcp2-I89Fwc0H70)$<b=w(
lcp}T4bQPE!&nST`?+=lem?X<GSwWIxvVyGE<{X*e2mmY*B69!$--
2.29.0

Android Mediatek 增加Recovery模式下读cmdline的强制工厂重置选项相关推荐

  1. android返回后屏幕旋转了,Android recovery 模式下屏幕显示旋转

    Android recovery 模式下屏幕显示旋转 大家在网上搜索 Android屏幕旋转,成千上万的文章,但是没有几个是写recovery 模式的.难道你们只旋转正常模式下的屏幕方向,不管reco ...

  2. Android recovery 模式下屏幕显示旋转

    Android recovery 模式下屏幕显示旋转 大家在网上搜索 Android屏幕旋转,成千上万的文章,但是没有几个是写recovery 模式的.难道你们只旋转正常模式下的屏幕方向,不管reco ...

  3. android中的recovery模式

    这里使用基于freescale的imx_r9.2 patch的android源码分析. android中的recovery模式,作为android的开发者或者用户都应该清楚和了解.android利用r ...

  4. Android创建文件为unix格式,Recovery模式下/cache/recovery/目录下创建文件,开机后文件被删除...

    在一次需求的实现过程中需要在remcovery模式下,在/cache/recovery/目录下创建一个日志文件用于记录相关的日志信息,以便于在开机后读取这些日志信息,再根据日志信息做出相应的处理,但是 ...

  5. 在recovery模式下命令控制手机_安卓手机开机密码忘记,解锁教程

    第一种方法:用别人的手机打你的电话, 然后手机就会进入系统,再进设置里去掉自动锁屏.当提示输入gmail密码的时候填写:"null"(补充说明,适用部分机子,跟ROM关系也很大,成 ...

  6. Android 解决大字体模式下页面变形的问题

    有一些APP会有中老年人使用,他们视力不佳,习惯性的设置大字体模式.然而,在大字体模式下,有些页面会变形.我经过考虑之后,采用[设计]+[技术]的方式解决此问题. 技术方面 在android端,影响大 ...

  7. Android 9.0 飞行模式下WiFi状态变化

    关注我,更多程序猿的日常信息等你哦 在Android 9.0 中,AirPlaneMode与WiFi的原生设定是这样的: 1.开启飞行模式时,如果wifi打开,则关闭,如果是关闭状态则不处理. 2.开 ...

  8. recovery模式下支持ADB连接和串口操作

    前言 Android平台下我们有时候会进入recovery下做一些操作,不管是通过ADB连接还是通过串口操作,都需要你的平台支持,不支持的话可以按照我们这篇文章进行修改. 正文 ADB连接 进入rec ...

  9. android recovery 模式吗,安卓(Android)手机Recovery模式各项中英文对照详细说明

    Recovery是安卓系统的一个特殊工作模式.使用它可以在未开机的状态下实现系统更新.还原出厂设置.清除手机缓存等.通过一些第三方工具,还可以实现系统的备份.还原.安装主题等. Recovery的界面 ...

最新文章

  1. 用Leangoo泳道完美实现Scrum任务看板
  2. android关键应用程序,安卓开发:Android应用程序的四个关键点
  3. 第七季4:网络telnet调试、海思proc文件系统调试接口
  4. 关于静态编译出现的问题以及解决方法
  5. Zigbee 学习计划——第2天——熟悉CC2530的基本例程
  6. 怎样得到对方的电脑名_吸引力法则让他想念你,让对方主动找你
  7. 1.3 线性回归的sklearn实现
  8. 问题1:VS2017:找不到 Windows SDK 版本10.0.17134.0
  9. 论文常用出图软件(Matlab,XMind,Viso,ppt)以及格式选择(eps,svg,tif,png)
  10. itextsharp php,详解C#使用iTextSharp添加PDF水印的代码案例
  11. 修改文件 火车票买下铺_为什么坐火车时,尽量不要买下铺?过来人用亲身经历告诉你原因...
  12. java判断小数位数_java-使用BigDecimal确定小数位数
  13. 使用pytorch搭建AlexNet网络模型
  14. 圣诞礼物送什么 荣耀畅玩5为你排忧解难
  15. 新闻周刊文字内容_央视新闻周刊文字版官网-央视新闻周刊文字版2020下载-游戏大玩家...
  16. win7系统64位系统怎么计算机配置,教你Ghost win7系统64位虚拟内存怎么设置最好
  17. webgl第27课-三维空间-不同位置的三角形
  18. Android 多渠道打包配置,亲测,全集
  19. 对126邮箱进行自动化测试
  20. 类似今日热点插件如何禁止

热门文章

  1. vue移动端配置rem:
  2. 这里有10个优质Python开源项目,希望对你学习有帮助
  3. 备考PMP第九天 - 项目人力资源管理
  4. 51单片机PCB实物DCDC可调负电源负压+12V输入-2.5V~-9V输出500MA电流
  5. Eclipse中JDK与JRE区别
  6. 【MindStudio训练营第一期】大作业:cartoonGAN_picture卡通生成案例
  7. 数据库常见死锁原因及处理
  8. 公开密钥密码学是什么
  9. ASPICE:能力等级评定
  10. Web3j如何在ETH智能合约调用请求发出前获取到转账Hash