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

news2024/12/25 0:55:27

基础环境

虚拟机: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。

刷机

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-蒲公英云

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1050185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ATA-M系列功率放大器——应用场景介绍

ATA-M系列是一款理想的单通道功率放大器。最大输出690Vrms电压,800VA功率,可驱动0~100%的阻性或非阻性负载。输出阻抗匹配多个档位可选,客户可根据测试需求调节。 图:ATA-M系列功率放大器 国产品牌安泰电子自主研发的ATA-M系列功率…

MySQL MMM高可用架构

MySQL MMM高可用架构一、MMM概述1、MMM简介2、MMM高可用架构3、MMM故障切换流程 二、MMM高可用双主双从架构部署1、配置主主复制(master),主从复制(slave)1)修改 Master1的MySQL配置文件2)把配置…

Linux 压缩和解压

1、tar命令(复杂) 使用tar命令均可以进行压缩和解压缩的操作 语法:tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数N -c,创建压缩文件,用于压缩模式 -v,显示压缩、解压过程,用于查看进度 -x&am…

redis查看耗时久的命令

redis查看耗时久的命令主要有两招:latency和slow log 【latency】 在Redis中,latency命令用于监视和测量Redis实例的延迟。 先进入redis: redis-cli -h 127.0.0.1 -p 24000[查看延迟监视器阈值] CONFIG GET latency-monitor-threshold这个值返回0&…

N9917A|是德科技keysight N9917A微波分析仪

181/2461/8938毫米波频率测量需要精确和谨慎。幸运的是,随着更多的毫米测试设备问世,工程挑战的难度略有下降。信号分析仪现已将同轴器件的直接覆盖范围扩大到110 GHz。这提供了低噪声、高精度和宽带宽的优势,使工程师能够专注于他们的设计和…

ESP32IDF出现Syntax Warning in cmake code at column 47报错

前言 (1)ESP32的资料还是挺难找的,遇到bug处理起来挺折磨人的。今天分享一个我遇到的bug,以及处理思路。 报错日志 (1)前天在些博客的时候,做测试发现了一个奇怪的bug,报错日志如下。…

Linux 本地 Docker Registry本地镜像仓库远程连接

目录 Linux 本地 Docker Registry本地镜像仓库远程连接 1. 部署Docker Registry 2. 本地测试推送镜像 3. Linux 安装cpolar 4. 配置Docker Registry公网访问地址 5. 公网远程推送Docker Registry 6. 固定Docker Registry公网地址 Linux 本地 Docker Registry本地镜像仓库…

Linux Kernel 之十 虚拟化、VirtIO 架构及规范、VirtQueue VRing

VirtIO 是一种 IO 半虚拟化解决方案,它提供 Guest OS 与 Hypervisor 虚拟化设备之间的通信框架和编程接口。其主要的优势是能提高性能且减少跨平台带来的兼容性问题。本文重点结合 VirtIO 规范 1.1 版以及 Linux 中的源码来分析 VirtIO 框架。 本文是我自己学习虚拟…

【Vue.js】使用Element入门搭建登入注册界面axios中GET请求与POST请求跨域问题

一,ElementUI是什么? Element UI 是一个基于 Vue.js 的桌面端组件库,它提供了一套丰富的 UI 组件,用于构建用户界面。Element UI 的目标是提供简洁、易用、美观的组件,同时保持灵活性和可定制性 二,Element…

idea2023根据表自动生成+springboot跑起来

idea安装插件 idea中显示数据库连接 就可以看到如下界面 选中你想生成的表,右键如下操作 如上就有了所有需要的后端代码 生成后,要查看一下mapper.xml中的文件是否 正确,若有误请先去修改,例如我的版本下生成了xml文件中缺乏…

Firecamp2.7.1exe安装与工具调试向后端发送SocketIO请求

背景: 笔者在python使用socket-io包时需要一个测试工具,选择了firecamp这个测试工具来发送请求。 参考视频与exe资源包: Firecamp2.7.1exe安装包以及基本使用说明文档(以SocketIO为例).zip资源-CSDN文库 15_send方法…

如何注册一个 DA 为 10 的高价值老域名

众所周知,由于域名存在唯一性,随着人们注册的越多,好域名也变得越来越少,渐渐成为稀缺的网络资源。这个时候要想拥有好的域名,抢注优质老域名就成了广大米友的路径之一。 优质的高价值域名都有一个特点,那…

Tomcat多实例+Nginx动静分离、负载均衡

这里写目录标题 Tomcat多实例动静分离、负载均衡一、Tomcat多实例部署1、安装JDK2、安装启动tomcat 二、NginxTomcat负载均衡、动静分离1、Nginx负载均衡实现原理1.1 原理1.2 Nginx配置反向代理的主要参数 2、Nginx动静分离实现原理2.1 原理2.2 Nginx静态处理优势 3、动静分离配…

AIGC(生成式AI)试用 7 -- 桌面小程序

生成式AI,别人用来写作,我先用来写个桌面小程序。 桌面小程序:计算器 需求 Python开发图形界面,标题:计算器 - * / 基本运算计算范围:-999999999 ~ 999999999** 乘方计算(例,2*…

第78步 时间序列建模实战:随机森林回归建模

基于WIN10的64位系统演示 一、写在前面 之前我们以决策树为例子,展示了各种花里胡哨的时间序列建模。 从这一期开始,我们继续基于python构建各种机器学习和深度学习的时间序列预测模型。 同样,这里使用这个数据: 《PLoS One》…

python - os模块 常用api方法和demo练习

文章目录 前言python-os模块常用api方法和demo练习1. 常用方法2. demo 练习3. demo 执行结果 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#…

进入IT行业:选择前端开发还是后端开发?

一、前言 开发做前端好还是后端好?这是一个常见的问题,特别是对于初学者来说。在编程世界中,前端开发和后端开发分别代表着用户界面和数据逻辑,就像城市的两个不同街区一样。但是,究竟哪个街区更适合我们作为开发者呢…

chatgpt 只会死记硬背吗

本周写两篇关于 chatgpt 的随感,我不善于写文档,所以我的文字多是输出直感和观点,而不是知识,没有关于 chatgpt 的原理和应用,甚至术语也不匹配,反正就是想到哪算哪吧。 都说 chatgpt 没有内在逻辑&#xf…

51单片机用IIc控制OLED显示数组内容

为了能够看到51单片机接收到的串口数据,我选择了用oled显示收到的数据,特此花重金买了一块oled屏128X64的屏幕大概10来块钱吧!首先要达成的小目标就是能够显示数组的内容,建立一个字符数组,用来接收串口收到的数据&…

北斗智能终端:助力森林保护的新利器

北斗智能终端:助力森林保护的新利器 近年来,大兴安岭图强林业局利用北斗等技术,推进森林保护的数字化进程,为高质量发展注入了新的动力和活力。 据了解,当地利用北斗终端对森林资源进行精准管理。为88名管护员和10名监…