当前位置: 首页 > 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

http://www.lryc.cn/news/113526.html

相关文章:

  • 如何做好Code Review
  • Unity技术框架集合、Unity技术栈汇总
  • 安卓SDK开发的一些疑问
  • 【基础类】—三栏页面布局的方案和优缺点
  • OPENCV C++(四)形态学操作+连通域统计
  • tomcat上部署jpress
  • 篇十:外观模式:简化复杂系统
  • linux gcc __attribute__
  • 【SpringCloud】RabbitMQ基础
  • css, resize 拖拉宽度
  • Python识别抖音Tiktok、巨量引擎滑块验证码识别
  • EvilBox One靶场笔记
  • shell脚本中的export无效
  • 前沿分享-鱼形机器人
  • 摄像机终端IP地址白名单配置流程
  • Glibc—查看版本
  • C++物理引擎Box2D的下载,编译,VS2013配置环境
  • STL容器详解——map容器
  • VR全景在建筑工程行业能起到哪些作用?
  • P1257 平面上的最接近点对
  • 8月1日上课内容 第一章web基础与http协议
  • Gson 添加数据默认值问题记录
  • 利用Arthas+APM监控进行Java性能深度定位
  • 【BASH】回顾与知识点梳理(十一)
  • vue2-diff算法
  • SpringBoot使用redis作为缓存的实例
  • vue3使用vue3-seamless-scroll插件
  • QT开发学习相关笔记
  • 拆分PDBQT文件并将其转换为PDB格式
  • Reinforcement Learning with Code 【Code 4. DQN】