MTK81系列 OTA更新升级路径转换

简介: 众所周知,OTA更新有两种方式,一种是网上直接download的线上模式,一种是SD卡升级模式,在MTK中,升级ota的时候传进来的路径需要通过转换成外部SD卡或者内部EMMC的路径,然后recovery会去通过判断command里的参数来执行对应的OTA升级包:对应的,在bootable/recovery/mt_recovery.cpp中找到:这个函数,这个函数的作用就是做路径转换。

众所周知,OTA更新有两种方式,一种是网上直接download的线上模式,一种是SD卡升级模式,在MTK中,升级ota的时候传进来的路径需要通过转换成外部SD卡或者内部EMMC的路径,然后recovery会去通过判断command里的参数来执行对应的OTA升级包:

对应的,在bootable/recovery/mt_recovery.cpp中找到:

这个函数,这个函数的作用就是做路径转换。

const char * mt_main_init_sys_fw_upgrade(const char *update_package)

比如我要转换成内部EMMC的路径(一般线上升级的升级包就下载到相应的目录下,这个自己去定制)

printf("yyx  modify mkdir :%s : %s\n",__DATE__,__TIME__);
if (strncmp(update_package, "/storage/emulated/0/", 20) == 0) {
              int len = strlen(update_package) + 15;
              char* modified_path = (char*)malloc(len);
              strlcpy(modified_path, "/data/media/0/", len);
              strlcat(modified_path, update_package+20, len);
              printf("==>(replacing path \"%s\" with \"%s\")\n",
                     update_package, modified_path);
              update_package = modified_path;
}

最终这个update_package字符串指针就是我们要更新OTA包的路径。

如果是外部SD卡,我可以自己定义一个路径:

if ( strncmp(update_package, "/mnt/external_sd/", 17) == 0) {
        int len = strlen(update_package) + 17;
        char* modified_path = (char*)malloc(len);
        strlcpy(modified_path, "/sdcard/", len);
        strlcat(modified_path, update_package+17, len);
        printf("==>(replacing path \"%s\" with \"%s\")\n",
                     update_package, modified_path);
        update_package = modified_path;
}


当然,我也可以对OTA包加密后,再传进来,然后在对应的程序段进行解密后再升级,这些需要自己定制recovery的源代码。



目录
相关文章
|
JSON 编译器 开发工具
VS Code阅读Android源码
VS Code阅读Android源码
1459 1
|
12月前
|
JavaScript 前端开发 Java
npm学习一:npm 包管理工具 学习、使用。
这篇文章介绍了npm的基础知识和常用命令,包括安装包、查看包信息、管理依赖等操作,并提供了如何删除npm安装的镜像以及如何彻底删除node_modules文件夹的具体步骤。
294 2
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
从词袋到Transformer:自然语言处理的演进与实战
自然语言处理(NLP)是人工智能的重要分支,从早期的规则系统发展到如今的深度学习模型,经历了词袋模型、词嵌入、RNN/LSTM/GRU,再到革命性的Transformer架构。本文通过代码和案例详细介绍了这些技术的演进,并展示了如何从简单的词袋模型过渡到强大的Transformer,涵盖文本分类等实战应用,帮助读者深入理解NLP的核心技术和未来发展潜力。
|
12月前
|
SQL 关系型数据库 数据库
postgresql报:ERROR: column “i“ of relation “test“ does not exist LINE 1: UPDATE怎么解决?
解决“ERROR: column "i" of relation "test" does not exist”错误的关键在于核实列名的准确性,修正更新语句,确保列名的引用正确无误,并考虑到任何可能影响列名引用的表别名、大小写、特殊字符或动态SQL生成等因素。通过上述步骤,你应该能有效定位并解决问题,保证SQL语句的正确执行。
1029 0
|
数据库
C#Winform使用NPOI获取word中的数据
C#Winform使用NPOI获取word中的数据
331 2
|
存储 小程序 前端开发
小程序封装网络请求和拦截器
在开发小程序时,实际上我们通常需要封装网络请求和拦截器,以实现统一处理状态码和存储用户登录信息等功能。这样可以提高开发效率,减少代码重复,同时也可以提高代码的可维护性和可读性。
471 0
|
JSON 数据可视化 Linux
安利3款Python三方库!轻松实现PDF转图片,最快的只需一行代码!
安利3款Python三方库!轻松实现PDF转图片,最快的只需一行代码!
409 0
OTA升级常见错误码汇总-CSDN博客
OTA升级常见错误码汇总-CSDN博客
950 0
|
SQL 资源调度 分布式计算
Yarn【多队列实例、任务优先级设置】
Yarn【多队列实例、任务优先级设置】
|
开发框架 前端开发 开发者
Layui入门及案例演示1
Layui入门及案例演示1
259 0