瑞芯微RK2818_android系统固件修改之固件解包、打包 | 少将全栈
  • 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

瑞芯微RK2818_android系统固件修改之固件解包、打包

点滴 admin 11年前 (2013-12-05) 6494次浏览 已收录 扫描二维码

在这之前,还是要说一下那句话:DIY有风险,刷机需谨慎!!!
建议最好在有机子官方固件的前提下再做DIY操作,以防变成砖头后还能用官方固件刷回去。刷机前请拔出TF卡并备份机子上所有自己有用的资料再刷机。

目录:

前言……………………………………………………………………………………..………
篇前随语………………………………………………………………………………..………
一、无官方固件的系统文件提取、解包…………………………..…………………
二、有官方固件的系统文件解包……………………………………..………………
2-1.Update.img解包………………………………………………… ………………..
2-2.System.img解密…………………………………………………… ……………..
2-3.system.img解包…………………………………………………… ……………..
2-4.Windows下的解包………………………………………………… ……………..
2-5.打包……………………………………………………………… … ……………..…
2-6.boot的解包、打包…………………………………………………… …………..
三、固件升级……………………………………………………………………………….

篇前随语:
 距离写第一篇2818的教程有一段时间了,在那之前几乎没有任何资料可找到或者说可供参考,所以写的东东都是灰常简单的。没想到短短的时间,各路高手都出招了,技术各有不同,玩法各有不同,能改动的不能改动的几乎都有人在研究,好不热闹。
有不少网友让我多写一些这方面的教程,如果时间允许,我也想啊,但是,一来呢,本人时间有限,工作中杂事比较多,业余时间也比较少,再者也只是对有兴趣的东东才会有动力多下些功夫去研究,还有就是,本人能力有也限,有些东东掌握的不全面,在一些高手前面就一菜鸟,所以不是比较有把握的都不敢放到上面来,以免误导别人。
下面介绍的内容以及方法不一定适合所有的RK281x机型,不同的机型一些资源不一定会相同。这里只是提供一个修改思路,仅供参考。
  本文涉及到的一些东东有些来源于网络,有些是参考网友的方法,有些甚至直接“拿来”用的,在此,先感谢lajidong提供的一些资源和方法,让我受益不少,再者也感谢一下我不知道名字却在此借用了他们技术的网友。

关于固件的修改,有些机子能找到相应的官方源文件,有些纯山寨机子,整个三无的产品,所以在这里,对这两种作简单介绍:
一是无官方固件的情况下进行文件提取;
二是有官方固件的情况下进行解包、打包。

一、无官方固件的系统文件提取、解包
在无官方固件情况下,能得到固件方法也有很多种,比如直接从机子里拷贝出来、用本机终端、用adb等等。这里简单的介绍两种方法进行固件提取:一是可以用之前那篇教程的方法,用91助手将文件提取出来然后直接进行修改。二是通过本机安装终端,用终端来备份固件,不过前提是需要Root。
用91助手提取文件的方法就不介绍了,在之前那篇文章里有作介绍,这里着重介绍用终端来备份出系统文件。
需准备的工具:Universal Androot.apk、ConnectBot_1.7.1_1.71gfy.apk、Superuser.apk
先将三个APK都安装上,然后运行Universal Androot,把Root temporary(Unroot after reboot)前的勾选上,点击“Root:-)”,完毕后退出,然后运行ConnectBot,在界面中点击左下角的SSH按钮,选择local,然后随便输入一个名字,出现的界面出现一个“$”和虚拟键盘,在界面中输入:
cat /proc/mtd
出现如下信息:
$ cat /proc/mtd
dev: size erasesizename
mtd0: 00002000 00000010 “misc”
mtd1: 00004000 00000010 “kernel”
mtd2: 00002000 00000010 “boot”
mtd3: 00004000 00000010 “recovery”
mtd4:0004000000000010 “system
mtd5: 0003a000 00000010 “backup”
mtd6: 0003a000 00000010 “cache”
mtd7: 00080000 00000010 “userdata”
mtd8: 00178000 00000010 “user”
mtd9: 00020000 00000010 “pagecache”
mtd10: 00020000 00000010 “swap”
列出了整机的分区信息,dev为分区设备号,显示共有11个分区,size为分区大小,name为分区名称。找到我们需要的分区的相息,比如我们此时需备份system的信息,那system的信息:mtd4:0004000000000010 “system”,即,第五个分区,大小为40000(16进制,换算成十进制=262144)。
输入su切换到root下,此时提示是否取得root权限,选择“允许”,再输入dd if=/dev/block/mtdblock4 of=/flash/system.img count=262144,因备份的文件比较大,要等一会后才提示备份完成,即可在用户盘中将备份的文件拷到电脑上进行修改了。
输入exit退出root,再次输入exit退出程序。
$ su
# dd if=/dev/block/mtdblock4 of=/flash/system.img count=262144
# exit
$ exit

这样就将system的分区备份出来了,也可按上面的办法将boot分区备份出来,以备用。 在这里不做过多的介绍了,有需要的同鞋可以参考附档中的一篇关于“rk固件提取”的文章,因为是在网上找到的,所以原作者是哪个就不清楚了,在这里借用一下他的资源,希望他不要介意咯。

二、有官方固件的系统文件解包
2-1.Update.img解包
将update.img放入“解包、打包工具”文件夹内然后在命令行模式输入:
AFPTool.exe -unpack update.img Temp
上述命令表示用AFPTool.exe将update.img解压至Temp文件夹下。
2-2.System.img解密
将TempImage内的system.img拷到“解包、打包工具”文件夹下,然后输入:
rkDecrypt system.img
即可将system.img文件解密,不解密的情况下是不能对system.img进行解包的。 (或将system.img直接拖至rkDecrypt.exe上也可直接解包。)解密之后才是标准的cramfs格式,才能用相应工具解包。
2-3.system.img解包
解密后的system.img现在可以用cramfsck进行解包了,在Linux下对工具包内的system.img进行解包:
mkdir system
sudo mount -t cramfs -o loop system.imgsystem
tar cvzf system.tgz system
sudo umount system
rm -r system
tar xzvf system.tgz
当然,也可用cramfsck来直接解包(cramfsck -x system system.img),但我以前在2808上测试时经常出现莫名的问题,所以后来已放弃这种解包方式了。
2-4.Windows下的解包
当然,现在也可以在Windows下也有工具可进行解包了,不过须在NTFS格式下才可以,且必须保证源文件是正确的,因为在WIN下的工具是不对system.img进行CRC校验的。通过上面的2-2.的步骤将之解包后,在命令行中输入:
pfn -p1 system.img
cramfsck_nocrc -xsystem system.img
即可在WIN下将system.img解包到“解包、打包工具”的“system”文件夹下了。

以上介绍了固件的解包工作的步骤,比较繁锁。在Win下我们可用批处理一键搞定所有操作:
AFPTool.exe -unpack update.img Temp
copy TempImagesystem.img .
rkDecrypt system.img
pfn -p1 system.img
rmdir /s /q system 2nul
cramfsck_nocrc -x system system.img

以上那些内容为对文件的提取、解包工作。剩下的工作就是对system文件进行编辑,例如,精减固件、美化等,可按“瑞芯微RK2808_安卓(android)系统固件包修改基础教程”中的方法进行修改即可。
2-5.打包
玩过2808的人就知道,打包成cramfs格式的img文件是非常简单的。所以,将system文件夹修改好了后,在 Linux系统下将之打包即可。代码:
mkcramfs system system_Nwe.img
为了便于区分,新生成的img为system_Nwe.img,将修改好的img改名为system.img后放入TempImage文件夹下,然后在命令行模式输入:
AFPTool.exe -pack Temp update_new.img
这样就将修改好的文件重新打包成升级包了。
同样,在Win下也可以进行打包,在命令行模式输入:
mkcramfs -q system system_new.img
copy system_new.img .TempImagesystem.img
pfn -p2 TempImagesystem.img
AFPTool.exe -pack Temp update_new.img

2818的解包、打包的方法和2808完全一样,唯一不同的就是,2818的system.img进行了加密,需要解密后才能继续操作。对于不太懂的同鞋可看一下“瑞芯微RK2808_安卓(android)系统固件包修改基础教程”,在这里只是增加了Windows下的相关操作,所以写的就比较简单了。

上面的解包、打包着重在于介绍其操作方法,只是提供一种解决思路,有需要的同学可以跟据我提供的“一键操作.bat”、“system、boot解包打包.bat”进行增、删,以便更适合自己使用。
重要说明:在Windows下对system.img进行解包、打包还是存在很大的不稳定性,比如改好后发现程序崩溃、3G dingle不能开打等莫名的问题,很有可能就是在解、打包过程中造成的。所以,在此强烈建议对system.img的操作还是在Linux下进行,以减少出错的可能性。也许是我RP不咋滴,唉。。。。
2-6.boot的解包、打包
Boot能修改的地方现在也越来越多了,故在此也放上其解包、打包的方法。 Boot.img也是cramfs格式,所以用2-3.的方法就可以正常解包,这里就不作介绍了,请参考2-3

Win下的解包,在命令行模式:
rmdir /s /q boot 2nul
cramfsck_nocrc -xboot TempImageoot.img

修改完boot后,打包稍麻烦些,要多增加一个步骤,要先将之打包成普通cramfs后再增加RK专门的CRC校验值,这样才能正常引导系统。
CRC的校验可以在Win下操作,在命令行模式:
mkcramfs -q boot boot.tmp
rkcrc boot.tmp TempImageoot.img
del /f /q boot.tmp

三、固件升级
固件升级,有三种方法:量产升级、用户升级和开发工具升级,前两种升级是将所有相关的文件打包成update.img后用工具升级。后面一种,可单独升级某一个文件,对于没有官方固件的情况下提取出来的文件,因为缺少相关的文件,所以没办法打包成update.img,用量产工具和用户工具就没办法对其升级了。所以只能使用开发工具来升级。
开发工具升级的好处就是,不用将全部文件都重新升一次,只需将其中修改过的文件重新升级即可,其它文件无需再将升级,比如,修改了boot.img后只升级它即可,修改了system.img后单独升级system.img即可。因为不用升级所有文件,对于修改后的固件测试,可大大的减少等待的时间。
以下对其进行简单的补充,
1.用开发工具单独升级某个文件后有时也会出现莫名的问题,比如测试时好的,重新开机后或者还原出厂设置后就出问题了。所以还是建议测试OK后再打包用量产工具或用户工具重新再升级一次较好。(主要针对有官方固件的同鞋,山寨机的就将就一下使用了。)
2.用开发工具升级是OK的,但打包后用量产工具升级过程中,校验时出现错误,一般都是HWDEF里system分区的size的问题,导致偏移量冲突,此时适当的修改一下system的size即可。

唉,死了不少脑细胞,感觉还是不太满意,不怎么通俗易读。暂时就这样吧,实在不行哪天兴致来了再发第三版。
教程中难免会有错误之处,欢迎指正!

locke

不设回复可见,沉了就沉了,沉了说明这教程写的不好。。。

喜欢 (2)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。