J6X OTA 打包工具
===================


OTA 打包工具介绍
---------------------

OTA打包工具位于"img_packages/ota_tools"路径下。

.. code:: bash

 	> tree 
		.
		├── hdiffz           // 差分工具
		├── hpatchz          // 差分工具
		├── j6e-gpt.json     // GPT 工具
		├── mk_otapackage.py // ota 打包工具
		├── ota_pack_tool.sh // ota 打包脚本，该工具是对mk_otapackage.py的封装
		├── ota_process      // ota 升级用到的二进制工具，放入ota包中
		└── private_key.pem  // ota 制作升级包会用到的私钥


一般使用ota_pack_tool.sh制作所需的ota升级包，支持ota升级包解包，解包后重打包，制作升级包以及制作差分包等。使用方法如下：

.. code:: bash
 
	Usage: ./ota_pack_tool.sh [OPTIONS]...
	Options:
	-x, -unpack <ota_package>        Unpack the given OTA package file.
	-r, -repack                      Repack the files into a new OTA package.
	-c, -create <pack_type> -d <source_dir>
		Generate OTA package by source dir or img_packages.
		<pack_type>: middleware, app, sys, full ... etc.
		<source_dir>: app and middleware require the fs dir or xxx.img, sys and full require img dir.
		(e.g.)run "./ota_pack_tool.sh -c app -d /root/app/" or "./ota_pack_tool.sh -c app -d /root/app/app.img".
		(e.g.)run "./ota_pack_tool.sh -c sys -d /root/img_packages/"
	-i, -inc <pack_type> -old <old_pkg> -new <new_pkg>
		Create an incremental OTA package.
		<pack_type>: sys, full, middleware, app ... etc.
		<old_pkg>, <new_pkg>: ota pack, xxx.zip.
		(e.g.)run "./ota_pack_tool.sh -inc app -old /old/app.zip -new /new/app.zip".
	-h, -help                        Display this help message.



OTA 升级包解包与重打包
-----------------------


升级包解包：

.. code:: bash

	# 解包，将OTA包all_in_one_full.zip解包，解包后的分区镜像位于./out/ota_unpack
	./ota_pack_tool.sh -x all_in_one_full.zip

	xx/ota_tools/out/ota_unpack > tree
	.
	├── acore_cfg.img
	├── basesystem.img
	├── bl31.img
	├── boot.img
	├── data.json
	├── gpt.conf    // ota 配置文件
	├── optee.img
	├── ota_process // ota 升级用到的二进制工具
	├── system.img
	├── system_verity.img
	├── uboot.img
	└── vbmeta.img


升级包重打包：

升级包解包后，可以更新./out/ota_unpack下的镜像，重新制作ota包，使用的OTA配置文件与ota_process均位于./out/ota_unpack。该方法无法修改OTA配置文件gpt.conf。

.. code:: bash

	# 将位于./out/ota_unpack目录的分区镜像重新打包
	./ota_pack_tool.sh -r 


OTA 制作普通升级包
-------------------

可以制作app.zip，middleware.zip，系统升级包与全量升级包等。使用的分区表配置文件与ota_procee均位于ota_tools目录下，可根据实际需求修改分区表j6e-gpt.json。

.. code:: bash

	-c, -create <pack_type> -d <source_dir>
		Generate OTA package by source dir or img_packages.
		<pack_type>: middleware, app, sys, full ... etc.
		<source_dir>: app and middleware require the fs dir or xxx.img, sys and full require img dir.
		(e.g.)run "./ota_pack_tool.sh -c app -d /root/app/" or "./ota_pack_tool.sh -c app -d /root/app/app.img".
		(e.g.)run "./ota_pack_tool.sh -c sys -d /root/img_packages/"

	# 将app目录下的文件制作成app.img，并生成app.zip
	./ota_pack_tool.sh -c app -d /root/app/
	
	# 将app.img生成app.zip
	./ota_pack_tool.sh -c app -d /root/app/app.img

	# 将/root/img_packages/目录下的分区镜像制作成sys系统包（all_in_one.zip）
	./ota_pack_tool.sh -c sys -d /root/img_packages/

	# 将/root/img_packages/目录下的分区镜像制作成full全量包（all_in_one_full.zip）
	./ota_pack_tool.sh -c full -d /root/img_packages/

	***


OTA 制作差分升级包
-------------------

可以制作app_inc.zip，middleware_inc.zip，系统差分包与全量差分包（只支持secure镜像）等。使用的OTA配置文件与ota_procee均为new包解压所得。

.. code:: bash

	-i, -inc <pack_type> -old <old_pkg> -new <new_pkg>
		Create an incremental OTA package.
		<pack_type>: sys, full, middleware, app ... etc.
		<old_pkg>, <new_pkg>: ota pack, xxx.zip.
		(e.g.)run "./ota_pack_tool.sh -inc app -old /old/app.zip -new /new/app.zip".

	# 基于/old/app.zip制作/new/app.zip的差分包app_inc.zip
	./ota_pack_tool.sh -inc app -old /old/app.zip -new /new/app.zip

	# 基于/old/all_in_one_full_signed.zip制作/new/all_in_one_full_signed.zip的差分包all_in_one_full_signed_inc.zip
	./ota_pack_tool.sh -inc full -old /old/all_in_one_full_signed.zip -new /new/all_in_one_full_signed.zip

	***
