前言

在上一篇文章中,已经成功下载谷歌官方的Android11源码,并且编译成功。11源码 接下来就需要尝试把编译好的镜像烧录到设备中,目标设备是谷歌推出的一款手机Pixel 2

预计工作如下:
1、下载配套的设备驱动
2、将驱动文件集成进源码,编译镜像文件
3、使用烧录工具烧写镜像到设备中

下载驱动

烧写特定的版本,且保证设备能够正常工作,需要下载对应的设备驱动,可以参考官网给出的链接进行下载 Pixel2 设备驱动

android源码编译 mtk Android源码编译烧烤Pixel_服务器


下载完成后会得到google和qcom两个tgz压缩文件,解压后生成对应的两个sh文件

android源码编译 mtk Android源码编译烧烤Pixel_android_02


将sh文件拷贝到编译服务器临时目录,执行后会生成vendor文件夹

android源码编译 mtk Android源码编译烧烤Pixel_ubuntu_03

重编系统生成可适配设备的镜像文件

将vendor文件夹完整拷贝到Android 11源码的根目录下,重新编译生成镜像文件

android源码编译 mtk Android源码编译烧烤Pixel_Android_04

烧录镜像至Pixel 2设备

这一步的操作尤其关键,开始也参考了网上很多方法,基本上分为两种,一种是整体烧录img文件,另一种是分别烧录img文件。我使用的是window 7操作系统,编译服务器是在ubuntu系统下,因此,需要将img文件拷贝至本地目录中来。
第一种,整体烧录img文件

adb reboot bootloader
fastboot flashall -w

第二种,分别烧录img文件

adb reboot bootloader
fastboot flash boot_a boot.img
fastboot flash boot_b boot.img
fastboot flash system system.img
fastboot flash system_b system_other.img
fastboot flash vendor vendor.img

但是不知道是哪里配置不对,当烧写完镜像后,设备启动会一直卡在bootloader界面,提示ERROR: Slot Unbootable: Load Error错误。

于是尝试使用另外一种方法,先使用官方的烧录工具烧录原厂镜像包试试看能否成功。

到指定链接下载原厂烧录镜像包,里面工具齐全,一键就可以进行烧录:原厂烧录工具 同样,此步骤也需要找到与前面镜像匹配的版本

android源码编译 mtk Android源码编译烧烤Pixel_服务器_05


下载完成后,解压出工具包会得到如下文件

android源码编译 mtk Android源码编译烧烤Pixel_ubuntu_06


此时,我们连接usb线束,然后执行adb reboot bootloader命令使设备进入bootloader状态,双击运行 “flash-all.bat” 文件即可自动进入烧录状态,等待一段时间后即可完成烧录,手机自动重启,运行官方的Android 11系统。

android源码编译 mtk Android源码编译烧烤Pixel_服务器_07


当然,我们的目标是烧录自己编译的Android 11系统到Pixel 2设备上,所以上面的内容还没有结束。既然现在我们已经可以有方法烧录镜像到设备中,那么我们思考,如果将原厂的镜像文件替换成自己编译的镜像文件,是不是也可以成功烧录呢?

android源码编译 mtk Android源码编译烧烤Pixel_android源码编译 mtk_08


如图所示,左边是谷歌原厂镜像包中的img文件,右边是服务器上编译生成的out目录下img文件。使用右边的img文件替换原厂包内容,执行之前的bat脚本进行烧录,最终成功将自己编译的系统烧录至Pixel 2设备中。

这里有一点需要提醒,就是在替换img文件的时候,原厂镜像包的img文件是集中打包在一个zip文件中的,需要解压出文件夹之后再替换里面的文件,然后再重新压缩成zip包,这样才能校验通过,继而烧录成功。之前我就是直接拖拽要替换的文件到zip包中,烧录的时候会提示crc32校验不匹配而失败。

总结

第一次成功将自己编译的镜像包烧录到手机设备当中,还是小有收获的,也为后面学习framework知识做好了铺垫,希望不久的将来自己也能够在Android系统层面有所建树,加油!