rk3568用otg口U盘升级
设备只有一个外露的usb(otg口)出来,平时可切换为host接U盘使用,或者otg可进行adb调试模式。这个口接U盘升级的时候,会升级失败,如果把
dr_mode改成host,就可以正常升级成功:
但如果dts写死成host模式,开机后就不能切换为otg模式了,不能调试,这样的灵活性不够。dr_mode默认为otg时候,现在基本可以定位到是进入recover模式的时候,不是host状态,识别不到U盘导致升级失败的:
解决该问题的思路是进入recovery模式时候,在挂载U盘和升级之前,要先切换为host模式。
recovery.cpp里面的start_recovery函数是入口,在该函数里面实现切换设置。
diff --git a/recovery.cpp b/recovery.cpp index eda573bc..a7ce5a92 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -75,6 +75,7 @@ static char updatepath[128] = "\0"; bool bAutoUpdateComplete = false; static constexpr const char* CACHE_ROOT = "/cache"; +static const char *OTG_FILE = "/sys/devices/platform/fe8a0000.usb2-phy/otg_mode"; static bool save_current_log = false; @@ -1078,6 +1079,13 @@ Device::BuiltinAction start_recovery(Device* device, const std::vector<std::stri int arg; int option_index; int exit_from_factory = 0; + + FILE *fp = fopen(OTG_FILE, "r+"); + if (fp == NULL) { + printf("Can't open %s\n", OTG_FILE); + } + fputs("host", fp); + fclose(fp); // Parse everything before the last element (which must be a nullptr). getopt_long(3) expects a // null-terminated char* array, but without counting null as an arg (i.e. argv[argc] should be // nullptr).
C语言文件操作可参考:https://blog.csdn.net/m0_61213696/article/details/123264172
分类:
RockChip-3568
, USB-OTG
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具