写在前面

平板项目,需要音量减+关机键进入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. HashMap和HashTable区别
  2. Why to do,What to do,Where to do 与 Lambda表达式!
  3. layer 弹出框的使用
  4. Symfony常用指令(收藏版)
  5. ajax获取网页新闻,基于Ajax的新闻网页动态数据的抓取方法及系统
  6. Castle 开发系统文章
  7. 好用的文件对比工具Beyond Compare 4 for Mac 4.4.2
  8. BIO、NIO、AIO差别
  9. 多精度数带余除法_算法笔记 (一) 高精度
  10. 计算机四则运算的原理,计算机组成原理第九讲(除法-补码运算规则及浮点四则运算)(科大罗克露)...
  11. CNNIC:第35次中国互联网络发展状况统计报告
  12. Python 保留字和关键字的用法
  13. 计算机网络安全 的论文,网络安全论文3000字范文参考(3)
  14. (已解决)网页不显示数学公式||只显示源码
  15. 聊聊职场 - 个人发展
  16. 回顾知识点:计算机网络篇
  17. Libuv Timer定时器
  18. react脚手架创建项目报错,ReactDOM.render is no longer supported in React 18.
  19. (开拓者)团队任务2:冲刺前的准备
  20. 磊科nw336 linux驱动程序,磊科NW336 V2驱动

热门文章

  1. 生物特征识别中手静脉模式的主体内相似性研究
  2. 物化旁流综合水处理器
  3. python字典操作的方法_python 字典操作方法详解
  4. XCC CEO张艺凡:借助区块链解决医疗健康领域数据痛点
  5. SEO的301和302重定向:应该使用哪个?
  6. arcgis浮雕效果
  7. 高级php面试题及答案,高级php面试题及部分答案
  8. Redis[1]-RedisDesktopManager连接不上redis的解决方法
  9. emmc存储安装linux,eMMC 分区管理
  10. HTML 基础-11-表单-单选功能和默认选中