解析谷歌官方刷机包结构

自己编译过源码的人一定都知道,编译成功之后/out目录下会有相应的输出文件,典型的就是那些img镜像文件,编译成功后的结晶,大部分没有真机的就可能直接模拟器打开了,但是对我来说,模拟器真的是太鸡肋了,可能是配置原因吧,虚拟机根本拍不起来,慢的一批,那就只有刷到真机那才是真正的流畅啊,同志们,那么重点就来了,刷机要刷什么呢?输出的文件有哦那么多img,怎么个刷法?

先看看编译成功后的几个重要文件:

解析谷歌官方刷机包结构_第1张图片

在generic/obj/APPS目录中包含了各种JAVA应用,与common/APPS相对应,但是已经打成了APK包。   

system目录是主要的文件系统,data目录是存放数据的文件系统。   

obj/SHARED_LIBRARIES中存放所有动态库。  

obj/STATIC_LIBRARIES中存放所有静态库。   

几个以img为结尾的文件是几个目标映像文件,其中ramdisk是作为内存盘的根文件系统映像,它会在kernel 启动的时候,以只读的方式被 mount , 这个文件中只是包含了 /init 以及一些配置文件,这个ramdisk 被用来调用init,以及把真正的root file system mount 起来。system.img是主要文件系统的映像,android 的framework,application 等等,会被挂接到 "/" 上,包含了系统中所有的二进制文件,userdata.img将会被挂接到 /data 下,包含了所有应用相关的配置文件,以及用户相关的数据 。这几个image文件是运行时真正需要的文件。 vendor是真机需要的各种驱动文件,sim卡、蓝牙等驱动文件

输入的步骤,参见上一篇文章的刷机部分

大致就是

  1. 进入bootloader
  2. 解设备锁
  3. 一次性将img全刷入   or    单独将每一个img刷入
  4. 重启bootloader 进入系统

我们再来看看官方给出的刷机包,下载完是个zip包:

这个zip包里面有几个文件:

 解析谷歌官方刷机包结构_第2张图片

逐个对应:  

   |-- bootloader镜像,官方会先刷入这个
   |-- windows下的刷机脚本
   |-- linux、mac下的刷机脚本
   |-- 只刷入基本的脚本,只包含bootloader和radio
   |-- 系统镜像打成的zip包
   |-- radio镜像 

flash-all.sh文件脚本:

fastboot flash bootloader bootloader-bullhead-bhz10k.img  #刷入指定版本的bootloader
fastboot reboot-bootloader                                #重启bootloader
sleep 5                                                   #休息5秒
fastboot flash radio radio-bullhead-m8994f-2.6.30.0.68.img#刷入radio
fastboot reboot-bootloader                                #重启bootloader
sleep 5
fastboot -w update image-bullhead-mmb29k.zip              #刷入zip包里面的所有img镜像

flash-base.sh只比flash-all.sh少了最后一句,没有刷入系统镜像而已.

看看系统镜像zip包,打开看看里面是什么:

解析谷歌官方刷机包结构_第3张图片

这里面是系统的各种镜像,其中android-info.txt文件:

require board=bullhead                       #指定了android系统使用的真机版本
require version-bootloader=BHZ10r            #指定了bootloader版本,只是刷入真机需要检查的
require version-baseband=M8994F-2.6.32.1.13  #指定了radio版本,刷入系统前需要检查版本是否和真机一致

这里就指定了外面的版本必须和这个一致 

到这里可以看到,官方把直接编译出来的各种img打包成zip包,然后一次性将这些包全部刷入真机,这和我们手动刷入真机的效果是一样的,只不过官方放出来的刷机包是打过包的,可以自动化执行脚本,一次性安装完毕.

官方先刷入基本的bootloader、radio就是外面的两个镜像,然后再刷入系统镜像,其中android-info.txt中指定了目标真机的版本、bootloader、radio的版本

到这就明白了官方刷机包的结构了,如果自己想把自己编译的android系统镜像做成刷机包,就可以相应的替换掉系统zip包里面的各种镜像,然后直接运行脚本就OK了!

你可能感兴趣的:(Android)