写在前面

平板项目,需要音量减+关机键进入recovery模式。中间遇到了一些问题,记录一下。

配置音量键

uboot启动以后会检测音量上下键是否被按,然后进入不同的分支
board/freescale/common/recovery.c

/* export to lib_arm/board.c */
void check_recovery_mode(void)
{if (check_key_pressing()) {puts("Fastboot: Recovery key pressing got!\n");setup_recovery_env();} else if (check_recovery_cmd_file()) {puts("Fastboot: Recovery command file found!\n");setup_recovery_env();} else {puts("Fastboot: Normal\n");}
}
#define GPIO_VOL_DN_KEY IMX_GPIO_NR(2, 1)
iomux_v3_cfg_t const recovery_key_pads[] = {(MX6_PAD_NANDF_D1__GPIO2_IO01 | MUX_PAD_CTRL(NO_PAD_CTRL)),
};int check_recovery_cmd_file(void)
{int button_pressed = 0;int recovery_mode = 0;recovery_mode = recovery_check_and_clean_flag();/* Check Recovery Combo Button press or not. */imx_iomux_v3_setup_multiple_pads(recovery_key_pads,ARRAY_SIZE(recovery_key_pads));gpio_direction_input(GPIO_VOL_DN_KEY);      //由此可见,uboot阶段,会读取一个gpio口,把这个gpio设置为自己主板对应的就能进入recovery了if (gpio_get_value(GPIO_VOL_DN_KEY) == 0) { /* VOL_DN key is low assert */button_pressed = 1;printf("Recovery key pressed\n");}return recovery_mode || button_pressed;
}

图形模式和show_text模式

上面已经做好了开机时按住音量减进入recovery模式,但是发现进入recovery后,什么显示都没有。
然后在代码中发现了,由show_text这个变量,如果像要有问题提示,就要把show_text变量设置为1,这个变量的修改是从/cache/recovery/command文件中解析出来的
然后我正常进入系统,执行下面的命令,成功进入带文字提示的recovery

echo "--show_text" > /cache/recovery/command
static const struct option OPTIONS[] = {{ "send_intent", required_argument, NULL, 's' },{ "update_package", required_argument, NULL, 'u' },{ "wipe_data", no_argument, NULL, 'w' },{ "wipe_cache", no_argument, NULL, 'c' },{ "show_text", no_argument, NULL, 't' },{ "just_exit", no_argument, NULL, 'x' },{ "locale", required_argument, NULL, 'l' },{ "stages", required_argument, NULL, 'g' },{ "shutdown_after", no_argument, NULL, 'p' },{ "reason", required_argument, NULL, 'r' },{ NULL, 0, NULL, 0 },
};
//bootable/recovery/recovery.cpp
main()
{......int wipe_data = 0, wipe_cache = 0, show_text = 0;......while ((arg = getopt_long(argc, argv, "", OPTIONS, NULL)) != -1) {switch (arg) {case 's': send_intent = optarg; break;case 'u': update_package = optarg; break;case 'w': wipe_data = wipe_cache = 1; break;case 'c': wipe_cache = 1; break;case 't': show_text = 1; break;case 'x': just_exit = true; break;case 'l': locale = optarg; break;case 'g': {if (stage == NULL || *stage == '\0') {char buffer[20] = "1/";strncat(buffer, optarg, sizeof(buffer)-3);stage = strdup(buffer);}break;}case 'p': shutdown_after = true; break;case 'r': reason = optarg; break;case '?':LOGE("Invalid command argument\n");continue;}}
}

根据项目需要,用户从过app升级/恢复出厂,要进入图形模式,手动按键进入recovery,要进入文字模式。
修改代码如下,解决问题

main()
{......int wipe_data = 0, wipe_cache = 0, show_text = 1;......while ((arg = getopt_long(argc, argv, "", OPTIONS, NULL)) != -1) {switch (arg) {case 's': {send_intent = optarg; break;}case 'u': {show_text = 0; update_package = optarg; break;}case 'w': {show_text = 0; wipe_data = wipe_cache = 1; break;}case 'c': {show_text = 0; wipe_cache = 1; break;}case 't': {show_text = 1; break;}case 'x': {show_text = 0; just_exit = true; break;}case 'l': {locale = optarg; break;}case 'g': {if (stage == NULL || *stage == '\0') {char buffer[20] = "1/";strncat(buffer, optarg, sizeof(buffer)-3);stage = strdup(buffer);}break;}case 'p': shutdown_after = true; break;case 'r': reason = optarg; break;case '?':LOGE("Invalid command argument\n");continue;}}
}

也就是,默认是显示文字,不显示图形的。 如果用户通过app进行恢复出厂/升级系统,那么设置show_text=0,进入图形模式。

imx6 手动进入recovery相关推荐

  1. imx6 android4.4 Recovery添加从U盘升级功能

    Platform: imx6 OS: Android 4.4 device/fsl 目录: [plain] view plaincopy diff --git a/common/recovery/An ...

  2. 各个品牌常见机型的手动进入Recovery的方法

    HTC 机型: 完全关机(某些机型还需要拔插电池确保完全关闭电源)后,同时按住[音量-]和[电源键]进入 Bootloader,然后使用音量键上下选择到[Recovery],最后按下电源键确认即可进入 ...

  3. mate7刷android 6.0,华为Mate7 6.0系统刷recovery_Mate7 6.0专用第三方recovery

    在这里说一下咱们的华为Mate7的6.0的系统专用的第三方recovery了,有没有需要的呢,之前看到有机友的手机系统升级到6.0的系统了,可是对于6.0的系统很多人比较无奈,因为不知道如何刷第三方r ...

  4. html恢复安卓版,recovery恢复模式 进入Recovery模式前

    重启到恢复模式recovery是什么意思? 安卓手机怎么进入recovery模式恢复 进入Recovery模式前 怎样进入LG G3的Recovery恢复模式 手机关机10秒以上,确认完全关机状态下同 ...

  5. 魅蓝2 刷 android,魅蓝2全系列-解锁BootLoader完整版+刷入第三方recovery+刷入第三方ROM教程...

    本教程适合于魅族魅蓝2手机,由于魅族解锁BL门槛较高,如果你真的是小白,不敢折腾 请不要往下看,如何你是敢于动手,那么就继续往下看,跟着教程走,百分百可以成功 文件下载: 也可以关注微信公众号:ROM ...

  6. 红米5双清_红米5刷recovery教程_红米5第三方中文recovery下载

    也来把咱们的这个红米5手机如何刷recovery的教程来分享一下了,为什么要说这个recovery呢,因为这个recovery是第三方的recovery了,这个第三方的recovery可以给手机进行相 ...

  7. linux如何给手机刷recovery,给安卓手机刷Recovery的方法

    给安卓手机刷Recovery的方法 给安卓手机刷Recovery(恢复模式)的方法有许多,一般采用的都是通过数据线连接电脑完成.这次带来的则是完全不用连接电脑的安卓手机卡刷Recovery教程. 卡刷 ...

  8. Shopify开店建站营销推广卖家平台后台中文指南 – Abandoned checkout recovery/挽救弃单

    什么是Abandoned checkout? 有时候,顾客可能会把商品加入购物车,以进行结账,但在付款的最后一步却放弃了支付, 不管出于什么样的原因,任何未成功支付的订单Shopify将视其并存储为弃 ...

  9. Android Recovery升级原理

    文章目录 Android Recovery升级原理 声明 摘要 1. Recovery相关概念 2. Android系统的启动模式 2.1 Android 各个分区介绍 2.2 Android的启动模 ...

最新文章

  1. elasticsearch-.yml(中文配置详解)
  2. 干货!用大白话告诉你什么是Mock测试
  3. vue 加载页面时触发时间_解析Vue项目的四个方面优化
  4. 修改sga后oracle打不开的解决方法
  5. 桌面计算机密码应由哪项组成,计算机应用能力考试模拟试题
  6. 景切换的时候加上遮罩
  7. ViewResolvers
  8. Python getattr
  9. numpy的sum函数、mean函数
  10. jsp中使用jsp:include /在切换tomcat版本时遇到的问题
  11. 呼叫转移流程分析(一)
  12. 发出警报声的c语言程序,1、编写一个函数能够发出警报声并打印HelloWorld!;
  13. css字间距 与 Photoshop里字间距关系
  14. Macintosh30周年回顾视频 ---转自36kr
  15. QT美化使用字体图标
  16. 淘宝新上架的产品如何在站内SEO优化
  17. 安全邮箱是什么,163邮箱安全中心,安全邮箱怎么注册?
  18. 传感器(7)加速传感器,重力传感器,邻近传感器,光线传感器 综合示例
  19. 与《代码大全》齐名的经典著作 1
  20. TCP Flood攻击实验

热门文章

  1. php 防止sql注入
  2. Typora书写.md文件时自动生成编号
  3. HttpsURLConnection报文头报文体使用详解
  4. LaTeX:导数相关符号
  5. [译]游戏编程入门(by David Astle)(转载)
  6. oracle创建DBLink
  7. JuiceSSH--ssh安卓手机客户端管理linux服务器
  8. python中元组怎么存放元素_关于python列表和元组的基本操作
  9. 无盘系统的服务器配置高不高,为什么网吧电脑配置不很高但是很快
  10. 群晖之frp内网穿透