一、设备和环境

设备 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.img
resize2fs 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/system
sudo 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: ./parameter
Pack 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] <loader> <old image> <out image>
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

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

  1. 瑞芯微RK3128盒子刷机提示测试设备失败的解决方法:MASKROM模式

    设备:MSIDIGTAL-RM701 平台:瑞芯微RK3128 工具:AndroidTool_Release_v2.33 在刷入过第三方固件后再刷机,就遇到了测试设备失败的问题: 苦苦寻找了很多方法都 ...

  2. rk3128屏幕占空比参数设置_瑞芯微RK3128芯片怎么样 性能全面解读

    最近,笔者听说一款搭载瑞芯微RK3128芯片方案的盒子问市了,打听了一下才知道还真有其事,这款上市的RK3128盒子叫做开博尔M1,报价229元,这个价位在如今的四核网络机顶盒市场可谓是不多见,但是这 ...

  3. firmware linux 解包_官改固件解包打包 - 斐讯无线路由器以及其它斐迅网络设备 - 恩山无线论坛 - Powered by Discuz!...

    本帖最后由 eaglepeng 于 2020-3-11 15:23 编辑 前段时间想重新修改下官改固件logo,找到了一份Linux下简单的解包打包工具,后来在逛帖子看到另一个工具.现总结如下,需要的 ...

  4. 全志h3通用固件_全志H3固件解包打包方法

    imgrepacker (version 2.05 linux) LiveSuit's & PhoenixSuit's firmware image unpacker/packer (c) R ...

  5. 嵌入式JFFS2固件解包打包

    环境:Ubuntu 20.04 1.安装解包工具 sudo apt-get install mtd-tools 2.在Ubuntu上挂载MTD设备 1).创建MTD设备 sudo modprobe - ...

  6. 瑞芯微RK3128芯片手册,RK3128 datasheet技术资料

    1 Introduction RK3128是一款用于低端四核平板电脑和TV-Box的高性能应用处理器.特别是对于H.265 1080 p电视机箱来说,它是一个高集成度和高竞争力的Bom成本SOC.集成 ...

  7. 搭建瑞芯微rk3128本地android代码服务器

    从供应商那里拿到的rk3128android 4.4的源码包.解压前压缩包大概5G,通过命令解压后发现只有一个隐藏的.repo 目录大小4096. 然后执行命令 repo sync -l 意思是从本地 ...

  8. 瑞芯微RK3128-微信Airkiss2.0配网功能调试及实现

    原址 越来越多的智能硬件设备实现了简易的配网功能,微信硬件平台推出了Airkiss技术,详细的关于Airkiss的介绍可以参考微信硬件平台开发者心:微信硬件平台Airkiss 关于AirKiss的实现 ...

  9. 瑞芯微RK3399K简单介绍及烧写镜像

    瑞芯微RK3399K简单介绍及烧写镜像 文章目录 瑞芯微RK3399K简单介绍及烧写镜像 1. 前言 2. 官网及相关资料 3. 烧写固件所需软件 4. 直接烧写单一固件步骤 5. 固件文件 6. W ...

最新文章

  1. 在request.GET中捕获url参数
  2. 上交大实时姿态估计AlphaPose
  3. mysql基础(九) 索引和视图
  4. java 内存泄漏 工具_Java剖析工具JProfiler入门使用教程:查找内存泄漏的方法
  5. 你知道这个C#开发跨平台APP的样例介绍开源项目吗?
  6. Creating Apps With Material Design —— Creating Lists and Cards
  7. 【插件发布】JAVA微服务框架,Jeecg-P3-Base-System 1.0.0 插件开源发布
  8. 引领架构创新之路第八届系统架构师大会撼世来袭
  9. linux桥接命令virsh,CentOS6.3 KVM如何设置网卡为桥接模式
  10. 清除Eclipse工作空间列表
  11. VOFA+ 串口调试助手
  12. 嵌入式驱动开发遇到version magic不匹配解决办法
  13. python接收163邮件以及下载附件(以163邮箱为例)
  14. discuz分类信息模版PHP,Discuz 社区分类信息模板使用教程
  15. 2019年嵌入式前景如何?现在学习是否太晚?
  16. 老男孩--你记得当初的梦想吗
  17. 使用shape绘制阴影图层阴影效果
  18. UE战棋游戏的制作流程(使用GAS来制作技能系统)
  19. S3C2440的中断体系结构
  20. greenplum查询表结构java_Greenplum小把戏 - 几个常用数据库对象大小查询SQL

热门文章

  1. scrum_7年前,我开始使用Scrum
  2. 基于同IP不同端口访问不同页面
  3. androidstudio加载矢量图
  4. 一步一步学android之控件篇——ListView自定义显示数据格式
  5. yii之PHPExcel导出
  6. 多元线性回归、逐步回归、逻辑回归的总结
  7. asp 检查黑名单_c# asp.net ip黑名单
  8. grep匹配带空格字符串以及正则使用
  9. changyan main.php,织梦dedecms商业教程 dedecms5.7二次开发之常用函数列表及所在文件位置...
  10. Linux常用操作bash