美文网首页
Android系统编译之AOSP刷机

Android系统编译之AOSP刷机

作者: 过期的薯条 | 来源:发表于2020-12-04 23:34 被阅读0次

    1.引言

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

    2.开发环境

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

    3.源码下载

    参考:android官网下载指导

    • 运行 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刷机

          本文链接:https://www.haomeiwen.com/subject/kpswwktx.html