编译安卓源码、内核,刷入NEXUS 6P记录

目录

前言

一、下载原生系统到手机

二、编译android源码刷入

1.编译环境

2.下载安卓源代码

3.编译

4.运行

 三、内核下载编译

总结



前言

记录下如何编译安卓源码以及内核,刷入到手机的过程


一、下载原生系统到手机

弄了个NEXUS 6P,刚开始就想着刷下安卓原生的系统,折腾折腾。

从官网下载系统包 https://developers.google.com/android/images?hl=zh-CN

可以看到这个有两种类型,内容相同,封包方式不同(区别):

Full OTA Image : recovery模式下,可以放在sdcard上选择刷入(卡刷).OTA镜像,分为增量和全量包,增量包需要在特定的版本上使用

Factory Image :  通过fastboot来刷入(线刷),手机需要解锁

这里我选择,工厂镜像,刷入的步骤,官网上描述很详细.

  1. 先下载对应的包,右侧选择点击自己的机型,跳转后选择想刷入的系统版本,我这里随便选了个6.0.1 (MTC20L)版本
  2. 进行解锁 : 打开开发者模式调试ADB,通过ADB连接手机,adb reboot bootloader 进入Bootloader模式.fastboot devices查看下手机是否正常连接,fastboot flashing unlock解锁命令进行解锁
  3. 刷写命令 :可以执行下载下来镜像包自带的脚本来进行刷写.(查看脚本,理解刷写的顺序和内容)

注意:WIN可能无法连接手机,需要先安装驱动.https://developer.android.com/studio/run/win-usb.WIN环境下ADB、FASTBOOT工具

PS:fastboot 其他一些命令

数据清除命令:
    清空 cache 分区 : fastboot erase cache
    格式化内部存储数据 : fastboot format userdata
    格式化设备全部数据 : fastboot -w
重启命令
    重启到 BL 模式:fastboot reboot bootloader
    重启设备:fastboot reboot


二、编译android源码刷入


1.编译环境

系统:ubuntu 14.04

安装JDK:Android6.0->OpenJDK7、Android6.0以上->OpenJDK8.

sudo apt-get install openjdk-7-jdk

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk

JDK环境变量的设置(两种方式):

1.修改/etc/profile文件
2.修改人用户主目录下的.bash_profile文件

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-jdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

部分依赖安装:

sudo apt-get install g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
sudo apt-get install m4
sudo apt-get install libxml2-utils

2.下载安卓源代码

(从清华大学的镜像站下载,下载步骤网站也描述的比较详细AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror):

下载repo工具,脚本文件,封装了下载Android源代码git命令(系统的python是2.x版本,可能需要使用旧版的repo工具).下载后需要放到/usr/local/bin下或者将repo所在路径添加到环境变量下.并将文件添加执行权限.

初始化仓库
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-6.0.1_r21 -b不指定版本的话,是最新的分支.版本及对应的标记:https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds

切换分支 repo init -b android-6.0.1_r62

同步 repo sync

3.编译

source build/envsetup.sh(该步骤把envsetup.sh里的函数声明为当前会话终端可用的命令,初始化编译环境,并引入一些辅助的Shell函数)

build/envsetup.sh 中定义的常用函数

lunch,指定编译的目标设备以及编译类型.aosp_angler-userdebug.

angler是nexus 6p的代号(code name)

user 用于正式产品 
userdebug 和user类似,但是有root权限,并且可以调试,主要用于调试 
eng 开发用的选项,配有额外的调试工具。

4.运行

模拟器位于,prebuilts/android-emulator/linux-x86_64/emulator,可以指定运行文件,默认的运行文件不知道使用的哪个。编译结果如下图,单独将各img刷入手机即可(除boot.img和vendor.img)。


 三、内核下载编译

Android源代码不包含Linux内核的源代码,需要单独下载编译.

下载:git clone https://aosp.tuna.tsinghua.edu.cn/kernel/msm.git

cd msm

git branch -a 查看版本

git checkout 3.10.73-g8bac269(选择刷入安卓6.0.1 MTC20L 版本时,对应内核版本)

// 将交叉编译工具加入到路径中
# export PATH=$PATH:~/android-6.0.1_r62/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin
// 设置目标架构
# export ARCH=arm64
# export SUBARCH=arm64
// 设置编联合编译方式,不要漏了最后边的“-”
# export CROSS_COMPILE=aarch64-linux-android-
// 目标硬件配置
# make angler_defconfig
# make

编译后的成果物是Image.gz-dtb、怎么刷入手机比较疑惑.百度了波,有说使用Android Image Kitchen工具将原生boot.img,解压后替换其中的boot.img-zImage,然后再重新打包.但是我解包boot.img后并没有发现boot.img-zImage.

最后采用方式

在路径kernel\msm\arch\arm64\boot中将编译生成的Image.gz-dtb复制到Android源码路径device\huawei\angler-kernel路径中nexus6p的代号为angler华为代工,故在以上路径.或者回到android源码根目录,进行环境设置
export TARGET_PREBUILT_KERNEL=kernel/msm/arch/arm64/boot/Image.gz-dtb
source build/envsetup.sh 
Lunch 选择angler相关选项(如果需要编译其他内核,选择对应即可)
make bootimage -j4



总结

end

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值