R3300L按reset键无法进入USB Burning模式的问题分析
最开始并没有注意到这个问题, 因为从设备拿到手, 用USB Burning Tool刷入潜龙版的安卓4.4.2, 再到运行EmuELEC, Armbian, 再到给Kernel 5.3的Armbian编译RTL8189FTV的驱动, 都还算顺利. 因为Kernel 5.3也差不多搞定了, 开始打安卓的主意, 想看看能不能跑7.x版本的安卓. 固件包下了几个, 要开始刷的时候出了状况, 发现按着reset键再也无法进入USB Burning Mode了.
几经调查, 试了另外两台一样已经刷过的R3300L, 百度上查类似的案例, 发现其他人也存在这种情况. 而且网友们提供的处理方法(4R19接地)完全无效.
于是开始研究UBOOT
这个设备跑过的系统不外乎潜龙的安卓4.4.2, 以及各种版本的EmuELEC, 各种版本的Armbian, 通过查资料, 发现Linux下面的fw_printenv和fw_setenv命令可以查看及修改UBOOT下的配置. EmuELEC下可以直接运行, 但是在高版本的Armbian下, 仅有可执行文件, 缺/etc/fw_env.config, 于是又查资料找到了对应S905L的config.
通过分析UBOOT的配置, 可以确认EmuELEC和Armbian都会对UBOOT配置进行修改, 但是它们的修改只是在bootcmd里加东西, 加上从sdcard和usb启动的方法, 不应该会影响到组合键.
于是将其中一台焊上了TTL线座, 翻出来以前买的PL2303的USB串口线. 连的过程也是各种摸石头过河. 首先是TX和RX的连线, 尝试几次后确定是PL2303的TX和RX分别接盒子的RX, TX. 然后是VCC线, 每次一连接, 盒子就上电启动了, 根本没法主动观察启动过程, 于是把VCC和GND拔掉, 这下不会自己启动了, 但是启动后看到的全是方块状乱码, 最终是VCC不连, 只连GND, 才算又不自己启动, 又能显示正常.
观察UBOOT的启动日志发现, 按不按reset键, 连不连HDMI, 启动日志基本完全一样.
其中一行"Hit any key to stop autoboot: 0"给我造成了很大困惑, 因为不管怎么敲Enter键, 都不会进入UBOOT命令行, 我怀疑是因为这个0, 导致无法停下来. 查阅资料, 发现有个配置项bootdelay, 于是从0改成了5, 发现根本不起作用, UBOOT还是一路狂飙不停下来, 又查资料, 发现还有用Ctrl+C的, 再试依然无效. 再查资料, 发现还有用空格键的, 这个起作用了, 只要拍空格键, 就能进入UBOOT
继续查资料, 发现还有个配置项叫 upgrade_key , 这个值是 "if gpio input GPIOH_6; then echo detect upgrade key; sleep 3; run update;fi;" 在日志中有这么一行"gpio: pin GPIOH_6 (gpio 55) value is 1", 凭借着曾经做过一些电路的经验感觉这个不对. 如果reset键输入是GPIOH_6, 那么在按下的时候肯定处于接地状态, 不可能是高电平, 所以这行日志对应的就是upgrade_key当中 gpio input GPIOH_6 这行执行的结果, 并没有检测到reset键按下的状态, 所以可以说是GPIOH_6这个写错了.
要找正确的gpio pin该怎么办呢? 又查资料, 发现 gpio status -a 这个命令可以显示所有的gpio状态, 这就好办了, 在reset键未按下和按下两个状态下, 分别执行一下这个命令, 把输出的结果对比一下就出来了, 得到的正确pin是GPIOAO_2, 在按下前是GPIOAO_2: input: 1 [ ], 在按下之后变成了 GPIOAO_2: input: 0 [ ]
再通过fw_setenv将正确的值设上
fw_setenv upgrade_key "if gpio input GPIOAO_2; then echo detect upgrade key; sleep 3; run update;fi;"
.按住reset重启, 就可以观察到usb burn的状态了.
解决这个问题断断续续花了我大概三天时间, 从周五到周日, 可能对于对于专业选手很简单, 但对于我很多是新事物, 要慢慢摸索.
相关文章
- AWS 一周回顾 – 2022 年 9 月 5 日
- 通过 FluentBit 收集 Nitro Enclaves 日志
- 将日志压缩并归档到Amazon S3 Glacier 存储层中
- 三剑客 EKS + Kubeflow + Karpenter 助力构建弹性机器学习平台
- 基于Amazon Route 53多区域混合 DNS 部署最佳实践
- Gamelift 的游戏会话日志可视化方案
- AWS 和 VMware 宣布将 VMware Cloud on AWS 与 Amazon FSx for NetApp ONTAP 集成
- 现已开放 — 阿拉伯联合酋长国(UAE)的 AWS 区域
- 在AWS上构建基于SOAFEE的云原生软件定义汽车实践
- 使用 AWS 原生解决方案替换自我管理的数据库调度程序批处理作业
- java DelayQueue
- 宣布最新的 AWS 大侠
- 新增功能 – 在 Slack 中使用 AWS Support 应用程序管理支持工单
- 云运营现代化之:云运营能力模型
- 使用 Amazon Lambda 和 DynamoDB构建 Alexa WWA 智能家居设备的 SmartHome Skill
- AWS 一周回顾 – 2022 年 8 月 22 日
- python selenium 环境_配置Python Selenium环境
- AWS Trusted Advisor – 新的 Priority 功能
- 中国区通过CDK安装EKS Helm Chart 常见错误及解决方案
- Grillo 如何在 AWS 上构建低成本地震预警系统