StonyGround

The heart is a bloom , shoots up through the stony ground.

0%

AOSP编译刷入Pixel

WSL2编译aosp并刷入Pixel

搭建构建环境

https://source.android.google.cn/setup/build/initializing?hl=zh-cn

本人Ubuntu版本是22.02

1
2
#Ubuntu 18.04,其他版本请自行查看官方文档
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

设置WSL内存和swap

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

打开开始菜单,输入%UserProfile%,新建.wslconfig,写入以下配置:

1
2
3
4
5
6
7
8
9
10
[wsl2]

# wsl默认为windows内存的50%,尽量设置大一点
memory=12GB

# 处理器数量,也是越多越好
processors=6

# swap大小,32有点多了,实际用不上,但也不影响什么,编译完可以再改回来
swap=32GB

然后wsl关闭,重启。

wsl2挂载USB

既然是wsl编译的,刷机的时候自然需要adbfastboot命令,但是wsl默认是没有连接USB的,需要手动安装usbipd-win
具体可翻阅Microsoft官方文档

注意事项(重要)

  • 微软并没有把wsl推送到最新版本,因此如果自己的Linux内核在5.10.60.1以下,务必手动升级内核,传送门。直接下载安装即可,记得先关闭wsl
  • 如果是Ubuntu 20.04以上,apt可能找不到linux-tools-5.4.0-77-generic,请参照官方解决办法

    其他可能需要的配置

    设置文件夹区分大小写

    如果你是在/mnt/*/下进行编译的,可能需要把文件夹改为大小写敏感,具体可见官方文档

    转移wsl默认位置

    wsl默认是在C盘创建一个vhxd虚拟硬盘,所以如果C盘空间不多,可以转移到其他盘,原文链接
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 查看安装的虚拟机
    wsl -l -v

    # 关闭所有正在运行的虚拟机
    wsl --shutdown

    # 对需要迁移的分发或虚拟机导出
    # 虚拟机名称:wsl -l -v可以查看名字,我的是Ubuntu-20.04
    # 文件导出路径:我导出在D盘(D:\wsl-Ubuntu-20.04.tar)
    wsl --export 虚拟机名称 文件导出路径

    # 卸载虚拟机(删除C盘的虚拟机数据)
    wsl --unregister 虚拟机名称

    # 导入新的虚拟机
    # 目标路径:新的虚拟机文件路径(理解为软件的安装路径就对了,我安装在D:\wsl\Ubuntu2004)
    # 虚拟机文件路径:第3步导出的文件(D:\wsl-Ubuntu-20.04.tar)
    # --version 2:指定使用WSL2,如果填1就是指定使用WSL
    wsl --import 虚拟机名称 目标路径 虚拟机文件路径 --version 2

查找手机对应的aosp分支

源代码标记和 build

Build ID:要在下面查找驱动时用到

标记:是源代码的分支

支持设备:要注意该分支是否支持自己的手机

本人Pixel,所以对应的标记是android-10.0.0_r17,即pixel支持的最后一个版本

安装repo

1
2
sudo apt-get update
sudo apt-get install repo

下载aosp

方法1:下载主工程压缩包

下载aosp压缩包 https://source.android.com/setup/build/downloading

解压后执行

1
2
3
4
5
6
7
8
9
10
repo sync

#查看当前所有分支
cd .repo/manifests
git branch -a

#切换自己想要编译的分支
repo init -b android-10.0.0_r17 //步骤一中的标记
repo sync //可省略
repo start aosp_userdebug_10 --all //创建自己的分支

方法2:直接同步指定分支(中科大源)

参考AOSP(Android) 镜像使用帮助 - LUG @ USTC

可以直接拉取特定的版本:

1
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-10.0.0_r17

下载驱动

1、根据自己手机型号找到对应代号

https://developers.google.com/android/drivers

本人使用的是pixel一代,代号为sailfish,根据步骤一中的build找到对应驱动,如本人的是QP1A.191005.007.A3

2、解压运行sh文件,生成驱动目录vendor,将整个verdor目录拷贝至aosp根目录

编译aosp

1
2
3
source build/envsetup.sh
lunch aosp_sailfish-userdebug //这里选userdebug版本,拥有root权限,不知道可以只运行 lunch 然后选择
make -j8

刷入镜像

切换到目录 /aosp/out/target/product/自己手机的代号

运行

1
2
# 对应上面的版本
lunch aosp_sailfish-userdebug
1
2
3
4
5
6
7
8
#进入bootloader模式
adb reboot bootloader

#自动刷入 -w双清
fastboot flashall -w

#重启手机
fastboot reboot

flashall方式若无效,可用以下命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#双清
fastboot erase cache
fastboot erase userdata

#刷入boot
fastboot flash boot_a boot.img
fastboot flash boot_b boot.img

#刷入system.img
fastboot flash system system.img
fastboot flash system_b system_other.img

#刷入驱动
fastboot flash vendor vendor.img

#刷入其他模块(电信4G、GMS等),此步骤可省略
fastboot flash modem modem.img