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

这篇具有很好参考价值的文章主要介绍了Android Mediatek 增加Recovery模式下读cmdline的强制工厂重置选项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

修改的文件:

文件修改说明:

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 改吧改吧就欧克了。

 文章来源地址https://www.toymoban.com/news/detail-581785.html

---
 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 bytes
 5 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#7

delta 49
zcmV-10M7rv=>fm#0k8ralfWMYlfD}ek{u9}AQ=dgARP#kuq-5#a3@5Q&>;kqpiCUI
Hz8e8q%^(qn

diff --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|VN4

delta 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的强制工厂重置选项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 9.0 系统rom定制之user模式下解除系统进入recovery功能的限制

     在9.0的系统rom定制化开发中,系统中recovery模式功能也是很重要的一部分,而在原生系统中,对于debug模式的产品,可以通过电源键和音量+键进入recovery模式, 但是在user模式下的产品,对于通过这种方式,进入recovery模式就受限制了,防止用户无操作为了产品安全等,不让进

    2024年02月16日
    浏览(55)
  • Android 工厂模式增加Type-A功能测试

    Android 工厂模式增加Type-A功能测试 收到客户需求想要增加Type-A测试项来验证Type-A功能,具体功能实现参照如下: /vendor/freeme/packages/apps/FreemeFactoryTest/src/com/freeme/factory/usb/TypeAUSB.java       重新编译验证,修改生效,工厂模式Type-A功能验证通过

    2024年02月08日
    浏览(37)
  • Android Mediatek bootloader oem锁定和解锁流程

    目录 修改的文件: 文件修改说明: 这个修个是在mtk android11上的 , 就是个进入oem解锁流程  , 下面这部分代码就是开机检测按键 , 然后进入不同模式的。如果要修改其他的 也是大同小异。 主要对 Mediatek bootloader 的锁定和解锁流程进行了优化,改变了检测按键的方式。 vendor/med

    2024年02月11日
    浏览(50)
  • Android Mediatek 禁用拨号应用的部分UI显示

    目录 修改的文件: 文件修改说明: 1. InCallActivity.java 2. InCallPresenter.java 3. StatusBarNotifier.java 这个是早期客制化需求 , 当时我记得是需要拨号的同时需要禁止系统通话被拉起 , 意思就是  电话过来了, 不能显示UI的同时还在通话 , 然后我做个了自定义的APP去控制通话。 这个修改

    2024年02月17日
    浏览(47)
  • Android Mediatek 修改打印串口 (uart0) 为普通串口

    目录 修改的文件: 文件修改说明: 这个 主要修改了Mediatek 打印串口 (uart0) 为普通串口,这样可以避免在使用uart0 不必要的调试信息。 bootable/bootloader/lk/app/mt_boot/mt_boot.c system/core/rootdir/init.rc mt_boot.c : 修改了启动 Linux 的函数 boot_linux_fdt ,将 printk.disable_uart 的值从 0 改为 1,这样

    2024年02月15日
    浏览(35)
  • 【SA8295P 源码分析 (一)】52 - 答疑之 QNX 创建镜像、Android修改CMDLINE

    【源码分析】 因为一些原因,本文需要移除, 对于已经购买的兄弟,不用担心,不是跑路, 我会继续持续提供技术支持, 有什么模块想学习的,或者有什么问题有疑问的, 请私聊我,我们 +VX 沟通技术问题,一起学习,一起进步 接下来,我一一私聊已经购买的兄弟添加V

    2024年02月07日
    浏览(52)
  • Android MediaTek bootloader 的序列号长度 & 移除非字母和数字限制 SN-Writer工具支持写入

    目录 修改的文件: 文件修改说明: 这个是我在mtk芯片方案android 5.1的修改 , 据我所知12版本以内都是这么改 灰常简单 希望能帮助有需要的人。 主要对 MediaTek bootloader 的序列号长度和打印设置进行了优化,提高了序列号的长度,并改变了打印设置,使其在构建中也能打印调试

    2024年02月13日
    浏览(61)
  • Android data recovery特殊场景处理方式介绍

    本文讲述针对特殊场景,终端可以关闭AOSP data recovery功能,避免测试异常。 例如中国电信VPDN测试只能访问内网,而网络检测机制会导致Ping默认配置的URL失败,触发data recovery。 可以有以下处理方式。 关闭Google Internet prob 针对特殊场景的测试用例,终端可以关闭Google Internet

    2023年04月14日
    浏览(38)
  • Android 12.0修改recovery 菜单项字体大小

    在Android 12.0进入recovery模式后,界面会g_menu_actions 菜单选项和 提示文字,而这些文字的大小不像上层一样是通过设置属性来表示大小的 而它确是通过字体png图片的大小来计算文字的宽和高的,然后可以修改字体大小 首选来看build/make/core/Makefile 文件

    2024年02月06日
    浏览(44)
  • Android sdkmanager not found. Update to the latest Android SDK and ensure that the cmdline-tools are...

    由于Android Studio 的SDK位置更改导致 flutter失败 Android Studio控制台输入 flutter config --android-sdk \\\"D:User\\\" 由于cmdline-tools没下载  flutter项目Android - local.properties -sdk.dir 运行时更改也是这个原因

    2024年02月06日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包