Android OTA 脚本流程

android P OTA (MTK)初探 —— 3、基于块(Block)的OTA:升级包的制作流程 上文简单介绍了Target包,本文重点分析完整升级包。 一、OTA的流程图(转) 网上看到的一份不错的流程图。 二、升级包制作命令 制作升级包需要用到alps/build/tools/releasetools/ota_from_target_files.py这个脚本文件。可以配置很多参数。 一般需要的命令格式如下: ./build/tools/releasetools/ota_from_targ... 阅读详情

杂乱记录一下,以后再做整理
这里主要跟踪升级高通mbn文件的流程
主要根据生成的script脚本来逆向分析

解释会比较繁琐,因为本身对Python也不是特别懂,这里就当自学了:)

下面是WriteBlockIncrementalOTAPackage函数的主要流程
1.解析基础包和目标包中的boot,recovery和system 这三个image
2.检查device属性值是否满足要求
3.检查fingerprint属性值是否满足要求
4.对比bootimage的差异,将差异部分写入boot.img.p并放入patch目录下,在script脚本中写入检测boot的命令
5.在脚本中加入检查空间是否足够的命令
6.校验RADIO目录下的文件
7.写入脚本校验systemimage和vendorimage
8.向脚本中写入升级systemimage vendorimage bootimage的命令
9.升级RADIO目录下的文件

1.1
上面的1~5点
def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_zip):

  #1.下面这部分比较重要,应该是解析image的信息,以后再看
  source_boot = common.GetBootableImage(
      "/tmp/boot.img", "boot.img", OPTIONS.source_tmp, "BOOT",
      OPTIONS.source_info_dict)
  target_boot = common.GetBootableImage(
      "/tmp/boot.img", "boot.img", OPTIONS.target_tmp, "BOOT")
  updating_boot = (not OPTIONS.two_step and
                   (source_boot.data != target_boot.data))

  target_recovery = common.GetBootableImage(
      "/tmp/recovery.img", "recovery.img", OPTIONS.target_tmp, "RECOVERY")

  system_src = GetImage("system", OPTIONS.source_tmp)
  system_tgt = GetImage("system", OPTIONS.target_tmp)


  #2.检查device属性值是否满足要求
  #方法中会调用script.AssertDevice来检查ro.product.device属性值是否满足要求
  AppendAssertions(script, OPTIONS.target_info_dict, oem_dicts)
  #这里啥也没做
  device_specific.IncrementalOTA_Assertions()

  #打印出fingerprint的值
  script.Print("Source: %s" % (source_fp,))
  script.Print("Target: %s" % (target_fp,))
  #不知道调用到哪里去了,releasetools.py中没有这个方法
  device_specific.IncrementalOTA_VerifyBegin()

     #3.检查fingerprint属性值是否满足要求,具体实现在edify_generator.py中
     script.AssertSomeFingerprint

  #如果要升级bootimage,这里是肯定的
  if updating_boot:
    boot_type, boot_device = common.GetTypeAndDevice(
        "/boot", OPTIONS.source_info_dict)
    d = common.Difference(target_boot, source_boot)
    _, _, d = d.ComputePatch()
    if d is None:
      #没有差异,为什么要全分升级??
      include_full_boot = True
      common.ZipWriteStr(output_zip, "boot.img", target_boot.data)
    else:
      include_full_boot = False

      print("boot      target: %d  source: %d  diff: %d" % (
          target_boot.size, source_boot.size, len(d)))

      #4.将差异部分写入boot.img.p并放入patch目录下
      common.ZipWriteStr(output_zip, "patch/boot.img.p", d)
      #在script脚本中写入检测boot的命令
      script.PatchCheck("%s:%s:%d:%s:%d:%s" %
                        (boot_type, boot_device,
                         source_boot.size, source_boot.sha1,
                         target_boot.size, target_boot.sha1))
      size.append(target_boot.size)

  #5.size肯定不为空,在脚本中加入检查空间是否足够的命令
  if size:
    script.CacheFreeSpaceCheck(max(size))

  #6.这里就是校验mbn文件的地方,非常重要,common.py中调用到device/qcom/common/releasetools.py中的方法
  device_specific.IncrementalOTA_VerifyEnd()
  ......
1.2 详细看一下IncrementalOTA_VerifyEnd函数,第6点
def IncrementalOTA_VerifyEnd(info):
 #调用了OTA_VerifyEnd方法
 OTA_VerifyEnd(info, info.target_version, info.target_zip, info.source_zip)
 return



#来详细看看
def OTA_VerifyEnd(info, api_version, target_zip, source_zip=None):
  #明显,这里加载filesmap文件
  print "Loading radio filesmap..."
  #filesmap是字典格式,键值对中的键是唯一的,注意,这里读取的是目标版本中RADIO目录的文件
  filesmap = LoadFilesMap(target_zip)
  if filesmap == {}:
    print "warning radio-update: no or invalid filesmap file found"
    return False

  print "Loading radio target..."
  #加载目标包中RADIO
解决Android 7.1 OTA差分升级缺失install-recovery.sh问题指南 随着移动设备的普及,Android系统的更新变得越来越重要。OTA(Over-The-Air)升级是Android系统为设备提供无缝、无线更新的一种方式。本章节将介绍OTA升级机制的基础知识,为深入理解后续章节的差分升级、脚本作用等概念打下基础。txk.txt文件一般包含了一系列日志条目,记录了OTA升级过程中的所有活动。该文件在OTA升级过程中生成,用于详细记录升级过程中的每个阶段,包括初始检查、数据备份、系统更新、数据恢复等。 阅读详情

相关推荐

Latex | IEEE双栏排版中长公式的排版

IEEE双栏排版中,有时候公式过于长了,过宽,导致单栏排版不下。

qq_43466146的博客 1万+

Cadence Virtuoso实战:用gm/Id方法搞定折叠式共源共栅放大器设计(附完整仿真流程)

本文详细介绍了在Cadence Virtuoso设计环境中,运用gm/Id方法高效设计折叠式共源共栅放大器的完整实战流程。该方法通过工艺特征曲线,将设计指标映射到晶体管尺寸与偏置,有效克服深亚微米工艺下传统方法的不足。文章以TSMC 180nm工艺为例,从指标拆解、参数查找、电路搭建、仿真验证到问题调试,提供了清晰、可复现的操作指南,并探讨了自动化脚本与版图考量,助力工程师和学生提升模拟IC设计效率与成功率。

jwt8token的博客 647

死区补偿---学习笔记

最近调试中发现,死区补偿对电流谐波和电流带宽影响挺大,于是对死区补偿产生浓厚兴趣,找来几篇文章粗读并做一下笔记。 传统做法 无非就是根据电流方向补偿,假如svpwm计算出的A相理论导通实践为T1,死区时间是Td,则实际导通时间T = T1-Td(when ia >0 ),于是在svpwm计算出的导通时间T1的基础上加上Td。这样经过PWM模块后,实际的导通时间即为T1. 但存在两个难点(个人总结): 1,受电流检测精度影响,尤其是在过零点检测困难。 2,真实的二极管导通需要一定电压,并非..

圆桌骑士的博客 2万+

不到200块!手把手教你用ZYNQ7010和AD9363攒一台自己的开源SDR硬件(附BOM清单)

本文详细介绍了如何用不到200元的预算,基于ZYNQ7010 FPGA和AD9363射频芯片打造一台功能完备的开源SDR硬件平台。从核心组件选型、PCB设计到焊接调试,提供全流程实战指南,特别适合预算有限的硬件爱好者和创客群体探索无线通信世界。

weixin_26854829的博客 479

无监督低照度增强实战:用ZeroDCE和SCI拯救你的夜间照片(附PyTorch代码)

本文深入探讨了无监督低照度图像增强技术,重点解析了ZeroDCE和SCI两大代表性模型的核心原理与实战应用。通过对比分析两者的技术路径、网络结构及性能特点,并附上详细的PyTorch代码实现,旨在帮助读者掌握无需配对数据即可有效提升夜间照片画质的深度学习解决方案。

git9versioner的博客 490

多径衰落信道的 MATLAB 仿真

在无线通信系统中,信号在传输过程中会经历多径传播现象,导致信号在接收端出现时域和频域上的扩展。通过以上示例代码,我们可以进行多径衰落信道的 MATLAB 仿真。同时,我们还可以通过调整信道参数和信号特性,进一步研究多径衰落对系统性能的影响。常用的模型之一是瑞利衰落信道模型,它假设信号在传输过程中受到多个散射路径的影响。除了瑞利衰落信道模型,我们还可以使用其他类型的信道模型,如高斯衰落信道模型。在上述代码中,我们首先定义了信道的参数,包括最大多普勒频移、多径延迟和多径功率衰落。函数来模拟高斯衰落信道。

TechCraze的博客 665

使用Simulink进行基于IIR滤波器的设计与稳定性分析仿真

IIR滤波器的稳定性与其系统函数的极点位置密切相关。如果所有极点都位于Z平面的单位圆内,则该滤波器是稳定的;否则,滤波器将是不稳定的。在设计IIR滤波器时,确保其稳定性对于避免输出信号发散至关重要。明确你的系统需求,比如输入信号类型(如正弦波)、采样率、IIR滤波器的设计参数(如滤波器类型、阶数、截止频率等)。假设我们需要设计一个低通IIR滤波器,用来去除高于500Hz的所有频率成分,保留低于500Hz的信号成分。采样率为8kHz。

xiaoheshang_123的博客 150

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

下一篇: 通过Binder实现 Native Service
ShuttleCheng
博客等级 码龄9年 17粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值