清华镜像站地址:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

google官网代号标记和细分版本:https://source.android.com/setup/start/build-numbers

pixelXL Binary Drive下载地址:https://developers.google.com/android/drivers#walleye

google kernel地址:https://source.android.com/setup/build/building-kernels#id-version

首先,根据国情,我们是在清华镜像站上下载android源代码的,google官网上即使有梯子也很慢,直接在清华镜像站上下载速度还是很快的。

1.下载repo

mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

2.在google官网上找pixelXL所对应的android版本标记

在google官网上https://source.android.com/setup/start/build-numbers找到对应的android版本标记

根据上图所示,目前pixelXL最新版本的源码版本是 PQ3A.190605.003(这个标记我们呆会在下载vendor会用到),我们还获取到了源代码标记为 android-9.0.0_r40-我们需要使用它在aosp源码中下载指定的版本。

3.下载AOSP源码

在ubuntu某目录下新建文件夹 android-9.0.0_r40_kernel-pixelXL存放源码并开始下载

mkdir android-9.0.0_r40_kernel-pixelXL
cd android-9.0.0_r40_kernel-pixelXL
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r40
repo sync -j4

这里sync 并发数量镜像站有说明,不宜太高,不然有可能出现sync报错的情况,这里建议选择 -j4.

后面出现需要选 y/N时,选择y即可。

然后就是耐心等待即可,在清华镜像站拉代码速度还是很快的,我大概用了不到一小时就好了。

4.下载对应版本的Binary Drive

下载地址:https://developers.google.com/android/drivers#walleye

下载Binary Drive需要知道对应的细分版本号,这里得到版本号的方法有两种

1)根据前面查找到的细分版本--- PQ3A.190605.003 找到对应的Binary Drive

2)  cat build/core/build_id.mk,可以看到当前源码的版本号为 PQ3A.190605.003

点击Link进行下载,最终会下载到两个tar.gz压缩包,解压后是两个.sh脚本

extract-google_devices-marlin.sh

extract-qcom-marlin.sh

将上面的两个脚本放到源代码根目录下,执行该两个脚本,不停回车直到输入:I ACCEPT,最终binary都会自动下载到vendor目录下,最终所有的AOSP代码算是下载完成了,接下来开始编译代码。

4.编译AOSP源码

4.1 编译环境搭建

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

4.2 安装openJdk

sudo apt-get install openjdk-8-jdk

安装完以后,执行下面的命令添加JAVA_HOME相关配置

sudo vi /etc/profile

在打开的profile文件的末尾添加下面的内容:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

使用 source /etc/profile 使环境变量配置立即生效

使用 java -version 检查是否jdk立马生效,检测到版本说明jdk安装成功,接下来可以开始编译代码了

4.3 编译代码

具体的编译环境搭建,这里就不说了

source build/envsetup.sh

lunch( 选择 43. aosp_marlin-userdebug )

make -j8

5.拉取kernel代码并编译

根据前面的方法拉取编译的AOSP代码中是不包含kernel源码的,而是一个已经编译好的内核镜像文件。如果我们需要修改编译kernel源码,需要单独拉取kernel的代码进行编译。

google地址:https://source.android.com/setup/build/building-kernels#id-version

从上表中我们可以看到,pixel的kernel镜像在AOSP的目录为 device/google/marlin-kernel

同时可以看到分支名称为  android-msm-marlin-3.18-pie-qpr2

拉取代码的命令为:

git clone https://aosp.tuna.tsinghua.edu.cn/kernel/msm.git
cd msm
git checkout  remotes/origin/android-msm-marlin-3.18-pie-qpr2

5.1 编译kernel源码

首先我们在AOSP源码目录下 source build/envsetup.sh, lunch aosp_marlin-userdebug 一下,用于启动一些编译时所需要的环境变量,例如:交叉编译工具等

然后我们修改kernel源码根目录下的Makefile,修改记录具体如下:

git diff 记录如下:
-ARCH           ?= $(SUBARCH)
-CROSS_COMPILE  ?= $(CONFIG_CROSS_COMPILE:"%"=%)
+#ARCH          ?= $(SUBARCH)
+#CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
+ARCH           ?= arm64
+CROSS_COMPILE  ?= aarch64-linux-android-
+CROSS_COMPILE_ARM32 ?= arm-linux-androideabi-

编译命令:

make marlin_defconfig       

make -j4

如果有编译报错,则安装如下工具 sudo apt-get install liblz4-tool

最终在arch/arm64/boot下生成了Image.lz4-dtb内核镜像文件

5.2 整合Image.lz4-dtb文件到AOSP目录下

arch/arm64/boot/Image.lz4-dtb文件复制到AOSP的device/google/marlin-kernel目录下,然后我们在AOSP源码根目录下执行 make bootimage 生成最终的boot.img 即可。

注:[100% 2/2] Target boot image from recovery: out/target/product/marlin/boot.img
cp: 无法获取'out/target/product/marlin/root/init.recovery.*.rc' 的文件状态(stat): 没有那个文件或目录

编译报错可以忽略,没什么大的关系

6.刷机烧录镜像

google解锁指导:https://source.android.com/setup/build/running#unlocking-the-bootloader

adb reboot bootloader

解锁手机:fastboot flashing unlock

刷入镜像前我们首先双清一下:

fastboot erase cache

fastboot erase userdata

刷入编译的所有镜像:fastboot flashall -w

其具体刷入的流程日志为:

Sending 'boot_a' (31137 KB)...
OKAY [  1.051s]
Writing 'boot_a'...
OKAY [  0.269s]

Erasing 'system_a'...
OKAY [  0.344s]
Sending sparse 'system_a' 1/2 (524284 KB)...
OKAY [ 16.351s]
Writing 'system_a' 1/2...
OKAY [  3.407s]
Sending sparse 'system_a' 2/2 (516084 KB)...
OKAY [ 16.652s]
Writing 'system_a' 2/2...
OKAY [  3.349s]

Erasing 'system_b'...
OKAY [  0.252s]
Sending 'system_b' (74524 KB)...
OKAY [  2.446s]
Writing 'system_b'...
OKAY [  0.565s]

Erasing 'vendor_a'...
OKAY [  0.103s]
Sending 'vendor_a' (267100 KB)...
OKAY [  8.553s]
Writing 'vendor_a'...
OKAY [  1.750s]
Setting current slot to 'a'...
OKAY [  0.087s]

Erasing 'userdata'...
OKAY [  1.708s]
Sending 'userdata' (4316 KB)...
OKAY [  0.238s]
Writing 'userdata'...
OKAY [  0.110s]
Rebooting...

单独刷入某个img:

cd out/target/product/marlin
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
fastboot flash userdata userdata.img

刷入完后执行 fastboot reboot 重启手机即可。

打开Setting,查看关于手机,显示的版本号和内核版本号都是我们自己编译出来的:

pixelXL 下载编译源代码刷机烧录记录相关推荐

  1. Android 系统开发系列(1):Android 12 源代码下载、编译和刷机

    Android 12 正式版 已经发布:https://mp.weixin.qq.com/s/OiFSWEnc-0N2z7JYWTJluw 本文就带大家下载和编译最新的 Android 12 代码,本 ...

  2. Android12 源码下载、编译、刷机、单编调试Framework

    文章目录 说明 1. 代码下载 1.1 下载Repo工具 1.2 安装和配置Git 1.3 创建工程目录 1.4 初始化Repo仓库 1.5 同步代码 2. 驱动下载 2.1 下载对应机型的驱动 2. ...

  3. Android系统源码下载与编译、刷机--Nexus6实测

    前言 此博文记录一下Android从系统源码下载到刷机的全过程. (https://source.android.com/source/build-numbers.html 页面中列表信息找到自己设备 ...

  4. Android源码的下载,编译,刷机

    上篇说到<framework开发环境搭建>,本篇继续介绍Android源码的下载.编译.刷机 先贴上Android源码官网地址:https://source.android.com/doc ...

  5. 基于Android12 AOSP和Pixel4,针对framework模块修改源代码的部分编译和刷机流程

    部分编译前最好备份一份干净的Android12代码 一.部分编译:(针对修改framework模块中的代码) source ./build/envsetup.sh(在Android12代码的根目录下) ...

  6. 三、Android系统内核编译及刷机实战 (修改反调试标志位)

    前言 在 二.Android系统源码编译及刷机实战 一文中,我们成功编译了Android 4.4.4_r1源码并刷入系统了 Nexus 5 设备,下面是设置界面的信息.上面显示的内核版本信息是3.4. ...

  7. Pixel 4 AOSP源码编译及刷机

    先吐槽,Google的代码和文档写的是真烂.完全根据他的文档来操作是完不成Pixel 4 AOSP源码编译和刷机这个事情的.经过痛苦的挣扎,最后终于刷机成功了. 代码下载 代码下载的流程在这,http ...

  8. 【玩转Jetson TX2 NX】(二)TX2 NX刷机+烧录系统和SDK(详细教程+错误解决)

    1 Jetson TX2 NX硬件准备 Jetson TX2 NX 刷机需要Ubuntu系统电脑,本文直接在安装虚拟机的笔记本电脑进行: [玩转Jetson TX2 NX](一)win10安装VMwa ...

  9. Android 第三方ROM CyanogenMod 源码下载,编译,刷机

    转自: http://blog.csdn.net/androiddevelop/article/details/8661120 一. 背景介绍 当前文章是记录自己HTC G12下载,编译,刷入手机   ...

最新文章

  1. 【机器学习】K-Means算法的原理流程、代码实现及优缺点
  2. 基于bboss开发平台eclipse开发工程生成工具介绍
  3. Linux导出history命令到本地
  4. 唯美“光效”PNG免扣素材大集合,一眼爱上!
  5. ef mysql 连接数_EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽
  6. Java 身份证工具类
  7. C语言基础教程之常量
  8. php invoke 反射,PHP ReflectionMethod invoke()用法及代码示例
  9. 自动驾驶仿真(二)—— 基于PreScan与Simulink的联合仿真
  10. uniapp 地址栏选择,获取地址,地址编码
  11. 使用wps的邮件合并和文档附件制作带照片的准考证
  12. [软件人生]大白话讲述了近两百年中美之间的历史关系及tpp是什么
  13. 嵌入式系统原理与实践期末个人总结
  14. 基于MediaPlayer的Android播放器控件
  15. linux64x gtx970,Nvidia GeForce GTX 970 ( 4 GB / 七彩虹 )无法正常驱动
  16. 三月已逝,接下来是忙碌的四月
  17. 山西大同大学SVM数据处理系统使用说明书
  18. vue 存取、设置、清除cookie
  19. 分布式任务调度系列 - PowerJob
  20. 全国自然保护区边界矢量数据下载地址及处理方法

热门文章

  1. 【牛客】OJ在线编程常见输入输出练习 C++
  2. 用计算机用u盘怎么切换,U盘一插进电脑提示需要格式化怎么办?
  3. Oracle入门教程与实战
  4. SQL学习,Mysql数据库常用表及数据备份。
  5. 微信小程序控制STC12单片机蓝牙通信与PWM控制舵机
  6. python中国大学慕课平台_中国大学MOOC(慕课)_Python程序设计_题库及答案
  7. Achieve Your Full Potential by Change Your Life Publishing
  8. 简单的’网页留言板‘案列
  9. 三极管放大电路仿真模拟
  10. (十)系统集成中级-进度管理