Updater-script升级脚本阅读指南

来源:互联网 发布:java俄罗斯方块代码 编辑:程序博客网 时间:2024/06/08 04:43

1、 updater-script脚本概述

updater-script脚本在升级包中的路径是:

update_H0_V0_Q0_C0.zip\META-INF\com\google\android\updater-script

recovery的升级过程中最重要的一个任务是解析updter-script脚本,通过解析脚本中的命令来决定具体的升级过程。也就是说升级的具体任务是有recovery完成的,但是怎么完成升级任务实际上是由updater-script脚本决定的。因此看懂了updater-script脚本就可以弄清楚升级包中具体升级了哪些内容。

2、 recovery升级整体流程

recovery升级整体流程分为以下几个步骤:

a.  读取上层应用设置的升级标志位,对于ott的盒子,升级标志位包括

a)        usb升级

b)       网络升级

c)        恢复出厂设置

d)       强制升级

b.  读取应用设置的升级包存放位置

c.  校验升级包签名,签名通过则走下面流程,否则提示操作失败直接重启

d.  读取升级包中的updater-script文件到内存中

e.  解析updater-script脚本中的命令,逐行执行updater-script中的命令

f.  成功执行完updater-script脚本中的命令后提示“操作成功”重启,否则提示操作失败重启

3、 常用升级命令说明

3.1 getprop与abort命令

3.1.1 作用

Getprop:获取指定的系统属性。

abort:终止升级,并可以将终止原因打印出来。

3.1.2 示例

a.getprop("ro.product.device");

获取板子的设备型号,如amlogic K1项目,该命令执行后的结果为”K1”。

b.abort("This package is for\"K1\" devices; this is a \"" +getprop("ro.product.device") + "\".");

终止升级,并打印出下面的信息:

This package is forK1 devices; this is a …

 

getprop和abort命令常常配合使用,用于检测当前升级包是否适用于板子。

如:getprop("ro.product.device") == "K1" ||abort("This package is for \"K1\" devices; this is a\"" + getprop("ro.product.device") + "\".");

这条命令的意思的,判断板子的设备型号是否为”K1”,如果不是”K1”,则会执行“||”后面的语句,即终止升级。

3.2 show_progress命令

3.2.1 作用

用于进度条显示

3.2.2 示例

a.show_progress(0.800000, 80);

80秒内将进度条增加80%。

b.show_progress(0.100000, 0);

0秒内将进入条增加10%,即直接将进度条向前跳10%。

3.3 format命令

3.3.1 作用

格式化一个分区,可将一个分区中的文件全部删除

3.3.2 示例

format("ext4","EMMC", "/dev/block/system", "0","/system");

将system分区格式化

3.4 mount和unmount命令

3.4.1 作用

mount:挂载某个分区

unmount:下载某个分区

3.4.2 示例

mount("ext4","EMMC", "/dev/block/system", "/system");

将system分区挂载到/system目录。

注:只有在挂载之后我们才能用ls命令看到分区中的文件

3.5 package_extract_dir命令

3.5.1 作用

将指定文件夹中的文件解压到指定目录

3.5.2 示例

a.  package_extract_dir("system", "/system");

将升级包中的system文件夹中的文件解压到/system目录,这里的作用是将升级system分区中的文件

b.  package_extract_dir("recovery", "/system");

将升级包中的recovery文件夹中的文件解压到/system目录,这条命令的不是升级recovery,不要被误导。recovery文件夹中文件的作用是起到恢复recovery的作用,现在没有用到,不需管这条命令。

3.6 symlink命令

3.6.1 作用

为一些文件创建软连接

3.6.2 示例

symlink("Roboto-Bold.ttf","/system/fonts/DroidSans-Bold.ttf");

为/system/fonts/Roboto-Bold.ttf文件创建一个软连接/system/fonts/DroidSans-Bold.ttf,一般不需关心。

3.7 set_metadata_recursive和set_metadata命令

3.7.1 作用

修改文件或目录权限和属组等信息,具体我也还没分析,测试无需关心。

3.7.2 示例

set_metadata_recursive("/system/bin", "uid", 0,"gid", 2000, "dmode", 0755, "fmode", 0755,"capabilities", 0x0);

set_metadata("/system/bin/netcfg", "uid", 0,"gid", 3003, "mode", 02750, "capabilities", 0x0);

3.8 write_raw_image命令

3.8.1 作用

将指定的文件直接写到指定的分区,长用于升级没有经过压缩的分区数据。如recovery和boot分区的升级。

3.8.2 示例

write_raw_image(package_extract_file("boot.img"),"boot");

将升级包中boot.img文件数据升级到boot分区。

如何通过updater-script脚本看出当前的升级包的升级内容?

4、 通过updater-script脚本看升级内容

如何通过查看updater-script脚本得知你的升级包升级了哪些东西呢?下面将回答这个问题

主要看下面两个命令

a.  write_raw_image

看这个命令的第二个参数,如write_raw_image(package_extract_file("boot.img"),"boot"),命令中第二个参数是boot,说明这条命令的作用是升级boot分区

 

b.package_extract_dir

看这个命令的第二个参数,如package_extract_dir("system", "/system"),命令中的第二个参数为/system,说明这条命令的作用是升级system分区

 

0 0
原创粉丝点击