当前位置: 首页 > news >正文

Pixel4 安卓源码及内核修改编译教程 | 基于Android12 AOSP

之前整理了 Pixel4上的源码过程,下载的话大家可以去镜像网站下载,可以节约很多时间。
实验设备:Ubuntu18.04 32G+2T Pixel4

文章目录

  • 一、安卓源码下载
    • 1.准备下载环境
      • (1)安装Python 3.9
      • (2)安装git
      • (3)安装curl
      • (4)配置环境变量 安装repo
    • 2.下载源代码
      • (1)创建目录
      • (2)初始化仓库
      • (3)同步
      • (4)拉取repo shell脚本
  • 二、安卓源码编译
    • 1.安装jdk
    • 2.使用 ubuntu 14+,需要安装以下依赖包
    • 3.安装libncurses5
    • 4.构建编译环境依赖
    • 5.下载编译驱动
    • 6.开始编译
    • 7.刷机
      • (1)fastboot 安装
      • (2)安装kvm
      • (3)进入reboot-bootloader模式
      • (4)配置ANDROID_PRODUCT_OUT环境
      • (5)刷机
  • 三、内核构建&编译刷机
    • 1.下载相应分支的源代码
    • 2.内核编译
      • (1)改变Touch路径
      • (2)编译内核
      • (3)刷入设备
      • (3)重启
  • 四、参考资料
    • AOSP
    • 刷机

一、安卓源码下载

1.准备下载环境

(1)安装Python 3.9

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.9
sudo apt-get install python

(2)安装git

sudo apt-get upgrade
sudo apt-get install git
git config --global user.email "xxxxxxx@gmail.com"
git config --global user.name "xxxxx"

(3)安装curl

sudo apt-get install curl

(4)配置环境变量 安装repo

mkdir ~/bin
PATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo打开bin文件夹下的repo将
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
改为
REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

如果替换了还不行?可尝试以下方案之一:

curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo

可选项,给repo换个源,把该执行放到~/.bashrc环境变量中

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

2.下载源代码

(1)创建目录

mkdir android12.0.0
cd android12.0.0

(2)初始化仓库

重开终端 PATH 会失效,可以在使用时直接改成绝对路径 python3 ~/bin/repo xxx

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

其他镜像地址供参考,不要全copy输入一遍,参考用的!

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

以下是分支仓库(拉取特定TAG用的!!!)
版本号要对应!!!版本号要对应!!!版本号要对应!!!

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.0.0_r11

网络不行就试试其他镜像地址,不要直接照搬,对照修改,下面3种方案:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-12.0.0_r9
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b  android-12.0.0_r3
python3 ~/bin/repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.0.0_r28

可以登录以下网页查看自己手机对应的版本号【魔法】
https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds

如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:

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

(3)同步

repo sync -j$(nproc)

(4)拉取repo shell脚本

touch repo.sh       # 1. 创建 repo.sh 文件
vim repo.sh         # 2. 复制下面的脚本内容到 repo.sh 里面
chmod a+x repo.sh   #3. 修改权限
./repo.sh            # 4. 运行脚本,万事大吉
#!/bin/bash
python3 ~/bin/repo sync -j4
while [ $? -ne 0 ]
do
echo "======sync failed ,re-sync again======"
sleep 3
python3 ~/bin/repo sync -j4
done

二、安卓源码编译

准备编译环境

1.安装jdk

sudo apt-get update
sudo apt-get install openjdk-8-jdk

2.使用 ubuntu 14+,需要安装以下依赖包

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

3.安装libncurses5

sudo apt install libncurses5

4.构建编译环境依赖

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential  
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
sudo apt-get install libc6-dev-i386 
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache libncurses5

5.下载编译驱动

https://developers.google.cn/android/drivers#flamesp1a.210812.016.a1
去以上网站找对所下载安卓源代码版本所对应的驱动下图buildID要对应

如果只是运行模拟器忽略这一步。Pixel4手机需要下载驱动编译脚本–脚本链接,下载机器对应的驱动编译脚本文件并解压,得到extract-google_devices-flame.sh和extract-qcom-flame.sh,放到源码的根目录执行(会让输入 I ACCEPT,回车别按的太快,之后ctrl+c 跳过),执行后会得到vender目录
执行以下命令,不同机型命令不一

./ extract-qcom-flame.sh  
./extract-google_devices-flame.sh

6.开始编译

cd #(源代码文件名)
source build/envsetup.sh  (每次关闭 Shell 之后都需要重新执行配置环境)
make clobber
lunch

输入#后的数字(找到pixel4对应 aosp-flame -userdebug 输入对应数字)

make -j$(nproc)

7.刷机

准备刷机环境

(1)fastboot 安装

sudo apt-get install  android-tools-fastboot

(2)安装kvm

sudo apt-get install qemu-kvm

开始刷机

(3)进入reboot-bootloader模式

(无反应可先进入adb reboot bootloader)

fastboot reboot-bootloader

(4)配置ANDROID_PRODUCT_OUT环境

export ANDROID_PRODUCT_OUT=/绝对路径/out/target/product/flame(注意要用自己的路径替代)

(5)刷机

fastboot flashall -w

三、内核构建&编译刷机

1.下载相应分支的源代码

mkdir android-kernel && cd android-kernel 
python3 ~/bin/repo init -u https://aosp.tuna.tsinghua.edu.cn/kernel/manifest -b android-msm-coral-4.14-android12
repo sync -j$(nproc)

2.内核编译

(1)改变Touch路径

将 /kernel/private/msm-google-modules/touch/fts/flame目录下的文件剪切到/kernel/private/msm-google-modules/touch/fts/目录下删除flame

sudo apt-get install libssl-dev

(2)编译内核

在内核主目录下

./build/build.sh

(3)刷入设备

1、永久刷入设备【参考刷AOSP】出错不能恢复默认内核,不推荐:
在编译好的安卓源码⽬录下有⼀个out⽂件夹,将⽬录out/target/product/flame⽬录下的 *.img和kernel删除

rm *.img kernel 

然后备份安卓源码的⽬录device/google/coral-kernel下的Image.lz4,⽤内核源码中的 Image.lz4进⾏替换
回到安卓⽬录后进⾏:

source build/envsetup.sh 
make -j$(nproc)

2、【推荐】快速刷入内核

adb reboot bootloader
fastboot boot /home/wangheng/kernel12/kernel12/out/android-msm-pixel-4.14/private/msm-google/arch/arm64/boot/Image.lz4-dtb

(3)重启

fastboot reboot

四、参考资料

AOSP

1、http://liuwangshu.cn/batcoder/aosp/2-download-aosp.html
2、https://blog.csdn.net/y738587653/article/details/119983521?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link
3、http://liuwangshu.cn/batcoder/aosp/3-compiling-aosp.html
4、https://blog.csdn.net/weixin_45767368/article/details/105962606#t1
5、https://blog.csdn.net/grackergao/article/details/120984766
6、https://www.cnblogs.com/palance/p/5187103.html

刷机

1、https://blog.csdn.net/y738587653/article/details/119983521
2、https://www.droidwin.com/fix-failed-remote-partition-should-be-flashed-in-fastbootd/#Fix_1_Use_the_latest_ADB_Fastboot_Binaires
3、https://jingyan.baidu.com/article/5552ef47a15249518ffbc9ec.html
4、https://developer.android.com/studio/releases/platform-tools

相关文章:

Pixel4 安卓源码及内核修改编译教程 | 基于Android12 AOSP

之前整理了 Pixel4上的源码过程,下载的话大家可以去镜像网站下载,可以节约很多时间。 实验设备:Ubuntu18.04 32G2T Pixel4 文章目录 一、安卓源码下载1.准备下载环境(1)安装Python 3.9(2)安装g…...

如何做好Code Review

本文主要从我们为什么需要CR?CR面临哪些挑战?CR的最佳实践几个方面分析,希望可以给读者一些参考。 为什么需要CR? 代码质量 定性来看,大家都认可Code Review(后文简称CR)能显著改善代码质量&…...

Unity技术框架集合、Unity技术栈汇总

引擎技术尝试 [Animancer-Pro] (https://assetstore.unity.com/packages/tools/animation/animancer-pro-116514) (基于Playable的简单强大的动画解决方案)[ProBuilder/UModeler] (https://assetstore.unity.com/packages/tools/modeling/umodeler-80868) (快速关卡原型构建…...

安卓SDK开发的一些疑问

目前,公司需要开发一套iOS和安卓的sdk,主要包含蓝牙管理、网络请求、倒计时等方案执行、蓝牙数据交互等功能。之前没有过开发安卓sdk的经历,写个笔记用以记录。 现在iOS sdk已经写了一部分,安卓开发我也习惯从iOS的角度类比来开发…...

【基础类】—三栏页面布局的方案和优缺点

一、假设高度已知&#xff0c;中间宽度自适应&#xff0c;三栏&#xff08;列&#xff09;布局的方案有哪些&#xff1f; float浮动、absolute绝对定位、flex弹性盒子、table表格布局、grid网格布局 浮动 float <style>* {margin: 0;padding: 0;}.container {width: 1…...

OPENCV C++(四)形态学操作+连通域统计

形态学操作 先得到一个卷积核 Mat kernel getStructuringElement(MORPH_RECT,Size(5,5)); 第一个是形状 第二个是卷积核大小 依次为腐蚀 膨胀 开运算 闭运算 Mat erodemat,dilatemat,openmat,closemat;morphologyEx(result1, erodemat, MORPH_ERODE, kernel);morphologyEx…...

tomcat上部署jpress

一.确保有jdk&#xff0c;tomcat和mysql环境 二.新建jpress数据库&#xff0c;新建jpress用户并赋予所有权限 三.将jpress的war上传到tomcat/apache-tomcat-8.5.70/webapps&#xff0c;具体根据你的实际tomcat安装路径为准&#xff0c;上传完成后他会自己解包 四.到浏览器完…...

篇十:外观模式:简化复杂系统

篇十&#xff1a;“外观模式&#xff1a;简化复杂系统” 开始本篇文章之前先推荐一个好用的学习工具&#xff0c;AIRIght&#xff0c;借助于AI助手工具&#xff0c;学习事半功倍。欢迎访问&#xff1a;http://airight.fun/。 另外有2本不错的关于设计模式的资料&#xff0c;分…...

linux gcc __attribute__

__attribute__ 1. 函数属性1.1 __attribute__((noreturn))1.2 __attribute__((format))1.3 __attribute__((const)) 2. 变量属性2.1. __attribute__((aligned))2.2. __attribute__((packed)) 3. 类型属性 __attribute__ 是 GCC 编译器提供的一种特殊语法&#xff0c;它可以用于…...

【SpringCloud】RabbitMQ基础

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;…...

css, resize 拖拉宽度

效果如下&#xff1a; 可直接复制预览查看属性值: 关键样式属性&#xff1a; resize: horizontal; overflow-x: auto; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content…...

Python识别抖音Tiktok、巨量引擎滑块验证码识别

由于最近比较忙&#xff0c;所以本周搞了一个相对简单的验证码&#xff0c;就是抖音Tiktok的滑块验证码&#xff0c;这也是接到客户的一个需求。这种验证码通常在电脑端登录抖音、巨量引擎的的时候出现。 首先看一下最终的效果&#xff1a; 验证码识别过程 1、利用爬虫采集图…...

EvilBox One靶场笔记

EvilBox: One靶场笔记 信息收集 先fscan找主机192.168.1.102 namp扫端口 开放80,22端口 然后扫目录 └─$ gobuster dir -r -u http://192.168.1.102/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,bak,html在扫secret目录&#xff0c;找…...

shell脚本中的export无效

写了一段shell脚本&#xff1a; #!/bin/bash source Tools/simulation/gazebo-classic/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:$(pwd) export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:$(pwd)/Tools/simulation/gazebo…...

前沿分享-鱼形机器人

可能并不太前沿了&#xff0c;是21年底的新闻了&#xff0c;但是看见了就顺便发一下吧。 大概就是&#xff0c;通过在pH响应型水凝胶中编码不同的膨胀速率而构建了一种环境适应型变形微机器人,让微型机器人直接向癌细胞输送药物从而减轻药物带来副作用。 技术原理是&#xff0c…...

摄像机终端IP地址白名单配置流程

海康摄像头配置白名单流程 1.登录海康摄像机前端 2.进入配置-系统-安全管理-IP地址过滤 3.IP地址过滤方式选择“允许” 4.点击添加按钮输入对应的IP地址或者IP网段 5.最后勾选启用IP地址过滤&#xff0c;然后保存 大华摄像头配置白名单流程 1.登录大华摄像机前端 2.进入设…...

Glibc—查看版本

方式1&#xff1a;直接查看ldd版本 ldd --versionldd (Buildroot) 2.30 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICU…...

C++物理引擎Box2D的下载,编译,VS2013配置环境

文章目录 网站和下载地址编译工具:编译box2dhelloworld测试网站和下载地址 https://box2d.org/ 下载地址 https://hub.nuaa.cf/erincatto/box2d/tags 编译工具: 1.VS2013 2.cmake 下载地址 https://cmake.org/ 编译box2d 下载box2d源码2.4.0,解压。在box2d-2.4.0目录下…...

STL容器详解——map容器

一、map容器介绍 作为关联式容器的一种&#xff0c;map 容器存储的都是 pair 对象&#xff0c;也就是用 pair 类模板创建的键值对。其中&#xff0c;各个键值对的键和值可以是任意数据类型&#xff0c;包括 C 基本数据类型&#xff08;int、double 等&#xff09;、使用结构体…...

VR全景在建筑工程行业能起到哪些作用?

在建筑工程领域&#xff0c;数字化技术为行业的发展起到巨大的推动作用&#xff0c;虽然建筑施工行业主要是依赖于工人劳动力和施工设备&#xff0c;但是VR全景在该行业中方方面面都能应用&#xff0c;从设计建模到项目交付&#xff0c;帮助建筑师以及项目方更好的理解每个环节…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...