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

打开主目录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、初始化仓库

切换分支

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.shextract-qcom-crosshatch.sh(不同手机对应不同文件),放到源码的根目录执行(会让输入 I ACCEPT,回车别按的太快 之后ctrl+c 跳过),执行后会得到vender目录

  • ./extract-qcom-crosshatch.sh(自行修改为手机对应驱动编译脚本文件)
  • ./extract-google_devices-crosshatch.sh(自行修改为手机对应驱动编译脚本文件)

三、开始编译

安卓源码刷机

一、准备刷机环境

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

内核源码构建与烧入

一、下载相应分支的源代码

在该网页中找到自己手机对应的内核版本

二、构建内核(编译)

  • 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)

刷机:

  1. adb root

  2. adb remount (将'/system' 部分置于可写入的模式)

    (执行上述命令的路径随意)

  3. adb reboot

  4. adb root

  5. adb remount

  6. adb shell

  7. cd system/framework

删除下面三个文件(如果没有就不用删除):

  1. rm -r oat

  2. rm -r arm

  3. rm -r arm64

  4. exit(退出adbshell模式)

  5. 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:

  1. adb shell stop
  2. adb shell start

重启手机

  1. adb reboot

pixel 3xl 编译安卓与内核并烧入全流程(含安卓源码部分编译)的更多相关文章

  1. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  2. Android : 修改内核源码 and 编译、打包成新的boot.img

    一.Android内核源码的下载: 1.Google GIT地址: $ git clone https://android.googlesource.com/kernel/common.git $ g ...

  3. 鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析OpenHarmony源码 | v58.01

    百篇博客系列篇.本篇为: v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o 本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿 ...

  4. 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01

    百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...

  5. 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙看这篇或许真的够了 | 百篇博客分析OpenHarmony源码 | v50.06

    百篇博客系列篇.本篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉 ...

  6. 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...

  7. Ubuntu下载源码并编译

    本文章将介绍如何在Ubunt下进行Linux源码下载,并进行简单的编译步骤. 1.下载linux源码 先查看对应的Ubuntu对应版本源码 $ sudo apt-cache search linux- ...

  8. Linux源码与编译出的目标文件汇编代码的一致性问题

    start_kernel是内核启动时比较重要的一个函数,然而我发现一个问题,我编译出来的目标文件中的汇编代码与C源码并不完全对应,这是怎么一回事呢? asmlinkage void __init st ...

  9. net-snmp源码VS2013编译添加加密支持(OpenSSL)

    net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...

  10. net-snmp源码VS2013编译添加加密支持(OpenSSL)(在VS里配置编译OpenSSL)

    net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...

随机推荐

  1. [SVN]SVN checkout 功能不可用 右键只看到提交和更新,没有显示checkout[转载]

    不要在受SVN控制的文件夹里点右键,因为这个文件夹已经在SVN控制之下,当然不会允许在里面嵌套另一个SVN版本库 换个不受控的文件夹点右键,比如: D盘根目录 X 参考文献 SVN checkout ...

  2. ILLA Cloud: 调用 Hugging Face Inference Endpoints,开启大模型世界之门

    一个月前,我们 宣布了与 ILLA Cloud 与达成的合作,ILLA Cloud 正式支持集成 Hugging Face Hub 上的 AI 模型库和其他相关功能. 今天,我们为大家带来 ILLA ...

  3. 事实胜于雄辩,苹果MacOs能不能玩儿机器/深度(ml/dl)学习(Python3.10/Tensorflow2)

    坊间有传MacOs系统不适合机器(ml)学习和深度(dl)学习,这是板上钉钉的刻板印象,就好像有人说女生不适合编程一样的离谱.现而今,无论是Pytorch框架的MPS模式,还是最新的Tensorflo ...

  4. Linux rsyslogd服务学习

    本篇笔记来自该博客: http://c.biancheng.net/view/1097.html 服务简介 在CentOS 6.x 中日志服务已经由 rsyslogd 取代了原先的 syslogd.r ...

  5. Marior去除边距和迭代内容矫正用于自然文档矫正

    一.简要介绍 本文简要介绍了论文" Marior: Margin Removal and Iterative Content Rectification for Document Dewar ...

  6. 性能_2 Jmeter脚本增强

    一.写脚本注意事项(回顾): 协议: http,https必须写 域名或ip: 不能有/ 请求方法: 看清楚接口文档 路径: 不要把 域名和ip再次 路径中,前后空格要看清楚 %20 空格的urlen ...

  7. EasyExcel设置单元格边框

    /** * 单元格边框 * @return {@link HorizontalCellStyleStrategy} * @date 2021/10/26 13:22 * @author <a h ...

  8. 2022-12-26:有一个数组包含0、1、2三种值, 有m次修改机会,第一种将所有连通的1变为0,修改次数-1, 第二种将所有连通的2变为1或0,修改次数-2, 返回m次修改机会的情况下,让最大的0

    2022-12-26:有一个数组包含0.1.2三种值, 有m次修改机会,第一种将所有连通的1变为0,修改次数-1, 第二种将所有连通的2变为1或0,修改次数-2, 返回m次修改机会的情况下,让最大的0 ...

  9. 2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是

    2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是 ...

  10. 2021-04-16:摆放着n堆石子。现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。求出将n堆石子合并成一堆的最小得分(或最大得分)合

    2021-04-16:摆放着n堆石子.现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.求出将n堆石子合并成一堆的最小得分(或最大得分)合 ...