通过前面的介绍我们对Android系统是如何编译生成的以及软件的运行机制有了一个大概的了解,用模拟器来模拟Android系统还是不够直观,还是使用真机来模拟一下更有感觉,这一期我们来使用小米3联通版(MI3W)来刷Android系统。
对于在Android平台上喜欢刷机的朋友应该应该都知道CyanogenMod,它将AOSP中goole强制嵌入的应用都去掉,让Android系统更加轻便和个性化,国内的小米,vivo,oppo当面都是通过修改CyanogenMod来推出自己的固件的,尤其是在Android4.x的年代,刷入CyanogenMod的固件后,由于一些没用的系统服务被精简掉,手机的处理速度可以比官方固件提高30%左右。
不过有个很遗憾的消息,在我写这篇博客的时候CyanogenMod的网站关闭了,2017年可能会以Lineage的名字出现。真得很痛心啊,我不是往者荣耀主义者,希望Android的发展可以像OpenWrt那样实现真正的社区化管理,期待2017年CyanogenMod从前倡导的精神以任何方式重生,我也愿意为其贡献一份微薄之力。
在无法下载到CyanogenMod官方原版的时候,我这里提供一个固件包,是我在2016年12月初下载的
https://pan.baidu.com/s/1slJCJ0L
cm-13.0-20160820-SNAPSHOT-ZNH5YAO0J0-cancro-recovery.img 文件为recovery文件,
cm-13.0-20160820-SNAPSHOT-ZNH5YAO0J0-cancro.zip 为固件程序。
因为这个固件不提供基带,但又要求基带版本在4.0以上,所以可以先刷一个完整的MIUI8然后再刷入CM的固件。
1.下载fastboot和adb工具:sudo apt-get install android-tools-fastboot android-tools-adb
2.首先将手机进入fastboot模式,按住音量- 键和开机键开机就可以进入,连接至电脑。
3.如果使用命令 fastboot devices 命令没有设备显示,则是usb设备的权限问题,解决办法可以参考
http://blog.csdn.net/maosidiaoxian/article/details/22661725
udev的.rules文件内容可以参考这里:
https://github.com/aggresss/PHDemo/blob/master/Tools/51-android.rules
4.使用命令 fastboot oem unlock #解锁bootloader
5.进入到刚才下载的CyanogenMod的recovery目录下,然后执行fastboot flash recovery cm-13.0-20160820-SNAPSHOT-ZNH5YAO0J0-cancro-recovery.img
6.按住音量+ 键和开机键开机就可以进入recovery模式
7.在recovery模式下Factory reset --> full factory reset 进行userdata和cache分区reset;
8.在recovery模式下Apply update --> Apply from adb,然后连接PC端,在PC中的固件的目录下输入: adb sideload cm-13.0-20160820-SNAPSHOT-ZNH5YAO0J0-cancro.zip 完成后重启即可。
到这里我们就把手机刷成了第三方固件,了解了刷机一般过程,下一期我们使用CyanogenMod的源码编译出一个可以刷机的固件。
对于刷机的zip格式的文件如果想研究里面的内容,可以将它们解压,这里将常用的system分区的解压方法放到下面,供大家参考。
====================================
system.new.dat 解压
sdat2img工具解压
Convert sparse Android data image (.dat) into filesystem ext4 image (.img)
https://github.com/xpirt/sdat2img/
https://github.com/xpirt/sdat2img/blob/master/sdat2img.py
example:
sdat2img.py system.transfer.list system.new.dat system.img
=====================================
system.img 解压
Android 中的 system.img 可能有是yaffs2 或者 ext 的文件系统。
file system.img 判断 文件类型
如果是ext4文件格式使用 simg2img 工具把system.img 转为为ext4 文件格式。
simg2img 在linux的adb工具目录下
simg2img system.img system.ext4.img
然后 mkdir data.out
mount -t ext4 -o loop system.ext4.img data.out