• 完整的 pixel 6a 刷入 AOSP 源码过程记录


    基础环境

    虚拟机:VMware® Workstation 16 Pro 16.0.0 build-16894299

    Linux版本:ubuntu-16.04.7-desktop-amd64

    设备:pixel 6a;代号:bluejay;

    基础软件安装

    安装 Git

    命令:sudo apt install git

    安装 Python 3.7

    1、下载 python 3.7

    命令:wget Python Release Python 3.8.17 | Python.org

    2、解压 python 3.7

    命令:tar xvf python.tar.gz

    3、配置 python 3.7

    a)进入解压好的 python 3.7 目录

    命令:cd Python-3.7.17

    b)执行 configure 脚本:

    命令:./configure

    如果执行结果中包含以下报错信息,则需要安装 openSSL:

    报错:checking whether compiling and linking against OpenSSL works... no

    c)安装 openSSL 相关依赖包:

    命令:sudo apt install git-core libssl-dev libffi-dev gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev libz-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

    安装完 openSSL 后再次执行 configure 文件可以看到此信息:

    checking whether compiling and linking against OpenSSL works... yes

    4、编译与安装Python3:

    命令:sudo make install

    配置update-alternatives

    --将 python 交给 update-alternatives 管理,可随时切换软件版本

    a)将 python3.7 和 phthon2.7 加入快捷管理

    命令:

    update-alternatives --install /usr/bin/python python python3的安装地址(/usr/local/bin/python3.7 3(权重号))

    update-alternatives --install /usr/bin/python python python2的安装地址(/usr/bin/python2.7 2(权重号))

    b)切换Python版本:

    命令:update-alternatives --config python

    repo 管理工具的下载与使用

    下载安装repo

    直接参考清华或中科大镜像网站的教程:

    清华:AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

    中科大:AOSP 镜像使用帮助 — USTC Mirror Help 文档

    错误集锦

    1)Downloading Repo source from https://gerrit-googlesource.proxy.ustclug.org/git-repo

    fatal: unable to access 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

    repo: error: "git" failed with exit status 128

    cwd: /home/jacinth/WORKING_DIRECTORY/.repo/repo.tmp

    cmd: ['git', 'fetch', '--quiet', '--progress', 'origin', '+refs/heads/*:refs/remotes/origin/*', '+refs/tags/*:refs/tags/*']

    fatal: double check your --repo-rev setting.

    fatal: cloning the git-repo repository failed, will remove '.repo/repo'

    这个错误需要关闭 git 配置里的 ssl 校验,共执行两行命令:

    git config --global http.sslverify false

    git config --global https.sslverify false

    下载及同步 AOSP 源码

    初始化源码仓库

    具体教程查看清华或中科大镜像网站

    1、下载源码(安卓版本代号可查看网址:https://source.android.google.cn/docs/setup/about/build-numbers?hl=zh-cn)

    命令:repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b 安卓版本代号

    错误集锦

    1)无法连接到 gerrit.googlesource.com,

    解决:

    编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:

    REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'

    2、同步源码

    命令:repo sync

    错误集锦

    1)同步过程提示某些文件 not found,如下图:

    解决:

    两个镜像源互相切换使用,配置文件路径:WORKING_DIRECTORY/.repo/manifests.git/config,修改其中 url 指定的镜像地址

    华科大镜像:url = git://mirrors.ustc.edu.cn/aosp/platform/manifest

    清华镜像:url = https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

    b)GitCommandError: read-tree: [Errno 12] Cannot allocate memory

    解决:内存不足导致,调高虚拟机分配的内存

    编译驱动下载及源码的编译

    驱动文件下载及执行

    1、找到源码对应的 ID

    2、找到你的真机机型以及该 ID 对应的驱动文件(二进制)

    3、下载并解压驱动文件(有些比较旧的机型,比如 Nexus,驱动可能是多个)

    a)下载

    命令:wget Link(驱动文件对应的链接)

    b)解压

    命令:tar zxvf 驱动文件.tar.gz

    4、执行解压出来的 shell 脚本(如有多个脚本,需注意执行顺序,执行完成会在 vender 目录下生成对应该设备,如:bluejay 的相关文件)

    命令:./extract-google_devices-bluejay.sh

    源码编译

    1、执行环境准备脚本

    命令:source build/envsetup.sh

    2、选择对应设备镜像(只输入 lunch 的话,会提供一个设备名称列表供选择,我的设备是 pixel 6a,代号“bluejay”,所以应该输入代号 4)

    命令:lunch

    3、开始编译

    命令:make -j6(6 为进程数,根据自己的内存和处理器自行选择)

    错误集锦

    1)fatal error: runtime: out of memory

    解决:内存不足,最开始设置虚拟机为 8g 内存,编译开始时中断已有提示最少要 16g,否则会导致某些文件配置失败,调到 21g 后还有一次出现了编译失败,后来将内存调至 24g。

    备注:我这里比较粗暴,是直接调高了虚拟机配置的内存,朋友们可以自行百度“ubuntu 重新配置交换空间”来调整交换空间大小,以此提升 ubuntu 的内存。

    刷机

    1、检查设备是否连接

    命令:adb devices

    错误集锦

    1)error: insufficient permissions for device(其实在 adb devices 启动服务时就可以明显看到 no permissions 的提示了,如图)

    解决:

    a)在终端查看插入设备 usb 的 ID,命令:lsusb,找到我们的设备 usb ID ,如图

    b)进入到 /etc/udev/rules.d/ 目录下,命令:cd /etc/udev/rules.d/

    c)新建一个 51-android.rules 文件,命令:sudo vim 51-android.rules

    d)编辑内容,命令:sudo gedit 51-android.rules

    e)加上以下内容并保存:SUBSYSTEM=="usb", ATTRS{idVendor}==" 18d1", ATTRS{idProduct}=="4ee7",MODE="0666"

    f)赋予文件权限:命令:sudo chmod a+x 51-android.rules

    g)拔掉usb重新插上就可以了

    2、设备进入 fastboot 状态

    命令:adb reboot bootloader

    3、检查处于 fastboot 状态的已连接设备

    命令:fastboot devices

    4、解锁(包括 oem 解锁、fastboot 解锁)

    相关教程参考官网:运行版本  |  Android 开源项目  |  Android Open Source Project

    Tip:解锁后是会清除原先的用户数据的,unlock 之后我的汉化包、一些设置都被还原了。

    a)oem 解锁在开发者选项里

    b)fastboot 解锁(通过手机屏幕的提示按音量键进行选择、电源键确认)

    命令:fastboot flashing unlock

    备注:如果要退出 fastboot mode,命令:fastboot reboot

    5、切换到 su 用户

    命令:sudo -i

    6、进入 fastboot 所在目录

    a)查看 fastboot 目录路径

    命令:which fastboot

    b)进入目录,如图

    命令:cd /home/jacinth/WORKING_DIRECTORY/out/host/linux-x86/bin

    7、刷入

    首次全部模块刷入

    命令:fastboot flashall -w(-w 表示清空设备)

    8、执行成功会自动重启,如图,查看手机版本为我们下载的源码版本

    错误集锦

    1)waiting for devices

    解决:首次执行 fastboot flashall 的时候,设备还未解锁,所以尽管在 fastboot devices 下可以看到,但未解锁执行 fastboot flashall 刷机时就检测不到设备,按照步骤正常 unlock 即可。

    2)error: neither -p product specified nor ANDROID_PRODUCT_OUT set

    解决:

    配置好环境变量

    a)打开 profile 文件,命令:sudo gedit /etc/profile

    b)在末尾加上环境变量的配置并保存(路径则是你下载源码的 out 目录下):

    export ANDROID_PRODUCT_OUT=/home/jacinth/WORKING_DIRECTORY/out/target/product/bluejay

    c)使改动生效,命令:source /etc/profile

    d)使刷机环境生效,命令:source build/envsetup.sh

    备注:即便设置了该环境变量,如果没有在 su 用户下执行 flashall 命令,还会报同样的错误。

    3)Device product is 'bluejay'.Update requires 'oriole' or 'raven' or 'slider' or 'whitefin'.

    解决:下载的驱动出错了,我在淘宝下单的是 pixel6,所以本来下载的 oriole 驱动,到货了我也没仔细看,结果到编译报错了才知道手上的是 bluejay,即 pixel6a,所以重新下载驱动文件。

    4)FAILED (remote: partition (boot) not found)

    解决:进入 su 用户之后,还要进入到 fastboot 目录执行 flash,否则就会出现类似的错误。这个错误查了很久百思不得其解,后来参考一篇博客才知道自己没有进入到 fastboot 目录。

    博客地址:编译AOSP刷入nexus5-蒲公英云

  • 相关阅读:
    LightDB兼容Oracle table_exists_action功能
    ubuntu22.04设置中文
    Go语言-Slice详解
    Spring Boot 实现跨域的 5 种方式,总有一种适合你,建议收藏
    Linux系统性能监测工具——负载/内存/磁盘
    leetcode 60. 排列序列(困难、计数法)
    linux内核定时器的使用
    Java面试题之Java的IO
    Tilemap瓦片资源
    2024最新ChatGPT网站源码+AI绘画系统源码,详细图文搭建教程/支持ChatGPT4.0/GPT-4o文档分析图片理解/GPTs应用
  • 原文地址:https://blog.csdn.net/Jacinth40/article/details/133394570