Android源码kernel编译
Android 源码由 Google 管理,下载源码之前请先明确自己下载源码的目的,总结下,总共有如下几种:
- 阅读,查阅;
- 编译调测制作对应手机 root 包;
- 编译定制对应手机 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编译相关推荐
- java编译使用androidsdk,详解Android源码的编译
本文将为大家介绍的是如何设置Android源码的编译环境,包括Linux下的配置.主要基于Android 1.0环境,希望对大家了解Android开发有所帮助. 本次编译过程主要参考官方文档(http ...
- 简诉android源代码编译过程,详解Android源码的编译
在这里我们将介绍的是Android源码的编译,主要基于Android 1.0环境下.希望对大家有所帮助. 本文将为大家介绍的是如何设置Android源码的编译环境,包括Linux下的配置.主要基于An ...
- android 清华镜像,清华镜像网站下载android源码并编译
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 下载android源码方法: 我的系统是ubuntu 18.04,主要参考了blog通过清华大学镜像下载Android源 ...
- 详解Android源码的编译
编译环境:Ubuntu8.10 1.安装一些环境 1.sudo apt-get install build-essential 2. sudo apt-get install make 3. sudo ...
- [记录] android源码下载编译
记录一下android整个代码的下载和编译过程 一.下载android源码 由于国内不能访问googlesource网站,所以下面所有的代码都需要借助清华开源镜像站下载. 首先创建一个android文 ...
- android源码模块编译错误,Android 源码编译错误记录
构建环境 mac os 10.14.5 在构建过程中报如下错误: Could not find a supported mac sdk: ["10.10" "10.11& ...
- android 源码下载编译
引用:http://www.2cto.com/kf/201202/121175.html 最新的android4.0源代码公布以后,相信很多人和我一样都跃跃欲试,其实4.0的代码下载和编译和以前的版本 ...
- Android:源码环境编译自定义的APP到ROM(System Image)中
有时候我们需要在源码环境中增加自己的应用或模块,随ROM一起发布. 下面讲述相关步骤: 1. 首先可以在SDK环境下进行编码设计(如果你的APP不涉及到emulator无法模拟的硬件的话) 也可以参考 ...
- Android源码模块编译
2019独角兽企业重金招聘Python工程师标准>>> Android源码目录下的build/envsetup.sh文件,描述编译的命令 - m: Makes from ...
最新文章
- centos6.4安装nagios—4.0.8
- 不起眼的夫妻店,为何会被阿里、京东、苏宁同时盯上?
- c++ 链表_算法学习笔记 - 链表 - 单链表的粗糙实现
- MySQL主键的理解
- jzoj4671-World Tour【图论,bfs】
- linux fdisk 权限不够,Linux 文件系统结构、磁盘的管理
- MySQL索引、事物
- 350 个在家办公的人,创造了估值 10 亿美元的代码共享平台
- Redis实践操作之—— keyspace notification(键空间通知)
- sql server删除主键约束所想到的
- Python调用微博API
- c语言的fprintf函数的用法,fprintf 和fscanf 函数
- SQL NOW() 函数
- Windows易升升级指南(解决大版本间更新95%的问题)
- “打开文件所在位置”提示“找不到应用程序”的解决方案
- java实现简单的文件下载
- ColorOS 13流畅吗?看OPPO在系统上做了哪些升级?
- centos7下安装pg数据库
- MySQL数据库软件安装
- IE主页无法修改的办法