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

本文深入解析了ROM刷机脚本的工作流程,包括wipe操作、格式化与挂载文件系统、权限设置及内核引导文件刷入等关键步骤,旨在帮助读者理解刷机过程中的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文只有部分内容,请到一牛网阅读全文:
http://www.16rd.com/blog-17140-1294.html

这个过程是可选的,有的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”);

 

本文只有部分内容,请到一牛网阅读全文:
http://www.16rd.com/blog-17140-1294.html

转载于:https://my.oschina.net/cy2/blog/730257

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值