完整的 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。

刷机

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.mzph.cn/news/91415.shtml

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

相关文章

金融生产存储亚健康治理:升级亚健康 3.0 ,应对万盘规模的挑战

随着集群规模的不断扩大,硬盘数量指数级上升,信创 CPU 和操作系统、硬盘多年老化、物理搬迁等多种复杂因素叠加,为企业的存储亚健康管理增加了新的挑战。 在亚健康 2.0 的基础上,星辰天合在 XSKY SDS V6.2 实现了亚健康 3.0&#…

【C++入门到精通】C++入门 —— set multiset (STL)

阅读导航 前言一、set简介二、std::set1. std::set简介2. std::set的使用- 基本使用- std::set的模板参数列表- std::set的构造函数- std::set的迭代器- std::set容量与元素访问函数 3. set的所有函数(表) 三、std::multiset1. std::multiset简介 四、st…

嵌入式学习笔记(35)外部中断

6.9.1什么是外部中断 (1)内部中断就是指中断源来自于SoC内部(一般是内部外设),譬如串口、定时器等部件产生的中断;外部中断是SoC外部的设备,通过外部中断对应的GPIO引脚产生的中断。 (2)按键在SoC中就使用了外部中断…

【每日一题】1498. 满足条件的子序列数目

1498. 满足条件的子序列数目 - 力扣(LeetCode) 给你一个整数数组 nums 和一个整数 target 。 请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。 由于答案可能很大,请将结果对 109 7 取余后…

stm32无人机-飞行力学原理

惯性导航,是一种无源导航,不需要向外部辐射或接收信号源,就能自主进行确定自己在什么地方的一种导航方法。 惯性导航主要由惯性器件计算实现,惯性器件包括陀螺仪和加速度计。一般来说,惯性器件与导航物体固连&#xf…

CTFSHOW SSTI

目录 web361 【无过滤】 subprocess.Popen os._wrap_close url_for lipsum cycler web362 【过滤数字】 第一个通过 计算长度来实现 第二个使用脚本输出另一个数字来绕过 使用没有数字的payload web363 【过滤引号】 使用getitem 自定义变量 web364 【过…

数据集笔记:OpenCelliD(手机基站开放数据库)

下载数据的方式可见:【数据获取】全球最大手机基站开源数据库 1 读取数据 import pandas as pdpd.read_csv(C:/Users/16000/Downloads/454.csv/454.csv,headerNone,names[Radio,MCC,MNC,LAC/TAC/NID,CID,Longitude,Latitude,Range,Samples,Changeable1,Changeable…

设计模式6、适配器模式 Adapter

解释说明:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作 目标接口(Target):当前系统所期待的接口,它可以是抽象类或接口 适配者(Adaptee)&#xff1a…

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

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

LLM之Colossal-LLaMA-2:Colossal-LLaMA-2的简介、安装、使用方法之详细攻略

LLM之Colossal-LLaMA-2:Colossal-LLaMA-2的简介、安装、使用方法之详细攻略 导读:2023年9月25日,Colossal-AI团队推出了开源模型Colossal-LLaMA-2-7B-base。Colossal-LLaMA-2项目的技术细节,主要核心要点总结如下: >> 数据处…

分布式事务-TCC异常-幂等性

1、幂等性问题: 二阶段提交时,如果二阶段执行成功通知TC时出现网路或其他问题中断,那么TC没有收到执行成功的通知,TC内部有定时器不断的重试二阶段方法,导致接口出现幂等性问题。 2、解决方法 和空回滚问题一样也是…

Kotlin只截取Float小数点后数值DecimalFormat

Kotlin只截取Float小数点后数值DecimalFormat import java.text.DecimalFormatfun main(args: Array<String>) {val pi 3.141516Fvar p pi - pi.toInt()println(p)val decimalFormat DecimalFormat("00.0000")val format decimalFormat.format(p)println(…

UE5屏幕适配

一、本程序设计发布在手机上&#xff0c;首先确定屏幕的设计分辨率&#xff0c;这里我们选择iphone6s&#xff0c;750x1334。 二、设置DPI Scale为1.0的比例&#xff0c;点击齿轮标志 因为我们这个程序是手机竖屏使用的&#xff0c;所以DPI Scale Rule选择Shortest Side&#…

c语言常用语法,长时间不用容易忘。

关键字 auto 声明自动变量const 定义常量&#xff0c;如果一个变量被 const 修饰&#xff0c;那么它的值就不能再被改变extern 声明变量或函数是在其它文件或本文件的其他位置定义register 声明寄存器变量signed 声明有符号类型变量或函数static 声明静态变量&#xff0c;修饰…

APA技术架构与说明

1.自动泊车的硬件架构 2.APA自动泊车辅助系统 1&#xff09;APA主要包括以下典型功能 &#xff08;1&#xff09;泊车入库&#xff1a;利用超声波雷达或环视摄像头实现车位识别&#xff0c;并计算出合适行驶轨迹&#xff0c;对车辆进行横向/纵向控制使车辆驶入车位&#xff1…

在MyBatisPlus中添加分页插件

开发过程中&#xff0c;数据量大的时候&#xff0c;查询效率会有所下降&#xff0c;这时&#xff0c;我们往往会使用分页。 具体操作入下&#xff1a; 1、添加分页插件&#xff1a; package com.zhang.config;import com.baomidou.mybatisplus.extension.plugins.Pagination…

基于微信小程序的停车场预约收费小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

CCF CSP认证历年题目自练 Day15

CCF CSP认证历年题目自练 Day15 题目一 试题编号&#xff1a; 201709-1 试题名称&#xff1a; 打酱油 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   小明带着N元钱去买酱油。酱油10块钱一瓶&#xff0c;商家进行促销&#xf…

【运维日常】华为云专线实现idc通过nat出网

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

04、EL和JSTL核心技术

目录 1 EL表达式&#xff08;熟悉&#xff09; 1.1 基本概念 1.2 主要功能 1.3 访问内置对象的数据 1.3.1访问方式 1.3.2 执行流程 1.4 访问请求参数的数据 1.5 访问Bean对象的属性 1.5.1 访问方式 1.5.2 主要区别 1.6 访问集合中的数据 1.7 常用的内置对象 …