文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

记录一次瑞芯微rk3128固件解包打包过程:以添加root权限为例

2023-09-28 21:58

关注

一、设备和环境

设备MSIDIGTAL-RM701
平台瑞芯微RK3128
环境Windows 11 Subsystem Ubuntu 20.04.5 LTS

 

 二、工具

在打包解包的过程中,我们至少需要使用瑞芯微官方提供的三个工具:afptoolimg_unpackimg_maker。可以自己通过源码编译,也可以使用我文章后面附上的成品,架构为linux_amd64

#拉取源码git clone 'https://github.com/TeeFirefly/rk2918_tools.git'#进入目录cd rk2918_tools/#生成make#将工具复制到/usr/lcoal/bin以方便调用sudo cp afptool img_unpack img_maker mkkrnlimg /usr/local/bin

三、解包

1.解包release_update.img

从网上下载到的成品固件,我们称之为release_update.img,使用工具img_unpack将其解包为loader.imgupdate.img

#当前目录存放有:release_update.img#第一个参数指定固件,第二个参数指定保存目录img_unpack release_update.img img

2.解包update.img

通过afptool -unpackupdate.img解包出各个分区镜像:

#进入img目录cd img#当前目录内有:loader.img  update.img#使用afptool对update.img进行解包#指定工作模式,解包为-unpack,打包为-pack;第一个参数指定镜像位置;第二个参数指定保存目录afptool -unpack update.img update

3.目录结构

至此,解包已经完成,返回上一级目录,列出目录结构应是如此:

jamaskii@HP-445R-G6:/mnt/d/rk3128/demo/img$ cd ../jamaskii@HP-445R-G6:/mnt/d/rk3128/demo$ tree ..├── img│   ├── loader.img│   ├── update│   │   ├── Image│   │   │   ├── MiniLoaderAll.bin│   │   │   ├── boot.img│   │   │   ├── kernel.img│   │   │   ├── misc.img│   │   │   ├── parameter.txt│   │   │   ├── recovery.img│   │   │   ├── resource.img│   │   │   ├── system.img│   │   │   └── uboot.img│   │   ├── RESERVED│   │   └── package-file│   └── update.img└── release_update.img3 directories, 14 files

四、修改

本次以给固件加入ROOT权限为例,阐述修改system分区的一些步骤。

1.镜像扩容

在修改Image/system.img的内容之前,首先需要对其进行扩容,不然在后续的操作中大概率会遇到空间不足的错误警告:

jamaskii@HP-445R-G6:/mnt/d/rk3128/demo/img/update$ sudo cp '/mnt/d/rk3128/supersu/armv7/su' '/mnt/system/xbin'cp: error writing '/mnt/system/xbin/su': No space left on device

以对其扩容128MB为例:

#填充128MB数据dd if=/dev/zero bs=1M count=128 >> Image/system.img#检查镜像错误并修正、扩容e2fsck -f Image/system.imgresize2fs Image/system.img

2.镜像挂载

解包出来的Image/system.img本质上是一个ext4文件系统的镜像,所以修改的思路是将其挂载在/mnt/system,当然其他位置也可以,然后进去对内容进行修改:

#创建挂载点sudo mkdir /mnt/system#进入img/update/目录cd img/update/#当前目录内有:Image  RESERVED  package-file#将Image/system.img挂载到/mnt/systemsudo mount Image/system.img /mnt/system

3.增加su二进制文件

到SuperSU官网下载其最新的zip包,解压,查看/META-INF/com/google/android/update-binary脚本,分析需要进行哪些操作。

首先是根据判断API等级:

# binary        ARCH/path   build type      API## arm-v5te      arm         ndk non-pie     7+# x86           x86         ndk non-pie     7+## x86           x86         ndk pie         17+   (su.pie, naming exception)# arm-v7a       armv7       ndk pie         17+# mips          mips        ndk pie         17+## arm64-v8a     arm64       ndk pie         20+# mips64        mips64      ndk pie         20+# x86_64        x64         ndk pie         20+

RK3128属于arm-v7,所以匹配API17+

然后查看对应的操作有哪些。由于篇幅限制,这里只节选API17+部分:

# API   source                        target  chmod## 7-19  common/Superuser.apk          /system/app/Superuser.apk           0644# 20+   common/Superuser.apk          /system/app/SuperSU/SuperSU.apk     0644## 17+   common/install-recovery.sh    /system/etc/install-recovery.sh     0755# 17+     /system/bin/install-recovery.sh     0755## 7+    ARCH/su                       /system/xbin/su                     *3# 7+      /system/bin/.ext/.su                *3# 17+     /system/xbin/daemonsu               0755# *3: 06755 if API < 18, 0755 if API >= 18## 17+   common/99SuperSUDaemon *6     /system/etc/init.d/99SuperSUDaemon  0755# 17+   'echo 1 >' or 'touch' *7      /system/etc/.installed_su_daemon    0644# *6: only place this file if /system/etc/init.d is present# *7: the file just needs to exist

五、打包

首先需要将修改后的分区卸载:

sudo umount /mnt/system

1.打包新的update.img

#当前目录内有Image  RESERVED  package-file parameter#设定工作模式为打包-pack,第一个参数为解包后的目录(包含Image/和package-file);第二个参数为保存位置afptool -pack . ../update_new.img

如果打包工具抛出如下错误:

jamaskii@HP-445R-G6:/mnt/d/rk3128/demo/img/update$ afptool -pack . ../update_new.img------ PACKAGE ------Can't open file: ./parameterPack failed

则是在当前目录内找不到parameter,我们需要将Image/parameter.txt复制到当前目录,并命名为parameter

cp Image/parameter.txt parameter

2.打包新的release_update.img

#回到上级目录cd ../#此时目录内有loader.img  update  update.img  update_new.img#其中update_new.img是我们新打包出来的镜像#设置芯片类型为rk3xx系列,第一个参数为loader.img位置;第二个参数为update.img位置;第四个参数为保存位置img_maker -rk31 loader.img update_new.img ../release_update_new.img

说一下这里的打包工具img_maker,看下他的帮助信息:

usage: img_maker [chiptype]   chiptype:    -rk29    -rk30    -rk31    -rk32    -rk33If chiptype is missing, it is default to -rk32.

一定要记得指定芯片类型,如果忘记了,则按默认的rk32xx系列打包。到刷机时如果目标设备不是rk32xx,则会验证出错。

打包完成,我们就得到了新的固件'../release_image_new.img',可以用这个固件进行刷机了。

六、值得注意的点

1.区分release_update.imgupdate.img

前者是直接用来刷机的固件,后者仅仅包含各个分区的镜像文件。他们的关系如图:

2.在打包release_update.img时记得指定芯片类型

否则做出来的包可能会导致刷机失败。

七、附件

工具:[蓝奏云]rk3128_firmware_tools_linux_amd64.zip

来源地址:https://blog.csdn.net/u013538358/article/details/128890082

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯