Android系统编译之AOSP刷机

1.引言

19年加入一家生产机顶盒的公司,第一次接触到Android 系统相关的知识。拓宽了我职业知识面。让我知道了原来编译系统可以在服务器上进行;知道了framework开发日常工作内容;知道使用串口刷机;知道使用一些常用的Linux命令和Linux工具。20年又加入了一家Android TV 开发公司。再次接触到Android系统编译的知识。系统编译知识对我而言充满了神秘感。像一个披着红布的新娘,坐着自己的面前,等待着我去掀开她的头巾。内心充满了好奇和激动。今天正式开启这块内容的学习,解锁内心的好奇。

2.开发环境

操作系统: Windows 10
远程服务器 ubantu 18.04
手机 Pixel
ssh工具 xshell
网络环境 能翻墙访问google

3.源码下载

参考:android官网下载指导

  • 在ubantu上 安装并初始repo客户端

    repo介绍,使用参考链接:https://source.android.com/setup/develop https://source.android.com/setup/develop/repo

  • 运行 repo init 获取最新版本的 Repo 及其最新的问题修复。清单文件指定了 Android 源代码中包含的各个代码库位于工作目录中的什么位置,您必须为该清单指定一个网址。

    repo init -u https://android.googlesource.com/platform/manifest
    

    因为我们用的是Pixel手机,所以要设置对应的代码分支。请参阅源代码标记和 build。

    最终运行的是:repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r5
    
image-20201129124539154.png

  • 同步代码 执行命令:repo sync ,同步命令行会有如下提示:

    Updating files: 100% (1898/1898), done.
    Updating files: 100% (2018/2018), done.latform/system/ca-certificatesUpdating files:  79% (1614/2018)
    Updating files: 100% (972/972), done.
    Updating files: 100% (1778/1778), done.latform/system/tools/syspropUpdating files:  93% (1660/1778)
    Updating files: 100% (161/161), done. platform/tools/currysrcUpdating files:  63% (103/161)
    Updating files: 100% (18/18), done.
    Checking out projects: 100% (733/733), done.
    repo sync has finished successfully.
          
    

假如不能翻墙,就通过清华镜像,按照官网的步骤一步一步执行即可。千万要注意同步的代码分支,一定要和刷机手机相匹配

4.下载驱动

官方驱动文档

因为我下载的是android-10.0.0_r5, 对应的build为 QP1A.191005.007.A1

image-20201129150038228.png

将这俩个文件下载下来之后,解压得到如下俩个sh:

extract-google_devices-sailfish.sh
extract-qcom-sailfish.sh

这个俩个sh最终生成vendor文件夹。是用bash命令写的。所以我们也得用bash去执行。但是在windows,运行会提示不成功。得在ubantu上运行

bash extract-google_devices-sailfish.sh
bash extract-qcom-sailfish.sh

运行成功,提示如下:并且得到一个vendor文件夹

Type "I ACCEPT" if you agree to the terms of the license: I ACCEPT

vendor/
vendor/google_devices/
vendor/google_devices/sailfish/
vendor/google_devices/sailfish/android-info.txt
vendor/google_devices/sailfish/BoardConfigPartial.mk
vendor/google_devices/sailfish/proprietary/
vendor/google_devices/sailfish/proprietary/vendor.img
vendor/google_devices/sailfish/device-partial.mk
vendor/google_devices/marlin/
vendor/google_devices/marlin/BoardConfigVendor.mk
vendor/google_devices/marlin/device-vendor-sailfish.mk

5.编译源码

官方文档

  • 设置环境,使用 envsetup.sh 脚本初始化环境:

    source build/envsetup.sh
    
  • 选择编译目标

    lunch aosp_sailfish-userdebug(因为用的是pixel设备)
    

    因为我用的是pixel设备,所以需要编译aosp_sailfish。参考选择设备 build

  • 启动编译

    make -j32
    

6.FastBoot刷机

  • bootLoader介绍

    bootLoader是供应商专有的映像,负责在设备上启动内核。它会监护设备状态,负责初始化可信执行环境 (TEE) 以及绑定其信任根。

    bootLoader由许多部分组成,包括启动画面。要开始启动,bootLoader可能会直接将一个新映像刷写到相应的分区中,也可能会使用 recovery 开始重新刷写过程,该过程与 OTA 的操作过程一致。一些设备制造商会创建多bootLoader,然后将它们组合到一个 bootloader.img 文件中。

    最重要的是,bootLoader会在将执行工作移到内核之前先验证 boot 分区和 recovery 分区的完整性,并显示启动状态部分中指定的警告。

    解锁bootLoader官方教程

  • fastboot 介绍

    Fastboot,英语翻译意思是快速启动。 在安卓手机中fastboot是一种比recovery更底层的刷机模式(俗称引导模式)。 就是使用USB数据线连接手机的一种刷机模式。 相对于某些系统(如iOS)卡刷来说,线刷更可靠,安全。

进入fastboot有俩种方式:

  1. 在关机的情况下,同时按下power键和音量键,在boot驱动界面 手机插上USB线,进入CMD命令:

    fastboot devices  -- 查看设备是否连上
    
  1. 在开机情况下,手机插上USB线,进入CMD命令:

    adb reboot bootloader              -- 进入fastboot模式
    fastboot devices                 -- 查看设备是否连上
    

将服务器上的img,拷贝到本地,打开命令行执行下面的步骤:

fastboot  flashing  unlock 
fastboot  flash  boot  E:\aosp\boot.img
fastboot  flash  ramdisk E:\aosp\ramdisk.img 
fastboot  flash  ramdisk-recovery E:\aosp\ramdisk-recovery.img 
fastboot  flash  system  E:\aosp\system.img 
fastboot  flash  userdata E:\aosp\userdata.img 
fastboot  flash  vendor E:\aosp\vendor.img 
fastboot  flash  system_other E:\aosp\system_other.img 
fastboot reboot
image-20201129185824023.png

执行完毕,手机将会自动重启。

7.问题总结

  • 因为代码是在服务器编译的。fastboot flash boot “boot.img 路径”。这个路径是本地的映射路径。导致flash的时候,太慢或者出现其他 的错误

    解决的方法就是要将服务器上的img,保存到本地。提示如下错误:

    fastboot: error: cannot get boot partition size
    
  • usb线 太差,太水,也会导致一些异常错误。
  • 第一次刷机,系统一直停留在开机动画哪里,卡主无法前进。长按电源键15s,会强行关机。再次开机,依旧卡在开机动画。下载官网的镜像:官网镜像

    下载完毕,解压zip,将得到这么个玩意:

image-20201129190214415.png

此时,让设备进入fastboot model。双击flash-all.bat 这个脚本会自动将img刷进手机中。之后,在将自己的img 以上述的方式刷进去。就能正常开机。

8.各个img简介

android 系统映射文件

img名称 img描述
system.img Android系统运行的程序包,framework就在此img中。挂载到/system下
boot.img 包含内核启动参数
ramdisk.img 小型文件系统,是android系统启动的关键。包含了android 根目录的镜像
userdata.img 各程数据存储所在,被挂载到/data目录下
cache.img 存储系统或用户应用产生的临时数据,通常的镜像文件名为chche.img

你可能感兴趣的:(Android系统编译之AOSP刷机)