本文以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
从清华源下载对应分支
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
解压到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
将以下文件压缩
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,下载完整的内核构建代码
选择对应分支
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
注释模块校验
完成后重新进行编译
make wahoo_defconfig make -j16
此方法会导致每一次启动Android时,会有安全性弹窗,具体解决方案未作深究。
另:查阅多方资料,失效原因均为驱动未能正常启动,尝试多个驱动解决方案仍无法解决。
参考
记一次安卓内核源码编译刷机过程(修改反调试标志位)-看雪论坛
实操篇- pixel 2 刷8.0.0/8.1.0 AOSP +4.4 Kernel (重点解决刷完触屏失灵问题)-看雪论坛
2. 编译安卓内核(pixel 2,Android 10)-CSDN
手动构建内核 | Android 开源项目 | Android Open Source Project
构建内核 | Android 开源项目 | Android Open Source Project
Built kernel from scratch, touchscreen doesn’t work? | XDA Forums
发表回复