博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在ota升级时将data分区也打入升级包一并升级data分区
阅读量:4103 次
发布时间:2019-05-25

本文共 2104 字,大约阅读时间需要 7 分钟。

make otapackage是从build/core/Makefile开始执行的:

$(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(DISTTOOLS)    @echo "Package OTA: $@"    $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH MKBOOTIMG=$(MKBOOTIMG) \       ./build/tools/releasetools/ota_from_target_files -v -w \       -p $(HOST_OUT) \       -k $(KEY_CERT_PAIR) $(TIMESTAMP_CHECK) \       $(if $(OEM_OTA_CONFIG), -o $(OEM_OTA_CONFIG)) \       $(BUILT_TARGET_FILES_PACKAGE) $@.PHONY: otapackageotapackage: $(INTERNAL_OTA_PACKAGE_TARGET)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Makefile 的主要作用是: 

建立升级包的目录结构,将需要的文件拷贝到对应的目录中,最终形成临时的zip文件作为制作升级包的原材料,生成路径为:out/target/product//obj/PACKAGING/XXXXXXXX.zip 
然后执行 ./build/tools/releasetools/ota_from_target_files.py脚本,具体的参数配置在脚本文件开始处有注明,比如-w代表擦除data分区

将data打包进升级包需要修改三处: 

一、差不多在Makefile的1747行添加:

$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="DATA/" } /^DATA\// {print "data/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/data_filesystem_config.txt
  • 1

生成配置文件的空文件,在执行脚本时会有相关信息写入,如果不配置将显示此文件找不到

二、在ota_from_target_files.py中添加宏定义,大约在981行

def HasDataPartition(target_files_zip):  try:    target_files_zip.getinfo("DATA/")    return True  except KeyError:    return False
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

判断临时文件中是否包含data分区所需要的文件

三、在WriteFullOTAPackage中添加:

if HasDataPartition(input_zip):    data_items = ItemSet("data", "META/data_filesystem_config.txt")    script.ShowProgress(0.1, 0)    if block_based:      data_tgt = GetImage("data", OPTIONS.input_tmp, OPTIONS.info_dict)      data_tgt.ResetFileMap()      data_diff = common.BlockDifference("data", data_tgt)      data_diff.WriteScript(script, output_zip)    else:      script.FormatPartition("/data")      script.Mount("/data", recovery_mount_options)      script.UnpackPackageDir("data", "/data")      symlinks = CopyPartitionFiles(data_items, input_zip, output_zip)      script.MakeSymlinks(symlinks)      data_items.GetMetadata(input_zip)      data_items.Get("data").SetPermissions(script)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

作用是将data文件打包进升级包并生成相应的升级脚本,建议加在vendor后边 

友情提醒: python对代码格式要求很严,请尤其注意,我已被坑惨

转载地址:http://yefsi.baihongyu.com/

你可能感兴趣的文章
存储器管理(二)
查看>>
开局一张图,学一学项目管理神器Maven!
查看>>
Android中的Binder(二)
查看>>
Framework之View的工作原理(一)
查看>>
Web应用架构
查看>>
设计模式之策略模式
查看>>
深究Java中的RMI底层原理
查看>>
用idea创建一个maven web项目
查看>>
Kafka
查看>>
9.1 为我们的角色划分权限
查看>>
维吉尼亚之加解密及破解
查看>>
DES加解密
查看>>
TCP/IP协议三次握手与四次握手流程解析
查看>>
PHP 扩展开发 : 编写一个hello world !
查看>>
inet_ntoa、 inet_aton、inet_addr
查看>>
用模板写单链表
查看>>
用模板写单链表
查看>>
链表各类操作详解
查看>>
C++实现 简单 单链表
查看>>
数据结构之单链表——C++模板类实现
查看>>