pixelXL 下载编译源代码刷机烧录记录

清华镜像站地址: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,查看关于手机,显示的版本号和内核版本号都是我们自己编译出来的:

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值