虽然目前高安卓机型官改包大都采用fast模式线刷或者卡线一体的方式来刷机。但大都有必要了解下卡刷必须的脚本updater-script文件是什么原理写入机型,打开一个官方卡刷固件,一般都有以下文件组成
卡刷包文件基本组成
然后在META-INF\com\google\android\就有这个脚本
简单的说就是让卡刷包里的文件具体要写入那个分区或者文件权限等等。打开这个文件查看。一个第三方卡刷包脚本为例:
getprop("ro.product.device") == "tiffany" || abort("E3004: This package is for \"tiffany\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Target: xiaomi/tiffany/tiffany:8.1.0/OPM1.171019.019/V11.0.3.0.ODBCNXM:user/release-keys");
show_progress(0.200000, 10);
package_extract_file("boot.img", "/dev/block/bootdevice/by-name/boot");
# ---- radio update tasks ----
ui_print("Patching firmware images...");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
ui_print("Patching system image unconditionally...");
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
abort("E1001: Failed to update system image.");
ui_print("刷写权限");
run_program("/sbin/busybox", "mount", "/system");
run_program("/sbin/busybox", "mount", "/persist");
delete_recursive("/persist/fdsd");
package_extract_dir("supersu", "/tmp/supersu");
run_program("/sbin/busybox", "unzip", "/tmp/supersu/supersu.zip", "META-INF/com/google/android/*", "-d", "/tmp/supersu");
run_program("/sbin/busybox", "sh", "/tmp/supersu/META-INF/com/google/android/update-binary", "dummy", "1", "/tmp/supersu/supersu.zip");
package_extract_dir("system", "/system");
show_progress(0.100000, 2);
set_progress(1.000000);
描述下卡刷脚本语句基本意义
其一;验证机型型号。不对应禁止刷入
其二:show_progress(0.200000, 10);的意思就是 控制刷机时间和进度条,0 是自动,第二个都写0 就是了,前边的0.2是 进度条前进20%
其三:package_extract_file("boot.img", "/dev/block/bootdevice/by-name/boot");以及后续的同类脚本都是讲卡刷包内的分区对应写入手机分区。例如上面是讲卡刷包内boot.img写入到手机系统boot分区里
其四:卡刷包内所有 show_progress....字样都是显示卡刷进度条的
其五;卡刷包内format字样都是格式化对应分区的。例如format("ext4", "EMMC", "/dev/block/mmcblk0p12", "0");格式化system分区
其六:mount字样是挂载分区的。例如mount("ext4", "EMMC", "/dev/block/mmcblk0p12", "/system");挂载system分区
其七:set_perm字样是权限设置的。例如
set_perm(0,2000,0550, "system/etc/init.goldfish.sh")。设置手机system中的etc/init.goldfish.sh的用户为root。用户组为shell,全部者以及所属用户组成员能够进行读取和运行操作。其它用户无操作权限)
这里0代表用户为root
2000代表用户组为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 ××× (每一个人都有读和写以及运行的权限)
如
-rw------- (600) -- 只有用户有读写权限。
-rw-r--r-- (644) -- 只有用户有读写权限;而组用户和其他用户只有读权限。
-rwx------ (700) -- 只有用户有读、写、执行权限。
-rwxr-xr-x (755) -- 用户有读、写、执行权限;而组用户和其他用户只有读、执行权限。
-rwx--x--x (711) -- 用户有读、写、执行权限;而组用户和其他用户只有执行权限。
-rw-rw-rw- (666) -- 所有用户都有文件读、写权限。这种做法不可取。
-rwxrwxrwx (777) -- 所有用户都有读、写、执行权限。更不可取的做法。
其八:run_ program字样是标示要运行卡刷包内***程序,例如run_program("/sbin/busybox", "unzip", "/tmp/supersu/supersu.zip
其九:unmount字样是卸载分区的意思。例如unmount("/system");是卸载system分区
unmount("/cust");是卸载cust分区
其十:Delete是删除的意思。例如delete("system/app/123.apk");是删除系统分区下的123.apk
其十一:set_perm_recursive是给文件夹权限.设置单个目录或一系列目录的里面的所有文件的权限,最少指定1个目录,5个参数都是必须的。例如et_perm_recursive 0 0 0755 0644 SYSTEM:app;设置手机system/app文件夹及其中文件的用户为root,用户组为root,app文件夹权限为所有者可以进行读、写、执行操作,其他用户可以进行读取和执行操作,其中的文件的权限为所有者可以进行读写操作,其他用户可以进行读取操作
-----------------------------------------------------------------------------------------------------------------------------
新机型线卡一体
目前新机型的第三方官改固件类似。里面的卡刷脚本性质都是一样的。无非作者不同。略有差异。
目前官方新机型卡刷固件内都是payload.bin格式。这类文件虽然修改后可以重新打包payload.bin格式。但不如直接fast线刷或者做成第三方卡刷包来的方便
以上都是一些常用卡刷脚本的使用语句。在很多卡刷补丁和卡刷固件可以进行对比。都是大同小异的。