超级详细的update-script ROM脚本语法说明

合集下载

update用法js

update用法js

update用法js在JavaScript中,`update`是一个通用的术语,用于表示更新或修改某个对象、元素或实体的状态或属性。

`update`的具体用法与上下文有关,可以用于不同的对象和操作。

以下是一些常见的`update`用法:1.更新HTML元素的内容:可以使用`innerHTML`属性来更新HTML元素的内容。

例如,通过获取元素的ID并设置其`innerHTML`属性,可以更新元素的文本、HTML或其他内容。

```javascriptdocument.getElementById('elementId').innerHTML = 'New content';```2.更新对象的属性:对象的属性可以通过直接赋值的方式进行更新。

例如,可以通过给对象的属性赋新值来更新它们的状态。

```javascriptvar obj = { name: 'John', age: 25 }; = 'Alice';obj.age = 30;```3.更新数组的元素:数组元素可以通过索引进行更新。

可以通过给数组指定的索引位置赋新值来更新特定位置的元素。

```javascriptvar arr = [1, 2, 3, 4];arr[1] = 5;arr[3] = 6;```4.更新数据库记录:在与数据库交互的应用程序中,可以使用SQL语句或ORM(对象关系映射)工具来更新数据库记录。

具体的`update`语法和用法取决于所使用的数据库和工具。

5.更新框架的状态:许多JavaScript框架(如React、Vue和Angular)使用状态管理来管理应用程序的状态。

可以通过更新状态来反映应用程序中发生的变化,并相应地更新用户界面。

```javascript// React示例constructor(props)super(props);this.state = { count: 0 };}handleClicthis.setState({ count: this.state.count + 1 });}rendereturn<div><p>Count: {this.state.count}</p><buttononClick={this.handleClick.bind(this)}>Increment</button> </div>}```上述示例中,通过调用`this.setState`方法来更新`Counter`组件的状态,从而重新渲染并显示更新后的计数。

update-script脚本语法简介

update-script脚本语法简介

(九)---updater-script脚本语法简介以及执行流程分类:Andriod2012-04-16 14:24 8888人阅读评论(23) 收藏举报脚本android工作symlinksystempathAndroid系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程目前update-script脚本格式是edify,其与amend有何区别,暂不讨论,我们只分析其中主要的语法,以及脚本的流程控制。

一、update-script脚本语法简介:我们顺着所生成的脚本来看其中主要涉及的语法。

1.assert(condition):如果condition参数的计算结果为False,则停止脚本执行,否则继续执行脚本。

2.show_progress(frac,sec):frac表示进度完成的数值,sec表示整个过程的总秒数。

主要用与显示UI上的进度条。

3.format(fs_type,partition_type,location):fs_type,文件系统类型,取值一般为“yaffs2”或“ext4”。

Partition_type,分区类型,一般取值为“MTD”或则“EMMC”。

主要用于格式化为指定的文件系统。

事例如下:format(”yaffs2”,”MTD”,”system”)。

4.mount(fs_type,partition_type,location,mount_point):前两个参数同上,location要挂载的设备,mount_point挂载点。

作用:挂载一个文件系统到指定的挂载点。

5.package_extract_dir(src_path,destination_path):src_path,要提取的目录,destination_path目标目录。

作用:从升级包内,提取目录到指定的位置。

示例:package_extract_dir(“system”,”/system”)。

update语句的执行流程

update语句的执行流程

update语句的执行流程摘要:1.更新语句的基本概念2.更新语句的执行流程概述3.更新语句的执行流程详细步骤4.总结正文:1.更新语句的基本概念在数据库管理系统(DBMS)中,更新语句是一种数据操作语句,用于修改数据库中的现有数据。

更新语句通常包括设置新的数据值、删除已有数据以及插入新的数据等操作。

它可以使数据库保持最新状态,满足用户对数据的需求。

2.更新语句的执行流程概述更新语句的执行流程主要包括以下几个步骤:(1)分析器解析语句:分析器接收到更新语句后,对其进行解析,识别出其中的关键字、表达式以及要更新的表和字段等。

(2)优化器生成执行计划:优化器根据解析器解析的结果,制定出一套最佳的执行方案,以提高更新操作的效率。

(3)存储引擎执行更新操作:存储引擎根据优化器生成的执行计划,对数据库中的数据进行更新操作。

(4)提交事务:更新操作完成后,提交事务,将更新结果永久保存在数据库中。

3.更新语句的执行流程详细步骤(1)分析器解析语句分析器首先接收到用户输入的更新语句,对其进行解析。

在解析过程中,分析器需要识别出语句中的关键字,如“UPDATE”、“SET”、“WHERE”等,以及要更新的表名、字段名和表达式等。

(2)优化器生成执行计划优化器根据分析器解析的结果,制定出一套最佳的执行方案。

优化方案主要包括选择更新哪些数据、如何更新数据以及更新数据的顺序等。

优化器的目标是提高更新操作的效率,减少系统资源消耗。

(3)存储引擎执行更新操作存储引擎根据优化器生成的执行计划,对数据库中的数据进行更新操作。

在执行过程中,存储引擎负责处理数据的存储和检索,保证数据的安全性和完整性。

(4)提交事务更新操作完成后,提交事务。

事务管理器负责将更新结果永久保存在数据库中,并释放相关资源。

此时,更新语句的执行流程结束。

4.总结更新语句的执行流程包括分析器解析语句、优化器生成执行计划、存储引擎执行更新操作以及提交事务等环节。

【转载】script命令使用

【转载】script命令使用

【转载】script命令使⽤⼆、script命令简介当你在终端或控制台上⼯作时,你可能想记录下⾃⼰做了些什么。

这种记录可以看成是保存了终端痕迹的⽂档。

假设你跟⼀些Linux管理员同时在系统上⼲活。

或者说你让别⼈远程到你的服务器。

你就会想记录下终端发⽣过什么。

要实现它,你可以使⽤script命令。

2.1 什么script命令script 是⼀个神奇命令,可以使⽤script⼯具记录⽤户在当前终端的所有的操作,已经输出到屏幕的内容。

将这些信息保存到指定的⽂本⽂件中。

也就是说,script命令在你需要记录或者存档终端活动时可能很有⽤,记录⽂件会存储为⽂本⽂件,所以可以很⽅便地⽤⽂本编辑器打开。

在使⽤script命令将终端的会话过程录制下来之后,可以使⽤ scriptreplay将其录制的结果播放给他⼈观看。

script 的好处就在于你在终端中的所有操作、敲过的命令和打印出的结果它都可以原原本本地进⾏录制。

可以应⽤于教学、演⽰、审计。

————————————————版权声明:本⽂为CSDN博主「欧阳鹏」的原创⽂章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原⽂出处链接及本声明。

原⽂链接:https:///ouyang_peng/article/details/78818492=========================================================================================================================================== script -a test.log #-a参数表⽰追加command 1command 2....exit #结束脚本。

update标签用法

update标签用法

update标签用法
Update标签是HTML5中的一个新标签,它的作用是用于实时更新网页内容。

在Web开发中,我们经常需要实时更新网页的内容,例如聊天室、股票行情等。

使用Update标签可以很方便地实现这些功能。

Update标签的语法格式如下:
<update id="update1" data-update="content">新的内容
</update>
其中,id属性用于指定Update标签的唯一标识符,data-update属性用于指定需要更新的内容。

在实际使用中,我们可以通过JavaScript代码来动态地更新Update标签中的内容,例如:
var update1 = document.getElementById("update1");
update1.innerHTML = "更新后的内容";
除了innerHTML属性,还可以使用innerText、textContent等属性来更新Update标签中的内容。

需要注意的是,Update标签只能在支持HTML5的浏览器中使用。


果需要在旧版浏览器中实现实时更新功能,可以考虑使用Ajax技术或者轮询技术。

总之,Update标签是一个非常实用的HTML5标签,它可以方便地实现网页内容的实时更新。

在Web开发中,我们可以根据具体需求灵活运用Update标签,提高网页的交互性和用户体验。

updater-script 脚本 Edify语句 详细解读

updater-script 脚本 Edify语句 详细解读

大部分的Edify命名都是函数,当调用这些函数结束的时候,会返回数据给脚本当然,你也可以使用这些函数的返回值来确认成功与否例如:下面是用在Edify的Updater-script中的函数例子:本帖隐藏的内容函数名称:mount函数语法:mount(fs_type, partition_type, location, mount_point)参数详解: fs_type-----------------"yaffs2" 或"ext4"partition_type----------"MTD"或"EMMC"location-----------------分区(partition) 或驱动器(device)mount_poin------------挂载文件系统的目标文件夹(target folder to mount FS)作用解释:挂载一个文件系统到指定的挂载点返回值:挂载成功则返回挂载点,失败返回null函数示例:mount("MTD", "system", "/system");挂载system分区,设置返回指针"/system”mount("vfat", "/dev/block/mmcblk1p2", "/system"); 挂载/dev/block/mmcblk1p2,返回指针"/system”函数名称: is_mounted函数语法: is_mounted(mount_point)参数详解: mount_point-----------字符串,检查是否已经挂载的挂载点作用解释:检查文件系统是否挂载返回值:挂载成功则返回挂载点,失败返回null函数示例:函数名称: unmount函数语法: unmount(mount_point)参数详解: mount_point-----------字符串,要解除挂载的挂载点作用解释:解除文件系统挂载返回值: 解除挂载成功则返回挂载点,失败返回null函数示例: unmount("/system"); 卸载/system分区函数名称: format函数语法: format(fs_type, partition_type, location)参数详解: fs_type-----------------字符串,数据为"yaffs2" 或"ext4"partition_type----------字符串, "MTD" 或"EMMC"location-----------------字符串, 分区(partition) 或驱动器(device)作用解释:格式化为指定的文件系统函数示例: format("MTD", "system");格式化system分区函数名称: delete函数语法: delete(file1, file2, ..., fileN)参数详解:字符串,要删除的文件作用解释:删除一个文件。

update-script脚本语法说明

update-script脚本语法说明

system:系统分区.我们刷机器一般就是刷的这个分区.userdata:数据分区.cache:缓存分区recovery:Recovery分区,相当于建立在hboot与android系统间的一个中间层,如名字一般,主要用于系统调试和恢复。

.boot:存放内核和ramdisk的分区.hboot:这个是SPL所在的分区,即bootloadersplash1:这个就是开机第一屏幕了.radio:这个是无线所在的分区.misc:其他分区1.copy_dir语法:copy_dir <src-dir> <dst-dir> [<timestamp>]<src-dir>表示原文件夹,<dst-dir>表示目的文件夹,[<timestamp>]表示时间戳作用:将<src-dir>文件夹中的内容复制到<dst-dir>文件夹中。

<dst-dir>文件夹中的原始内容将会保存不变,除非<src-dir>文件夹中有相同的内容,这样<dst-dir>中的内容将被覆盖举例:copy_dir PACKAGE:system SYSTEM:(将升级包中的system文件夹复制到手机中)2.format语法:format <root><root>表示要格式化的分区作用:格式化一个分区举例:format SYSTEM:(将手机/system分区完全格式化)注意:格式化之后的数据是不可以恢复的3.delete语法:delete <file1> [... <fileN>]<file1> [... <fileN>]表示要格式化的文件,可以是多个文件用空格隔开作用:删除文件1,2到n举例:delete SYSTEM:app/Calculator.apk(删除手机systen文件夹中app中的Calculator.apk文件)4.delete_recursive语法:delete_recursive <file-or-dir1> [... <file-or-dirN>]<file-or-dir1> [... <file-or-dirN>]表示要删除的文件或文件夹,可以使多个,中间用空格隔开作用:删除文件或者目录,删除目录时会将目录中的所有内容全部删除举例:delete_recursive DATA:dalvik-cache(删除/data/dalvik-cache文件夹下的所有内容)5.run_program语法:run_program <program-file> [<args> ...]<program-file>表示要运行的程序,[<args> ...]表示运行程序所加的参数作用:运行终端程序举例:run_program PACKAGE:install_busybox.sh(执行升级包中的install_busybox.sh脚本)语法:set_perm <uid> <gid> <mode> <path> [... <pathN>]<uid>表示用户名称,<gid>表示用户组名称,<mode>,表示权限模式,<path> [... <pathN>]表示文件路径,可以使多个,用空格隔开作用:设置单个文件或目录的所有者和权限,像linux中的chmod、chown或chgrp命令一样,只是集中在了一个命令当中举例:set_perm 0 2000 0550 SYSTEM:etc/init.goldfish.sh(设置手机system中的etc/init.goldfish.sh的用户为root,用户组为shell,所有者以及所属用户组成员可以进行读取和执行操作,其他用户无操作权限)7.set_perm_recursive语法:set_perm_recursive <uid> <gid> <dir-mode> <file-mode> <path> [... <pathN>]<uid>表示用户,<gid>表示用户组,<dir-mode>表示文件夹的权限,<file-mode>表示文件的权限,<path> [... <pathN>]表示文件夹的路径,可以多个,用空格分开作用:设置文件夹及文件夹中的文件的所有者和用户组举例:set_perm_recursive 0 0 0755 0644 SYSTEM:app(设置手机system/app文件夹及其中文件的用户为root,用户组为root,app文件夹权限为所有者可以进行读、写、执行操作,其他用户可以进行读取和执行操作,其中的文件的权限为所有者可以进行读写操作,其他用户可以进行读取操作)8.show_progress语法:show_progress <fraction> <duration><表示一个小部分> <表示一个小部分的持续时间>作用:为下面进行的程序操作显示进度条,进度条会根据<duration>进行前进,当操作时间是确定的时候会更快举例:show_progress 0.1 0(显示进度条当操作完成后前进10%)9.symlink语法:symlink <link-target> <link-path><link-target>表示链接到的目标,<link-path>表示快捷方式的路径作用:相当于linux中的ln命令,将<link-target>在<link-path>处创建一个软链接,<link-target>的格式应为绝对路径(或许相对路径也可以),<link-path>为“根目录:路径”的形式举例:symlink /system/bin/su SYSTEM:xbin/su(在手机中system中的xbin中建立一个/system/bin/su的快捷方式)10.assert <boolexpr>作用:此命令用来判断表达式boolexpr的正确与否,当表达式错误时程序终止执行※此作用有待验证11.write_radio_image <src-image>作用:将基带部分的镜像写入手机,<src-image>表示镜像文件举例:write_radio_image PACKAGE:radio.img12.write_hboot_image <src-image>作用:将系统bootloader镜像写入手机,<src-image>表示镜像位置,此命令在直到在所有的程序安装结束之后才会起作用举例:write_hboot_image PACKAGE:hboot.img13.write_raw_image <src-image> <dest-root>作用:将boot.img写入手机,里面包含了内核和ram盘举例:write_raw_image PACKAGE:boot.img BOOT:完整示例:assert(getprop("ro.product.device") == "morr" || getprop("ro.build.product") == "morr" || getprop("ro.product.board") == "morr" || getprop("ro.product.device") == "morrison" || getprop("ro.build.product") == "morrison" || getprop("ro.product.board") == "morrison");package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");set_perm(0, 0, 0777, "/tmp/backuptool.sh");run_program("/tmp/backuptool.sh", "backup");show_progress(0.500000, 0);format("yaffs2", "MTD", "system");mount("yaffs2", "MTD", "system", "/system");package_extract_dir("recovery", "/system");package_extract_dir("system", "/system");symlink("busybox", "/system/xbin/[", "/system/xbin/[[","/system/xbin/arp", "/system/xbin/ash", "/system/xbin/awk","/system/xbin/basename", "/system/xbin/bbconfig", "/system/xbin/brctl","/system/xbin/bunzip2", "/system/xbin/bzcat", "/system/xbin/bzip2","/system/xbin/cal", "/system/xbin/cat", "/system/xbin/catv","/system/xbin/chgrp", "/system/xbin/chmod", "/system/xbin/chown","/system/xbin/chroot", "/system/xbin/cksum", "/system/xbin/clear","/system/xbin/cmp", "/system/xbin/cp", "/system/xbin/cpio","/system/xbin/cut", "/system/xbin/date", "/system/xbin/dc","/system/xbin/dd", "/system/xbin/depmod", "/system/xbin/devmem","/system/xbin/df", "/system/xbin/diff", "/system/xbin/dirname","/system/xbin/dmesg", "/system/xbin/dnsd", "/system/xbin/dos2unix","/system/xbin/du", "/system/xbin/echo", "/system/xbin/ed","/system/xbin/egrep", "/system/xbin/env", "/system/xbin/expr","/system/xbin/false", "/system/xbin/fdisk", "/system/xbin/fgrep","/system/xbin/find", "/system/xbin/fold", "/system/xbin/free","/system/xbin/freeramdisk", "/system/xbin/fuser", "/system/xbin/getopt","/system/xbin/grep", "/system/xbin/gunzip", "/system/xbin/gzip","/system/xbin/head", "/system/xbin/hexdump", "/system/xbin/id","/system/xbin/ifconfig", "/system/xbin/insmod", "/system/xbin/install","/system/xbin/ip", "/system/xbin/kill", "/system/xbin/killall","/system/xbin/killall5", "/system/xbin/length", "/system/xbin/less","/system/xbin/ln", "/system/xbin/losetup", "/system/xbin/ls","/system/xbin/lsmod", "/system/xbin/lspci", "/system/xbin/lsusb","/system/xbin/lzop", "/system/xbin/lzopcat", "/system/xbin/md5sum","/system/xbin/mkdir", "/system/xbin/mke2fs", "/system/xbin/mkfifo","/system/xbin/mkfs.ext2", "/system/xbin/mknod", "/system/xbin/mkswap", "/system/xbin/mktemp", "/system/xbin/modprobe", "/system/xbin/more", "/system/xbin/mount", "/system/xbin/mountpoint", "/system/xbin/mv", "/system/xbin/netstat", "/system/xbin/nice", "/system/xbin/nohup","/system/xbin/nslookup", "/system/xbin/ntpd", "/system/xbin/od","/system/xbin/patch", "/system/xbin/pgrep", "/system/xbin/pidof","/system/xbin/ping", "/system/xbin/pkill", "/system/xbin/printenv","/system/xbin/printf", "/system/xbin/ps", "/system/xbin/pwd","/system/xbin/rdev", "/system/xbin/readlink", "/system/xbin/realpath","/system/xbin/renice", "/system/xbin/reset", "/system/xbin/rm","/system/xbin/rmdir", "/system/xbin/rmmod", "/system/xbin/route","/system/xbin/run-parts", "/system/xbin/sed", "/system/xbin/seq","/system/xbin/setsid", "/system/xbin/sh", "/system/xbin/sha1sum","/system/xbin/sha256sum", "/system/xbin/sha512sum","/system/xbin/sleep", "/system/xbin/sort", "/system/xbin/split","/system/xbin/stat", "/system/xbin/strings", "/system/xbin/stty","/system/xbin/swapoff", "/system/xbin/swapon", "/system/xbin/sync","/system/xbin/sysctl", "/system/xbin/tac", "/system/xbin/tail","/system/xbin/tar", "/system/xbin/tee", "/system/xbin/telnet","/system/xbin/test", "/system/xbin/tftp", "/system/xbin/time","/system/xbin/top", "/system/xbin/touch", "/system/xbin/tr","/system/xbin/traceroute", "/system/xbin/true", "/system/xbin/tty","/system/xbin/tune2fs", "/system/xbin/umount", "/system/xbin/uname", "/system/xbin/uniq", "/system/xbin/unix2dos", "/system/xbin/unlzop","/system/xbin/unzip", "/system/xbin/uptime", "/system/xbin/usleep","/system/xbin/uudecode", "/system/xbin/uuencode", "/system/xbin/vi", "/system/xbin/watch", "/system/xbin/wc", "/system/xbin/wget","/system/xbin/which", "/system/xbin/whoami", "/system/xbin/xargs","/system/xbin/yes","/system/xbin/zcat");symlink("iwmulticall", "/system/xbin/iwconfig", "/system/xbin/iwgetid", "/system/xbin/iwlist", "/system/xbin/iwpriv","/system/xbin/iwspy");symlink("toolbox", "/system/bin/cat", "/system/bin/cmp","/system/bin/date", "/system/bin/dd", "/system/bin/dmesg","/system/bin/getevent", "/system/bin/getprop", "/system/bin/hd","/system/bin/id", "/system/bin/ifconfig", "/system/bin/iftop","/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice","/system/bin/kill", "/system/bin/log", "/system/bin/lsmod","/system/bin/nandread", "/system/bin/netstat","/system/bin/newfs_msdos", "/system/bin/notify", "/system/bin/printenv", "/system/bin/ps", "/system/bin/reboot", "/system/bin/renice","/system/bin/rmdir", "/system/bin/rmmod", "/system/bin/route","/system/bin/schedtop", "/system/bin/sendevent","/system/bin/setconsole", "/system/bin/setprop", "/system/bin/sleep","/system/bin/smd", "/system/bin/start", "/system/bin/stop","/system/bin/sync", "/system/bin/top", "/system/bin/uptime","/system/bin/vmstat", "/system/bin/watchprops","/system/bin/wipe");set_perm_recursive(0, 0, 0755, 0644, "/system");set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");set_perm(0, 3003, 02750, "/system/bin/netcfg");set_perm(0, 3004, 02755, "/system/bin/ping");set_perm(0, 2000, 06750, "/system/bin/run-as");set_perm(1001, 1005, 0444, "/system/etc/AudioPara4.csv");set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");set_perm(0, 0, 0755, "/system/etc/bluetooth");set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");set_perm_recursive(0, 2000, 0755, 0750, "/system/etc/init.d");set_perm(0, 0, 0755, "/system/etc/init.d");set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");set_perm(0, 0, 0544, "/system/etc/install-recovery.sh");set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor");set_perm_recursive(0, 0, 0755, 0644, "/system/vendor/firmware");set_perm(0, 2000, 0755, "/system/vendor/firmware");set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");set_perm(0, 0, 06755, "/system/xbin/hcitool");set_perm(0, 0, 06755, "/system/xbin/librank");set_perm(0, 0, 06755, "/system/xbin/procmem");set_perm(0, 0, 06755, "/system/xbin/procrank");set_perm(0, 0, 06755, "/system/xbin/su");set_perm(0, 0, 06755, "/system/xbin/tcpdump");show_progress(0.200000, 0);show_progress(0.200000, 10);package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");set_perm(0, 0, 0777, "/tmp/backuptool.sh");run_program("/tmp/backuptool.sh", "restore");package_extract_file("system/bin/modelid_cfg.sh", "/tmp/modelid_cfg.sh");set_perm(0, 0, 0777, "/tmp/modelid_cfg.sh");run_program("/tmp/modelid_cfg.sh");package_extract_file("system/bin/verify_cache_partition_size.sh", "/tmp/verify_cache_partition_size.sh"); set_perm(0, 0, 0777, "/tmp/verify_cache_partition_size.sh");run_program("/tmp/verify_cache_partition_size.sh");show_progress(0.200000, 10);assert(package_extract_file("boot.img", "/tmp/boot.img"), write_raw_image("/tmp/boot.img", "boot"),delete("/tmp/boot.img"));show_progress(0.100000, 0);unmount("/system");。

Android-ROM-刷机脚本-updater-script-的基本流程和初级语句说明

Android-ROM-刷机脚本-updater-script-的基本流程和初级语句说明

Android ROM 刷机脚本updater-script 的基本流程和初级语句说明(转)简单说说刷机脚本的相关知识, 以及简单的语句说明.目的不是让你通过本帖学会如何做刷机脚本,那不是一下子可以做到的事情.但是至少可以通过本帖子,让你对刷机脚本有一个初步的了解, 并且可以初步动手修改相对简单的内容, 例如制作升级包.以下说明,都以我的Reflex S Data2Ext 2.0.2c 整包ROM为例子说明, 把update的过程流程化, 更加有助于理解.首先说明刷机脚本的路径, 其实很多人,包括部分ROM作者, 都不知道这个文件的存在.位于刷机包的如下路径:1.META-INF\com\google\android\updater-script复制代码刷机过程其实很简单, 只要你理解了流程, 和相关的语句.一般来说, 刷机就是如下的步骤:1.开始.2.清理userdata, system, cache, dalvik-cache等 (这是一个可选的步骤, 由ROM作者依据ROM的特性去决定是否要采用)3.挂载userdata, system, sdext (其中sdext为可选挂载, 依据ROM特性决定)4.释放对应的文件/文件夹到对应的区域, 例如刷机包内的目录data对应的释放到手机的userdata区域5.Symlink, 这个是必须的动作, 这个有问题, 会导致ROM出现一些问题, 特别是错误的链接或者不存在的链接,很容易引发问题.6.设置权限, 这一个步骤也很重要, 关系到ROM能否正常使用, Android是base在linux基础上的, 对于文件的权限非常重要, 没有权限, 一个应用程序是无法被执行或者读写的.7.刷入内核引导文件boot.img8.取消挂载的各个分区, 刷机结束.复制代码大概步骤就这样, 这个过程非常明了和直接, 下面我具体举例说明各个步骤的做法.1. 开始准备刷机.开始最简单, 实际上就是就是检测硬件, 打印相关信息,提示开始刷机.其中可能用到的部分函数做个简单介绍:ui_print: 就是在recovery下打印文字给用户阅览.getprop: 获取手机对应的属性assert: 你可以理解为辅助执行多行脚本命令例如如下我的部分开始代码:1.ui_print(” “);2.assert(getprop(“ro.product.device”) == “bravo” ||getprop(“ro.build.product”) == “bravo” || getprop(“ro.product.board”)3.== “bravo”);4.ui_print(“. Reflex S Data2Ext Installation .”);5.ui_print(” “);6.ui_print(“Installing Gingerbread 2.3.3 –Sense 2.1…”);7.ui_pr int(” “);复制代码首先开始答应一行空行,编译和之前的文字区别开来.然后用assert完成对手机的产品设备型号的检测最后打印, 开始安装该ROM.2. 清理这个过程是可选的,有的rom不需要wipe直接升级,就无需这个过程,有的ROM必须完全wipe才可以刷机,否则会出问题,那么rom作者为了担心你因为没有wipe而导致出了问题, 就在脚本里面处理了,尽量帮助你避免产生问题.例如我这个data2ext的ROM, 如果不wipe, 会产生一些问题, 例如FC, UID错误等, 就必须wipe, 但是为了不让用户的懒惰成为找我问问题的麻烦,我就主动帮他们”wipe”了所有必须wipe的内容.其中可能用到的部分函数做个简单介绍:fromat: 格式化相关区域的函数delete_recursive: 可以直接删除一个目录.如下我的部分代码摘抄如下:1.ui_print(” Clean up cache…”);2.format(“MTD”, “cache”);3.delete_recursive(“/data/dalvik-cache”);4.delete_recursive(“/sdext/da lvik-cache”);复制代码首先打印我要开始清理cache了然后格式化cache, 删除userdata下的dalvik-cache, 删除sd卡ext分区的dalvik-cache. 其实我这里代码还是有一些问题的,可能sdext都还没有挂载我就试图删除了.这个就属于脚本的隐患bug了.3挂载和4释放文件, 我是按照区域来组合做的, 如下分别是userdata的处理和system的处理. 其中可能用到的部分函数做个简单介绍:umount/mount: 分别是取消挂载和挂载相关的区域函数.package_extract_dir: 你可以理解为复制刷机包内的指定目录到手机的指定区域.1.ui_print(” Unpacking DATA files…”);2.unmount(“/data”);3.format(“MTD”, “userdata”);4.mount(“MTD”, “userdata”, “/data”);5.package_extract_dir(“data”, “/data”);6.ui_print(” Unpacking SYSTEM files…”);7.unmount(“/system”);8.format(“MTD”, “system”);9.mount(“MTD”, “system”, “/system”);10.package_extract_dir(“system”, “/system”);复制代码为了避免出问题,首先取消挂载, 然后格式化该区域, 然后再挂载,确保挂载没有问题.然后复制需要的文件.5和6相比前面的一些内容,属于比较难懂一点的,需要有linux相关的知识, 不再更多阐述, 贴些代码,简单说下.其中可能用上的部分函数介绍:symlink: 所谓的符号链接, 当然, windows的用户不怎么容易了解, 建议多熟悉下Linux相关内容.set_perm_recursive: 你可以理解为设置目录权限如下代码, 连接../xbin/su到/system/bin/su这个程序.1.ui_print(” Symlinking now…”);2.symlink(“../xbin/su”, “/system/bin/su”);复制代码如下代码,设置相关的权限.1.ui_print(” Setup permissions now…”);2.set_perm_recursive(0, 0, 0755, 0644, “/system”);3.set_perm_recursive(0, 2000, 0755, 0755, “/system/bin”);4.set_perm_recursive(0, 2000, 0755, 0755, “/system/app”);复制代码至于刷入内核引导文件boot.img,如下, 用assert函数实现了, 解压内核到临时区域, 写入内核文件, 删除临时文件的过程.1.ui_print(” Writing Boot.img…”);2.assert(package_extract_file(“boot.img”, “/tmp/boot.img”),write_raw_image(“/tmp/boot.img”, “boot”), delete(“/tmp/boot.img”));复制代码最后,结束, 取消挂载所有区域, 提示结束.如下代码:1.ui_print(” “);2.ui_print(” Flash finished…Enjoy it!”);3.unmount(“/system”);4.unmount(“/data”);复制代码可能大家看了还是模模糊糊的, 没关系, 没有相关的知识, 确实不容易一下子看明白, 但是饭一口口吃, 知识也是一点点懂的, 抛砖引玉,希望给与大家一点点帮助1.META-INF\com\google\android\updater-script复制代码刷机过程其实很简单, 只要你理解了流程, 和相关的语句.一般来说, 刷机就是如下的步骤:1.开始.2.清理userdata, system, cache, dalvik-cache等 (这是一个可选的步骤, 由ROM作者依据ROM的特性去决定是否要采用)3.挂载userdata, system, sdext (其中sdext为可选挂载, 依据ROM特性决定)4.释放对应的文件/文件夹到对应的区域, 例如刷机包内的目录data对应的释放到手机的userdata区域5.Symlink, 这个是必须的动作, 这个有问题, 会导致ROM出现一些问题, 特别是错误的链接或者不存在的链接,很容易引发问题.6.设置权限, 这一个步骤也很重要, 关系到ROM能否正常使用, Android是base在linux基础上的, 对于文件的权限非常重要, 没有权限, 一个应用程序是无法被执行或者读写的.7.刷入内核引导文件boot.img8.取消挂载的各个分区, 刷机结束.复制代码大概步骤就这样, 这个过程非常明了和直接, 下面我具体举例说明各个步骤的做法.1. 开始准备刷机.开始最简单, 实际上就是就是检测硬件, 打印相关信息,提示开始刷机.其中可能用到的部分函数做个简单介绍:ui_print: 就是在recovery下打印文字给用户阅览.getprop: 获取手机对应的属性assert: 你可以理解为辅助执行多行脚本命令例如如下我的部分开始代码:1.ui_print(” “);2.assert(getprop(“ro.product.device”) == “bravo” ||getprop(“ro.build.product”) == “bravo” || getprop(“ro.product.board”)3.== “bravo”);4.ui_print(“. Reflex S Data2Ext Installation .”);5.ui_print(” “);6.ui_print(“Inst alling Gingerbread 2.3.3 –Sense 2.1…”);7.ui_print(” “);复制代码首先开始答应一行空行,编译和之前的文字区别开来.然后用assert完成对手机的产品设备型号的检测最后打印, 开始安装该ROM.2. 清理这个过程是可选的,有的rom不需要wipe直接升级,就无需这个过程,有的ROM必须完全wipe才可以刷机,否则会出问题,那么rom作者为了担心你因为没有wipe而导致出了问题, 就在脚本里面处理了,尽量帮助你避免产生问题.例如我这个data2ext的ROM, 如果不wipe, 会产生一些问题, 例如FC, UID错误等, 就必须wipe, 但是为了不让用户的懒惰成为找我问问题的麻烦,我就主动帮他们”wipe”了所有必须wipe的内容.其中可能用到的部分函数做个简单介绍:fromat: 格式化相关区域的函数delete_recursive: 可以直接删除一个目录.如下我的部分代码摘抄如下:1.ui_print(” Clean up cache…”);2.format(“MTD”, “cache”);3.delete_recursive(“/data/dalvik-cache”);4.delete_recursive(“/sdext/dalvik-cache”);复制代码首先打印我要开始清理cache了然后格式化cache, 删除userdata下的dalvik-cache, 删除sd卡ext分区的dalvik-cache. 其实我这里代码还是有一些问题的,可能sdext都还没有挂载我就试图删除了.这个就属于脚本的隐患bug了.3挂载和4释放文件, 我是按照区域来组合做的, 如下分别是userdata的处理和system的处理. 其中可能用到的部分函数做个简单介绍:umount/mount: 分别是取消挂载和挂载相关的区域函数.package_extract_dir: 你可以理解为复制刷机包内的指定目录到手机的指定区域.1.ui_print(” Unpacking DATA files…”);2.unmount(“/data”);3.format(“MTD”, “userdata”);4.mount(“MTD”, “userdata”, “/data”);5.package_extract_dir(“data”, “/data”);6.ui_print(” Unpacking SYSTEM files…”);7.unmount(“/system”);8.format(“MTD”, “system”);9.mount(“MTD”, “system”, “/system”);10.package_extract_dir(“system”, “/system”);复制代码为了避免出问题,首先取消挂载, 然后格式化该区域, 然后再挂载,确保挂载没有问题.然后复制需要的文件.5和6相比前面的一些内容,属于比较难懂一点的,需要有linux相关的知识, 不再更多阐述, 贴些代码,简单说下.其中可能用上的部分函数介绍:symlink: 所谓的符号链接, 当然, windows的用户不怎么容易了解, 建议多熟悉下Linux相关内容.set_perm_recursive: 你可以理解为设置目录权限如下代码, 连接../xbin/su到/system/bin/su这个程序.1.ui_print(” Symlinking now…”);2.symlink(“../xbin/su”, “/system/bin/su”);复制代码如下代码,设置相关的权限.1.ui_print(” Setup permissions now…”);2.set_perm_recursive(0, 0, 0755, 0644, “/system”);3.set_perm_recursive(0, 2000, 0755, 0755, “/system/bin”);4.set_perm_recursive(0, 2000, 0755, 0755, “/system/app”);复制代码至于刷入内核引导文件boot.img,如下, 用assert函数实现了, 解压内核到临时区域, 写入内核文件, 删除临时文件的过程. 1.ui_print(” Writing Boot.img…”);2.assert(package_extract_file(“boot.img”, “/tmp/boot.img”),write_raw_image(“/tmp/boot.img”, “boot”), delete(“/tmp/boot.img”));复制代码最后,结束, 取消挂载所有区域, 提示结束.如下代码:1.ui_print(” “);2.ui_print(” Flash finished…Enjoy it!”);3.unmount(“/system”);4.unmount(“/data”);复制代码可能大家看了还是模模糊糊的, 没关系, 没有相关的知识, 确实不容易一下子看明白, 但是饭一口口吃, 知识也是一点点懂的, 抛砖引玉,希望给与大家一点点帮助.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

超级详细的update-script ROM脚本语法说明想要深入了解rom定制的一定会学习代码的相关知识在这里我总结了一个关于update-script脚本语法的说明供大家参考研究,部分资料来源于网络我想,能够研究到这一步的童鞋,应该是相当的有耐心和毅力了所以直接就是文字的形式,不搞太花哨的东西了还没有研究到这一步的童鞋,收藏吧,有朝一骂人不好也会用到的进入正题本帖隐藏的内容函数名称: mount函数语法: mount(fs_type, partition_type, location, mount_point)参数详解:fs_type-----------------"yaffs2" 或 "ext4"partition_type----------"MTD" 或 "EMMC"location-----------------分区(partition) 或驱动器(device)mount_poin------------挂载文件系统的目标文件夹(target folder to mount FS)作用解释: 挂载一个文件系统到指定的挂载点返回值: 挂载成功则返回挂载点,失败返回null函数示例: mount("MTD", "system", "/system");挂载system分区,设置返回指针"/system”mount("vfat", "/dev/block/mmcblk1p2", "/system"); 挂载/dev/block/mmcblk1p2,返回指针"/system”函数名称: is_mounted函数语法: is_mounted(mount_point)参数详解: mount_point-----------字符串,检查是否已经挂载的挂载点作用解释: 检查文件系统是否挂载返回值: 挂载成功则返回挂载点,失败返回null函数示例:函数名称: unmount函数语法: unmount(mount_point)参数详解: mount_point-----------字符串,要解除挂载的挂载点作用解释: 解除文件系统挂载返回值: 解除挂载成功则返回挂载点,失败返回null函数示例: unmount("/system"); 卸载/system分区函数名称: format函数语法: format(fs_type, partition_type, location)参数详解: fs_type-----------------字符串,数据为"yaffs2" 或 "ext4"partition_type----------字符串, "MTD" 或 "EMMC"location-----------------字符串, 分区(partition) 或驱动器(device)作用解释: 格式化为指定的文件系统函数示例: format("MTD", "system");格式化system分区函数名称: delete函数语法: delete(file1, file2, ..., fileN)参数详解: 字符串,要删除的文件作用解释: 删除一个文件。

最少指定一个文件;多个文件可以做为多个参数指定函数示例: delete("/data/zipalign.log");删除文件/data/zipalign.log函数名称: delete_recursive函数语法: delete_recursive(dir1, dir2,...,dirN)参数详解: 字符串,要递归删除的目录作用解释: 删除文件夹及其包含的所有内容。

最少指定1个目录;多个目录可以做为多个参数指定函数示例: delete_recursive("/data/dalvik-cache");删除文件夹/data/dalvik-cache函数名称: show_progress函数语法: show_progress(frac, sec)参数详解:frac----------------------进度完成数值Sec----------------------总秒数作用解释: 显示在Recovery系统中进度函数示例: show_progress(0.1, 10);show_progress下面的操作可能进行10s,完成后进度条前进0.1(也就是10%)函数名称: set_progress函数语法: set_prograss(frac)参数详解: frac---------------------进度数值函数示例:函数名称: package_extract_dir函数语法: package_extract_dir(package_path, destination_path)参数详解:package_path----------字符串,升级包内要提取的目录destination_path--------字符串,提取文件的目标目录作用解释: 提取升级包内目录中的所有文件到指定的目标目录函数示例: package_extract_dir("system", "/system");释放ROM包里system文件夹下所有文件和子文件夹至/system函数名称: package_extract_file函数语法: package_extract_file(package_path) 或 package_extract_file(package_path, destination_path)参数详解:package_path----------字符串,升级包内要提取的文件destination_path-------字符串,提取文件的目标目录作用解释: 提取升级包内的单个文件到指定的目标目录函数示例: package_extract_file("my.zip", "/system");解压ROM包里的my.zip文件至/system函数名称: file_getprop函数语法: file_getprop(file, key)参数详解:file----------------------字符串,要检查的文件名Key----------------------字符串,返回数据中的文件的键名字作用解释: 在格式"key"="value"的文件中取得文件属性值函数示例:函数名称: symlink函数语法: symlink(target, src1, src2, ..., srcN)参数详解:target-------------------字符串,符号链接的目标srcX ---------------------字符串,要创建的符号链接的目标点作用解释: 在创建新的符号链接之前,要断开已经存在的符号链接函数示例: symlink("toolbox", "/system/bin/ps");建立指向toolbox的符号链接/system/bin/ps函数名称: set_perm函数语法: set_perm(uid, gid, mode, file1, file2, ..., fileN)参数详解:uid----------------------用户ID(user id)Gid----------------------用户组ID(group id)Mode--------------------权限模式(permission mode)fileX---------------------要设置许可的文件(file to set permission on)作用解释: 设置单个文件或一系列文件的权限,最少指定1个文件,前4个参数是必须的函数示例: set_perm(0,2000,0550, "system/etc/init.goldfish.sh");设置手机system中的etc/init.goldfish.sh的用户为root,用户组为shell,所有者以及所属用户组成员可以进行读取和执行操作,其他用户无操作权限)这里0代表用户为root2000代表用户组为shell我们来说明0550这组数据,这组数据的最后三位550,分别代表“所有者\组用户\其他用户”的权限,也就是我们在RE管理中“用户\群组\其他”三行。

我们以XXX来表示这三组权限,其中:×=4 读的权限×=2 写的权限×=1 执行的权限我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。

所以数字属性的格式应为3个从0到7的八进制数。

例如,如果想让某个文件的属主有"读/写"二种权限,需要把4(可读)+2(可写)=6(读/写)。

若要rwx属性则4+2+1=7;若要rw-属性则4+2=6;若要r-x属性则4+1=5。

常用修改权限的命令:Set_perm 0 0 0600 ××× (只有所有者有读和写的权限)Set_perm 0 0 0644 ××× (所有者有读和写的权限,组用户只有读的权限)Set_perm 0 0 0700 ××× (只有所有者有读和写以及执行的权限)Set_perm 0 0 0666 ××× (每个人都有读和写的权限)Set_perm 0 0 0777 ××× (每个人都有读和写以及执行的权限)函数名称: set_perm_recursive函数语法: set_perm_recursive(uid, gid, dirmode, filemode, dir1, dir2, ...dirN)参数详解:uid----------------------用户ID(user id)Gid----------------------用户组ID(group id)Dirmode----------------指定目录内的目录的权限Filemode---------------指定目录内的文件的权限dirX---------------------要设置权限的目标作用解释: 设置单个目录或一系列目录的里面的所有文件的权限,最少指定1个目录,5个参数都是必须的函数示例: set_perm_recursive 0 0 0755 0644 SYSTEM:app;设置手机system/app文件夹及其中文件的用户为root,用户组为root,app文件夹权限为所有者可以进行读、写、执行操作,其他用户可以进行读取和执行操作,其中的文件的权限为所有者可以进行读写操作,其他用户可以进行读取操作函数名称: getprop函数语法: getprop(key)参数详解: key---------------------字符串,想要系统返回的属性作用解释: 这个函数是用来返指定的属性的值。

相关文档
最新文档