pixel 3xl 编译安卓与内核并烧入全流程(含安卓源码部分编译)
pixel 3xl 编译安卓与内核并烧入全流程(含安卓源码部分编译)
环境搭建
建议:ubuntu18.04 或 ubuntu20.04
建议:最大磁盘大小300GB以上,内存16GB以上,4个CPU内核以上
安卓源码下载
一、准备下载环境
1、安装Python 3.9
- sudo apt update
- sudo apt install software-properties-common
- sudo add-apt-repository ppa:deadsnakes/ppa
- 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 "xxx@gmail.com"
- git config --global user.name "xxx"
- (填自己的邮箱)
3、安装curl
- sudo apt-get install curl
4、配置环境变量 安装repo
- mkdir ~/bin
- PATH=~/bin:$PATH
- curl 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'
二、下载源代码
1、创建目录
- mkdir android12.0.0
- cd android12.0.0
2、初始化仓库
切换分支
- repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.0.0_r1
(要和自己手机里的版本进行对应,位置在 Android 版本中的版本号。进入该网页查看对应路径,然后修改android-12.0.0_r1)
3、同步
- repo sync
安卓源码编译
一、准备编译环境
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
二、下载编译驱动
进入该网页找对所下载安卓源代码版本所对应的驱动,之前的版本和此处的驱动要与手机对应
点击链接中对应版本的Link下载机器对应的驱动编译脚本文件并解压,得到extract-google_devices-crosshatch.sh和extract-qcom-crosshatch.sh(不同手机对应不同文件),放到源码的根目录执行(会让输入 I ACCEPT,回车别按的太快 之后ctrl+c 跳过),执行后会得到vender目录
- ./extract-qcom-crosshatch.sh(自行修改为手机对应驱动编译脚本文件)
- ./extract-google_devices-crosshatch.sh(自行修改为手机对应驱动编译脚本文件)
三、开始编译
- cd#(源代码文件名)
- source build/envsetup.sh
- make clobber
- lunch
- 输入#后的数字 25(进入该网页找到手机对应的build配置,然后修改
25) - (make update-api ,该步可以不执行,在报错时可以通过更新 api 尝试解决)
- make
安卓源码刷机
一、准备刷机环境
1、fastboot 安装
- sudo apt-get install android-tools-fastboot
2、安装kvm
- sudo apt-get install qemu-kvm
二、开始刷机
1、进入reboot-bootloader模式
- adb reboot bootloader
- fastboot reboot-bootloader
2、配置ANDROID_PRODUCT_OUT环境
- export ANDROID_PRODUCT_OUT=/home/xxx/android12.0.0/out/target/product/crosshatch
(/home/xxx/android12.0.0/是编译过后的源代码目录 注意要用自己的路径替代)
3、刷机
- fastboot flashall -w
内核源码构建与烧入
一、下载相应分支的源代码
- mkdir android-kernel && cd android-kernel
- repo init -u https://android.googlesource.com/kernel/manifest -b android-msm-crosshatch-4.9-android12
(将android-msm-crosshatch-4.9-android12替换为自己手机的内核版本) - repo sync
二、构建内核(编译)
- build/build.sh
报错
private/msm-google/scripts/extract-cert.c:21:10: fatal error: 'openssl/bio.h' file not found
#include <openssl/bio.h>
^~~~~~~~~~
[fatal error: openssl/bio.h: No such file or directory 解决方案](https://blog.csdn.net/qq_41533289/article/details/82985788)
三、运行内核(烧入)
方案1:永久刷入手机
在编译好的安卓源码目录下有一个out文件夹,将目录out/target/product/crosshatch目录下的*.img和kernel删除
- rm *.img kernel
然后备份安卓源码的目录device/google/crosshatch-kernel下的Image.lz4,用内核源码中的Image.lz4进行替换
回到安卓目录后进行:
- source build/envsetup.sh
- make
方案2:快速刷入手机,但手机重启后恢复原样
- adb reboot bootloader
- fastboot boot Image.lz4-dtb
四、脚本(本人版本)
可以在根目录终端中输入命令vi build.sh之后编写脚本:
cd android-kernel/
build/build.sh
cd out/android-msm-pixel-4.9/private/msm-google/arch/arm64/boot
adb reboot bootloader
fastboot boot Image.lz4-dtb
部分编译安卓源码(framework)
编译:
- cd#(安卓源代码文件名)
- source build/envsetup.sh
- lunch
- 输入#后的数字,如25
- make framework-minus-apex
编译完后观察framework.jar是否发生了更新
(framework.jar的路径:out/target/product/crosshatch/system/framework)
刷机:
adb root
adb remount (将'/system' 部分置于可写入的模式)
(执行上述命令的路径随意)adb reboot
adb root
adb remount
adb shell
cd system/framework
删除下面三个文件(如果没有就不用删除):
rm -r oat
rm -r arm
rm -r arm64
exit(退出adbshell模式)
adb push /home/xxx/android12.0.0/out/target/product/crosshatch/system/framework/framework.jar /system/framework
(将刚刚编译新生成的framework.jar导入手机中,framework.jar的路径需要修改成自己的路径,将/home/xxx/android12.0.0/换成自己的路径)
下面两步重启zygote:
- adb shell stop
- adb shell start
重启手机
- adb reboot
pixel 3xl 编译安卓与内核并烧入全流程(含安卓源码部分编译)的更多相关文章
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- Android : 修改内核源码 and 编译、打包成新的boot.img
一.Android内核源码的下载: 1.Google GIT地址: $ git clone https://android.googlesource.com/kernel/common.git $ g ...
- 鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析OpenHarmony源码 | v58.01
百篇博客系列篇.本篇为: v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o 本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿 ...
- 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01
百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...
- 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙看这篇或许真的够了 | 百篇博客分析OpenHarmony源码 | v50.06
百篇博客系列篇.本篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉 ...
- 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...
- Ubuntu下载源码并编译
本文章将介绍如何在Ubunt下进行Linux源码下载,并进行简单的编译步骤. 1.下载linux源码 先查看对应的Ubuntu对应版本源码 $ sudo apt-cache search linux- ...
- Linux源码与编译出的目标文件汇编代码的一致性问题
start_kernel是内核启动时比较重要的一个函数,然而我发现一个问题,我编译出来的目标文件中的汇编代码与C源码并不完全对应,这是怎么一回事呢? asmlinkage void __init st ...
- net-snmp源码VS2013编译添加加密支持(OpenSSL)
net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...
- net-snmp源码VS2013编译添加加密支持(OpenSSL)(在VS里配置编译OpenSSL)
net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...
随机推荐
- pandas安装1
Python 官方标准发行版并没有自带 Pandas 库,因此需要另行安装.除了标准发行版外,还有一些第三方机构发布的 Python 免费发行版, 它们在官方版本的基础上开发而来,并有针对性的提前安装 ...
- python之pdf转换操作 PyMuPDF库学习
1. 资料链接github地址: pymupdf/PyMuPDF: Python bindings for MuPDF's rendering library官方手册: PyMuPDF Documen ...
- [Java SE]Java SE异常合集
1 概述 2 问题集 Q1 : JAVA应用程序启动时报"A fatal error has been detected by the Java Runtime Environment: E ...
- LeeCode 动态规划(一)
简述 如果某一问题存在很多重叠子问题,使用动态规划是非常有效的. 动态规划与贪心 贪心:每次都选择局部最优解 动态规划:每个状态都是由前一个状态推导得到 动态规划解题步骤 确定 dp数组 及下标的含义 ...
- JAVASE和JAVAEE的区别
JAVASE和JAVAEE的区别 JavaEE: Java Enterprise Edition,Java企业版,多用于企业级开发,包括web开发等等.企业版本帮助开发和部署可移植.健壮.可伸缩切安全 ...
- JAVA注解@Scheduled 不执行
spring boot项目需要在启动类加上注解 @EnableScheduling 定义一个接口 StockTask.java 1 public interface StockTask { 2 pub ...
- vue2项目中调取登录接口登录以后获取个人信息以后,储存在哪里,怎么在不同的页面展示想要的信息?
在Vue2项目中,可以将个人信息存储在Vuex状态管理中或者浏览器的本地存储中,具体取决于项目的需求和规模. 1. Vuex状态管理 在Vuex中定义一个user模块,用于存储用户信息,可以在登录成功 ...
- Python 将函数存储在模块中
将函数存储在模块中 将函数存储在被称为模块的独立文件中,在将模块导入到主程序中 import语句允许在当前运行的程序文件中使用模块中的代码 通过将函数存储在独立的文件中,可影藏程序的代码细节,将重点放 ...
- JavaWeb之day03js
目录: 1.js的String对象(****) 2.js的Array对象 (****) 3.js的Date对象 (****) * 获取当前的月 0-11,想要得到准确的月 +1 * 获取星期时候,星期 ...
- 2020-10-06:java中垃圾回收器让工作线程停顿下来是怎么做的?
福大大答案2020-10-06: 简单回答:安全点,主动式中断. 中级回答:用户线程暂停,GC 线程要开始工作,但是要确保用户线程暂停的这行字节码指令是不会导致引用关系的变化.所以 JVM 会在字节码 ...