Android 源码由 Google 管理,下载源码之前请先明确自己下载源码的目的,总结下,总共有如下几种:

  1. 阅读,查阅;
  2. 编译调测制作对应手机 root 包;
  3. 编译定制对应手机 ROM;

其中第2,3可以归纳为同一个目的,下载源码并编译在手机运行。

一、确保分区大小写敏感

对于 Mac 10.13 以上、使用 APFS 分区的场景:

运行“磁盘工具”,选择“添加宗卷”,选择“APFS区分大小写”。

二、下载对应 Tag 及版本镜像

查阅 Google 官网上

https://source.android.google.cn/setup/start/build-numbers?hl=zh-cn#source-code-tags-and-builds

android-7.1.2_r28   N2G48C

下载命令:

repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.2_r28

镜像文件下载地址:

https://developers.google.com/android/images

三、下载对应的 kernel 代码

kernel 内核为单独一个仓,由于 nexus 6p 为高通平台,下载msm即可。

git clone https://android.googlesource.com/kernel/msm

msm 内核项目是 Google 公司针对高通 msm 移动芯片组(骁龙处理器)而开发的内核项目

我们可以在设置 > 关于手机 > 内核版本 中直接查看内核版本信息,也可以通过 cat /proc/version 命令查看。内核版本信息的格式为 kernel version-gXXXXXXX ,其中 XXXXXXX 部分的值是 git 提交中的 short commit id的值

在本地 git clone 后,本地只有一个 master 分支,git checkout d59db4e -b 分支名 为下载对应版本的源码并新建对应tag分支。

四、修改 kernel 源码中 Makefile

将 msm 目录下的 Makefile 文件中 ARCH 和 CROSS_COPMPILE 修改为如下

Mac路径

ARCH           ?= arm64
CROSS_COMPILE  ?= /Volumes/winsky/aosp/prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-

其中 CROSS_COPMPILE 为交叉编译工具,路径在 Android 源码 Prebuilts 对应目录下。

Mac路径需要选择 darwin-x86 路径下

Liunx 路径设置

ARCH           ?= arm64
CROSS_COMPILE   ?= /home/ivan/android_nexus6p/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-

五、开始编译内核

make  angler_defconfig
make

编译完成后,生成的 Image.gz-dtb 在 arch/arm64/boot/Image.gz-dtb路径下

编译过程中,以下错误都是由于环境未配置好导致的编译错误,以及网上找的解决办法

error: 'vdso_offset_sigtramp' undeclared (first use in this function) (void *)(vdso_offset_##name - VDSO_LBASE + (unsigned long)(base)); \
更改文件
更改arch/arm64/kernel/vdso/gen_vdso_offsets.sh脚本
中
's/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2\t0x\1/p'
改为
's/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2  0x\1/p'

其他错误

编译过程中会出现 elf.h 找不到的问题

安装 libelf

http://stackoverflow.com/questions/10018764/building-linux-kernel-on-mac-os-x
https://forum.xda-developers.com/android/help/failed-to-build-arm64-goldfish-kernel-t3342461
http://lukeat.me/2017/03/20/Build-Android-Kernel-of-ARM64-on-OS-X/

六、生成 boot.img 镜像

在路径 kernel\msm\arch\arm64\boot 中将编译生成的 Image.gz-dtb 复制到Android 源码路径device\huawei\angler-kernel 路径中 nexus6p 的代号为 angler 华为代工,故在以上路径。 回到android源码根目录,进行环境设置

source build/envsetup.sh
Lunch 选择angler相关选项(如果需要编译其他内核,选择对应即可)
make bootimage -j4

最终生成的 bootimage 在 Android 源码 out/target/product/angler/boot.img 下

运行烧写命令:

adb reboot bootloader  ----进入Bootloaer
fastboot flash boot bootimage
fastboot reboot

以上编译出来的 boot 镜像为未 root 权限镜像。

如需要编译 root 权限镜像,以此运行如下命令:

source build/envsetup.sh
Lunch 选择 angler 相关选项(如果需要编译其他内核,选择对应即可)
choosecombo 选择 angler,最后一项选择 eng 即可,root 的关键是编译时选择 eng。
(或者直接运行命令 choosecombo 1 aosp_angler 3 默认选择好eng)
make bootimage -j4

编译过程中可能存在的问题:

(一)lunch 过程中会出现找不到 xcode 不支持

解决办法就是将 mac_sdk_versions_supported 改为系统中所装版本

 #mac_sdk_versions_supported := 10.6 10.7 10.8 10.9
mac_sdk_versions_supported := 10.11

所以我们需要下载其他的 sdk 放到这个文件夹下面

我是在这个网站下载的, 没有任何问题  https://github.com/phracker/MacOSX-SDKs/releases 参考链接 http://www.jianshu.com/p/1513fc9e1a74

(二)编译过程中会提示头文件定义冲突

external/libcxx/include/cmath:683:46: error: declaration conflicts with target of using declaration already in scope

回退到 8.3.3

(三)出现 error: ‘syscall’的错误

将 xcode 回退到 8.3.3 即可

(四)bison 编译错误

[ 85% 2068/2406] Yacc: checkpolicy <= external/selinux/checkpolicy/policy_parse.y
FAILED: /bin/bash -c "prebuilts/misc/darwin-x86/bison/bison -d -v --defines=out/host/darwin-x86/obj/EXECUTABLES/checkpolicy_intermediates/policy_parse.h -o out/host/darwin-x86/obj/EXECUTABLES/checkpolicy_intermediates/policy_parse.c external/selinux/checkpolicy/policy_parse.y"
[ 85% 2068/2406] target  C: libcrypto_static <= external/boringssl/src/crypto/ec/p256-64.c
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error 1

按照如下步骤解决

https://android-review.googlesource.com/c/platform/external/bison/+/517740/1/lib/vasnprintf.c   ---源码Bug
Patch bison fix for High Sierra and build bison:◦   cd /Volumes/AOSP/external/bison◦    git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160◦   mma•    Replace prebuilt bison binary with patched binary◦  cp /Volumes/AOSP/out/host/darwin-x86/bin/bison /Volumes/AOSP/prebuilts/misc/darwin-x86/bison/

参考链接:

https://groups.google.com/forum/#!searchin/android-building/prebuilts2Fmisc2Fmisc2Fdarwin-x862Fbison2Fbison2Fbison|sort:date/android-building/D1-c5lZ9Oco/h2kAzh7SAwAJ

七. 编译单模块

修改了FingerprintManager源码,如下路径 frameworks\base\core\java\android\hardware 配置好环境后执行:make framework

修改了FingerprintServices,如下路径 frameworks\base\services\core\java\com\android\server\fingerprint 配置好环境后编译命令:make services

附录

思考: Android 内核和linux 内核的区别 参考文章: http://blog.csdn.net/codemydream/article/details/53819312

华为开源内核编译指导

https://www.modaco.com/forums/topic/377314-how-to-build-the-kernel-for-your-huawei-p9-plus/

Android源码kernel编译相关推荐

  1. java编译使用androidsdk,详解Android源码的编译

    本文将为大家介绍的是如何设置Android源码的编译环境,包括Linux下的配置.主要基于Android 1.0环境,希望对大家了解Android开发有所帮助. 本次编译过程主要参考官方文档(http ...

  2. 简诉android源代码编译过程,详解Android源码的编译

    在这里我们将介绍的是Android源码的编译,主要基于Android 1.0环境下.希望对大家有所帮助. 本文将为大家介绍的是如何设置Android源码的编译环境,包括Linux下的配置.主要基于An ...

  3. android 清华镜像,清华镜像网站下载android源码并编译

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 下载android源码方法: 我的系统是ubuntu 18.04,主要参考了blog通过清华大学镜像下载Android源 ...

  4. 详解Android源码的编译

    编译环境:Ubuntu8.10 1.安装一些环境 1.sudo apt-get install build-essential 2. sudo apt-get install make 3. sudo ...

  5. [记录] android源码下载编译

    记录一下android整个代码的下载和编译过程 一.下载android源码 由于国内不能访问googlesource网站,所以下面所有的代码都需要借助清华开源镜像站下载. 首先创建一个android文 ...

  6. android源码模块编译错误,Android 源码编译错误记录

    构建环境 mac os 10.14.5 在构建过程中报如下错误: Could not find a supported mac sdk: ["10.10" "10.11& ...

  7. android 源码下载编译

    引用:http://www.2cto.com/kf/201202/121175.html 最新的android4.0源代码公布以后,相信很多人和我一样都跃跃欲试,其实4.0的代码下载和编译和以前的版本 ...

  8. Android:源码环境编译自定义的APP到ROM(System Image)中

    有时候我们需要在源码环境中增加自己的应用或模块,随ROM一起发布. 下面讲述相关步骤: 1. 首先可以在SDK环境下进行编码设计(如果你的APP不涉及到emulator无法模拟的硬件的话) 也可以参考 ...

  9. Android源码模块编译

    2019独角兽企业重金招聘Python工程师标准>>> Android源码目录下的build/envsetup.sh文件,描述编译的命令 - m:       Makes from ...

最新文章

  1. centos6.4安装nagios—4.0.8
  2. 不起眼的夫妻店,为何会被阿里、京东、苏宁同时盯上?
  3. c++ 链表_算法学习笔记 - 链表 - 单链表的粗糙实现
  4. MySQL主键的理解
  5. jzoj4671-World Tour【图论,bfs】
  6. linux fdisk 权限不够,Linux 文件系统结构、磁盘的管理
  7. MySQL索引、事物
  8. 350 个在家办公的人,创造了估值 10 亿美元的代码共享平台
  9. Redis实践操作之—— keyspace notification(键空间通知)
  10. sql server删除主键约束所想到的
  11. Python调用微博API
  12. c语言的fprintf函数的用法,fprintf 和fscanf 函数
  13. SQL NOW() 函数
  14. Windows易升升级指南(解决大版本间更新95%的问题)
  15. “打开文件所在位置”提示“找不到应用程序”的解决方案
  16. java实现简单的文件下载
  17. ColorOS 13流畅吗?看OPPO在系统上做了哪些升级?
  18. centos7下安装pg数据库
  19. MySQL数据库软件安装
  20. IE主页无法修改的办法

热门文章

  1. 探测能源、跨洲安全通信……你所想不到的量子技术!
  2. 框架神器:struts2标签库
  3. 引领Boost(二)(Boost::Any)
  4. 是什么让我们聚在一起
  5. win10+GTX1070+keras+Anaconda+python3.5安装记录
  6. Tensorflow学习笔记-第二节程序结构
  7. 后台admin省市县镇公共组件
  8. vue 父组件给子组件传值
  9. anaconda使用pythonnotebook_anaconda3 notebook for python数据分析-环境搭建
  10. Vue实例-本地留言板