Android系统编译之AOSP刷机

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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 175,490评论 5 419
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 74,060评论 2 335
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 124,407评论 0 291
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 47,741评论 0 248
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 56,543评论 3 329
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 43,040评论 1 246
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 34,107评论 3 358
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 32,646评论 0 229
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 36,694评论 1 271
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 32,398评论 2 279
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 33,987评论 1 288
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 30,097评论 3 285
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 35,298评论 3 282
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 27,278评论 0 14
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 28,413评论 1 232
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 38,397评论 2 309
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 38,099评论 2 314

推荐阅读更多精彩内容