OTA升级

OTA升级介绍

 
OTA(Over the Air Technology)空中下载技术。
目前OTA升级分为:
1、    MTK MOTA升级
2、    广升FOTA升级
3、    联想乐升级

一,    本地代码集成
1、Setting/res/xml/device_info_settings.xml,在此修改所启动的升级程序(乐升级)。
二、    包制作与上传
1.1 制作包
本地编译./mk new是不编译ota的,想要编译ota包,要在new之后再./mk otapackage,生成的增量包在out/target/common/obj/PACKAGING目录下,用于制作差分包。
1990: /out/target/product/huaqin82_tb_b2d_td/obj/PACKAGING/target_files_intermediates

1.2 上传包
采用MOTA升级和广升FOTA升级的需要配置客户服务器,并把包传给客户,他们负责上传。
我们需要提供一些参数,或者直接把编译好的文件build.prop提供给客户。
不同客户管理ota的方式略有不同,以联想为例:
每个项目要发邮件给相关人员申请model,升级包检测就是根据相同的mudel去搜索对应的ota版本号,是否有更新版本的差分包或者完整包。
 
服务器返回差分包或完整包的原则:
服务端总是返回最新版本的固件。(以管理员上传固件时选择的排序时间为准。)
如果最新版本的固件同时存在差分包和完整包。则在终端能够匹配的情况下优先返回差分包。(一般情况下,差分包总是小于完整包)
测试状态的包只有添加了测试设备IMEI号的才可以检测到更新。
终端运行乐升级会连接到服务器,检测到版本更新之后下载重启安装更新后自动开机,弹出升级成功与否的提示框。

1.3 升级注意点:
1、    签名变更、model变更都会导致升级失败;
2、    分区变化无法通过OTA升级;
3、    本地制作OTA差分包时确保分区和签名与制作的版本一致。


二、MTP方式不插T卡升级问题(android4.4系统才有此问题)
2.1 当MTK_2SDCARD_SWAP == yes
外置sd卡为主卡,插入外置sd卡ota包下载到外置卡上,拔掉sd卡下载到内置sd卡上。
MTP方式的内置T卡其实就是DATA区,所以在重启之后会提示检测不到SD card。
需要修改更新包路径,把/sdcard改为/data/media,recovery.cpp文件main函数
char *inPath = NULL;
if (update_package) {
inPath = (char*)malloc(strlen(update_package)+sizeof(char) * 5);
memset(inPath, 0, strlen(update_package)+sizeof(char) * 5);
if (strncmp(update_package, "/sdcard", 7) == 0) {
if (ensure_path_mounted(update_package) != 0) {
strcat(inPath, "/data/media");
strcat(inPath, update_package + sizeof(char) * 7);
if (ensure_path_mounted(inPath) == 0) {
update_package = inPath;
                }
LOGI("Change mount path to:%s\n", update_package);
            }
        }
}
2.2当MTK_2SDCARD_SWAP == no
内置sd卡为主卡,插不插外置sd卡ota包都下载到内置sd卡上。
内置sd卡的路径不再是/data/media,具体通过adb shell查看后确定,例如:/data/media/0。
strcat(inPath, "/data/media");改为——〉strcat(inPath, "/data/media/0");

三、OTA升级之后部分apk丢失
问题描述:
在当前版本恢复出厂设置,通过OTA升级到下一版本,开机查看有些应用桌面快捷方式无法打开,主菜单中找不到该应用。
在当前版本不做恢复出厂设置,通过OTA升级到下一版本,开机查看应用运行正常。
问题分析:
分析丢失的这些应用为两个版本之间更新的第三方apk,因为这些apk的名字变更了,名字中大都有版本号日期等信息,更新的方式是删除旧的apk,重新添加新的apk。问题出在当前版本是否恢复出厂设置,那么我们看看恢复出厂设置对这些apk有什么影响?

 
可见,恢复出厂设置之后data/app下的apk只是一个链接,指向system/appjar下面备份的apk,也就是说恢复出厂设置的时候擦data区之后并没有像我们预期的那样把system/apppjar下的apk拷贝到data/app下,而只是创建了一个链接。为了确定apk被删除可以查看一下恢复出厂设置前后data区的已用空间有什么变化,你会发现下载完版本直接恢复出厂设置data区已用空间少了几百兆。让我们把思路理一下,在当前版本恢复出厂设置,把data/app下apk删除,创建链接指向system,升级到新版本,system下面的apk更新,升级不会擦除data区,所以链接不变,因为它名字变了,那么显然找不到新的apk。至于恢复出厂设置为什么不拷贝apk,而创建链接,这是MTK的一个data区优化方案。如果平台上没有这个优化方案也就不存在这样的问题。
解决方案:
针对apk丢失的情况,我们如何解决?
1、    向MTK申请关闭data区优化方案;
2、    在恢复出厂设置只保存链接的情况下,集成apk的时候始终保持apk的名字不变。

四、包不完整导致升级失败
SD卡升级经常会遇到升级失败,log如下:
-- Install /sdcard ...
I:Finding update package...
I:Update location: /sdcard/huaqin82_tb_b2b_tdd-ota.zip
I:Opening update package...
I:read key e=3
I:1 key(s) loaded from /res/keys
I:Verifying update package...
I:comment is 1682 bytes; signature 1664 bytes from end
E:failed to verify whole-file signature
I:verify_file returned 1
E:signature verification failed
Installation aborted.
导致包不全的原因可能是拷贝之后没有安全退出,如果出现这种情况,首先把包删掉,重新拷贝完成之后稍等片刻安全退出,如果还是不行,那就要把sd卡格式化后再拷贝一般可以解决此问题。

五、制作差分包命令:
主要是寻找到代码中的一个脚本文件:ota_from_target_files和签名文件:releasekey,后面再接上用于制作差分包的两个增量包,如下面的形式:

./build/tools/releasetools/ota_from_target_files -k build/target/product/security/lenovo/releasekey -i old.zip new.zip old_to_new.zip

由于我们的签名文件在4.4到5.0之后的位置发生了改变,所以制作差分包的命令也发生了改变,下面分别是4.4系统和5.0系统的变异差分包的命令:

4.4系统:
./build/tools/releasetools/ota_from_target_files -k build/target/product/security/lenovo/releasekey -i old.zip new.zip old_to_new.zip


5.0系统:
./build/tools/releasetools/ota_from_target_files -k device/mediatek/common/security/hq8127_tb_b2e_l/releasekey -i old.zip new.zip old_to_new.zip

5.0系统中有些项目开启了secure boot功能,如1925,6025,编译差分包的命令也会有所改变:
./build/tools/releasetools/ota_from_target_files -v -p out/host/linux-x86 -k device/mediatek/common/security/hq8127_tb_b2e_l/releasekey –i old.zip new.zip old_to_new.zip


六、平常用到的一些小知识
编译UER版本  ./mk -o=TARGET_BUILD_VARIANT=user +正常编译命令

测试IMEI:666666666666667


DATA base文件:
/mt8732/mediatek/custom/common/modem/a6601_lwg_modem_1105_all_sim_hot

制作OTA包的时候加上这个命令可以在OTA升级的时候清空用户数据:
 -w  (--wipe_user_data)
      Generate an OTA package that will wipe the user data partition
      when installed.




制作差分包
1,    需要两个增量包
增量包的获取可以再服务器下载,也可以在本地生成,本地生成是 使用./mk hq8127_tb_b2b_l a1992[lenovo] otapackage 之后再/out/target/product/huaqin82_tb_b2d_td/obj/PACKAGING/target_files_intermediates生成了相应的.zip增量包(这时候有一个异常:
使用管理员权限修改/usr/lib/python2.7/zipfile.py
def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=True):
false改为true就编译成功了  
1.sudo gedit /usr/lib/python2.7/zipfile.py
)

2,
根据两个增量包制作差分包./build xxx  - k   xxx -i 老包  新包 差分包
./build/tools/releasetools/ota_from_target_files -k device/mediatek/common/security/hq8127_tb_b2b_l/releasekey -i full_hq8127_tb_b2b_l-target_files.zip _home_queen_full_hq8127_tb_b2b_l-target_files.zip full_hq8127_tb_b2b_l-target_files__home_queen_full_hq8127_tb_b2b_l-target_files.zip
2,    


Push到手机
ubuntu@ubuntu:~$ adb shell

shell@A7-30F:/ $ mount
shell@A7-30F:/ $ exit
移动到差分包的地址:
ubuntu@ubuntu:~$ cd share/

push到手机
ubuntu@ubuntu:~/share$ adb push full_hq8127_tb_b2b_l-target_files__home_queen_full_hq8127_tb_b2b_l-target_files.zip /storage/sdcard1

重启手机

ubuntu@ubuntu:~/share$ adb reboot recovery



  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值