Mas0n
to be reverse engineer🐧
翻车鱼

Pixel 2 AOSP编译记录 (11.0)

Pixel 2 AOSP编译记录 (11.0)

本文以AOSP源码定制作为出发点,对抗Android终端日益强大的防护措施。

不得不说,编译AOSP一踩一个坑。

设备:Pixel 2

环境:Ubuntu 20.04 for WSL2

安装基础依赖

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

安装repo

mkdir -p ~/.bin
PATH="${HOME}/.bin:${PATH}"
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
chmod a+rx ~/.bin/repo

为持久化,将PATH添加至~/.bashrc

PATH="${HOME}/.bin:${PATH}"

编译AOSP

创建文件夹

mkdir aosp && cd aosp

根据自己的设备和系统版本选择分支

https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds

https://cdn.shi1011.cn/2022/05/48f4684acb4dd79acccbe67e67fe1b78.png?imageMogr2/format/webp/interlace/0/quality/90|watermark/2/text/wqlNYXMwbg/font/bXN5aGJkLnR0Zg/fontsize/14/fill/IzMzMzMzMw/dissolve/80/gravity/southeast/dx/5/dy/5

从清华源下载对应分支

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r25
repo sync -j8

同步完成之后,可以将目录下.repo删除,节约空间

根据Build ID下载对应设备驱动

Driver Binaries for Nexus and Pixel Devices

https://cdn.shi1011.cn/2022/05/a4afd57e4801a7421a1a9abc2ec71e18.png?imageMogr2/format/webp/interlace/0/quality/90|watermark/2/text/wqlNYXMwbg/font/bXN5aGJkLnR0Zg/fontsize/14/fill/IzMzMzMzMw/dissolve/80/gravity/southeast/dx/5/dy/5

解压到AOSP源码目录

# 下载驱动文件
wget -c https://dl.google.com/dl/android/aosp/google_devices-walleye-rp1a.201005.004.a1-2fdea26a.tgz
wget -c https://dl.google.com/dl/android/aosp/qcom-walleye-rp1a.201005.004.a1-14d3904d.tgz
# 解压驱动文件
tar -xvf google_devices-walleye-rp1a.201005.004.a1-2fdea26a.tgz
tar -xvf qcom-walleye-rp1a.201005.004.a1-14d3904d.tgz

运行驱动文件同意协议

sh extract-google_devices-walleye.sh
sh extract-qcom-walleye.sh

而后进行编译

source build/envsetup.sh
lunch aosp_walleye-userdebug
time make -j16

编译完成后的文件位于out/target/product/walleye

https://cdn.shi1011.cn/2022/05/550d05f24bffba8a4ad88ef6376839de.png?imageMogr2/format/webp/interlace/0/quality/90|watermark/2/text/wqlNYXMwbg/font/bXN5aGJkLnR0Zg/fontsize/14/fill/IzMzMzMzMw/dissolve/80/gravity/southeast/dx/5/dy/5

将以下文件压缩

zip image-walleye.zip android-info.txt boot.img dtbo.img system.img system_other.img vbmeta.img vendor.img
fastboot -w update image-walleye.zip

如果缺少了某个文件,我们可以手动编译

make bootimage -j16        # boot.img
make systemimage -j16      # system.img
make systemotherimage -j16 # system_other.img
make vbmetaimage -j16      # vbmeta.img

刷入AOSP

进入bootloader

fastboot reboot-bootloader

刷入镜像

fastboot -w update image-walleye.zip

关于WSL空间不足

AOSP源码大约需要200G空间,WSL2默认限制为256G,如果空间不足,可以参考官方文档解决

https://docs.microsoft.com/zh-cn/windows/wsl/vhd-size

编译内核

查看当前内核版本

adb shell
> su
> uname -a
Linux localhost 4.4.223-g48d18f3c955d-dirty #4 SMP PREEMPT Sun May 8 12:39:54 CST 2022 aarch64

分支为g后12位字符串

下载内核源码

git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/msm.git && cd msm
git checkout 48d18f3c955d

安装基础依赖

sudo apt install libssl-dev

由于AOSP源码的工具链缺少gcc,下载完整的内核构建代码

构建内核 | Android 开源项目

https://cdn.shi1011.cn/2022/05/43952544541c1016233566873bf3275e.png?imageMogr2/format/webp/interlace/0/quality/90|watermark/2/text/wqlNYXMwbg/font/bXN5aGJkLnR0Zg/fontsize/14/fill/IzMzMzMzMw/dissolve/80/gravity/southeast/dx/5/dy/5

选择对应分支

mkdir aosp_kernel && cd aosp_kernel
repo init -u https://android.googlesource.com/kernel/manifest -b android-msm-wahoo-4.4-android10-qpr3
repo sync -j8

而后将工具链导入环境变量

export PATH=$PATH:/home/mas0n/aosp/prebuilts/misc/linux-x86/dtc
export PATH=$PATH:/home/mas0n/aosp/prebuilts/misc/linux-x86/libufdt
export PATH=$PATH:/home/mas0n/aosp/prebuilts/misc/linux-x86/lz4
export PATH=$PATH:/home/mas0n/aosp/prebuilts/clang/host/linux-x86/clang-3289846/bin
export PATH=$PATH:/home/mas0n/aosp_kernel/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin
export PATH=$PATH:/home/mas0n/aosp_kernel/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-android-
export CROSS_COMPILE_ARM32=arm-linux-androideabi-

开始编译

make wahoo_defconfig
make -j16

关于触控失灵

直接编译可能会导致触控失灵,原因是缺少驱动,目前找到的有效解决方案如下

注释以下

# arch/arm64/configs/wahoo_defconfig
CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y

kernel/module.c注释模块校验

https://cdn.shi1011.cn/2022/05/f3281c50dc5e7a745dd8ea90ab7c6d30.png?imageMogr2/format/webp/interlace/0/quality/90|watermark/2/text/wqlNYXMwbg/font/bXN5aGJkLnR0Zg/fontsize/14/fill/IzMzMzMzMw/dissolve/80/gravity/southeast/dx/5/dy/5

完成后重新进行编译

make wahoo_defconfig
make -j16

此方法会导致每一次启动Android时,会有安全性弹窗,具体解决方案未作深究。

另:查阅多方资料,失效原因均为驱动未能正常启动,尝试多个驱动解决方案仍无法解决。

参考

编译内核(Pixel 2)-看雪论坛

记一次安卓内核源码编译刷机过程(修改反调试标志位)-看雪论坛

实操篇- pixel 2 刷8.0.0/8.1.0 AOSP +4.4 Kernel (重点解决刷完触屏失灵问题)-看雪论坛

1. 编译安卓源码(AOSP)10.0.0-CSDN

2. 编译安卓内核(pixel 2,Android 10)-CSDN

手动构建内核 | Android 开源项目 | Android Open Source Project

构建内核 | Android 开源项目 | Android Open Source Project

求助:刷入内核后触摸屏失灵 – AKR社区

Built kernel from scratch, touchscreen doesn’t work? | XDA Forums

Pixel3 Aosp自编译内核如何正确的驱动设备正常运行 – AKR社区

Compiling Linux Kernel for Pixel 2 devices — Bash script

本文链接:https://blog.shi1011.cn/rev/android/2284
本文采用 CC BY-NC-SA 4.0 Unported 协议进行许可

Mas0n

文章作者

发表回复

textsms
account_circle
email

翻车鱼

Pixel 2 AOSP编译记录 (11.0)
本文以AOSP源码定制作为出发点,对抗Android终端日益强大的防护措施。 不得不说,编译AOSP一踩一个坑。 设备:Pixel 2 环境:Ubuntu 20.04 for WSL2 安装基础依赖 sudo ap…
扫描二维码继续阅读
2022-05-10