前言
- 编译环境:Debian Buster AMD64
- 官方教程:源码获取 | 内核定制
- 源码地址:系统源码 | 内核源码
- 编译版本:Android-x86 9.0-r2
Git管理单独的模块,而repo管理所有的Git库,将多个Git库组合在一起,形成一个完整的系统
使用 repo init 获取 manifests 和 repo 库,使用 repo sync 获取 manifests 中的模块
如果报错可运行 repo sync –trace 获取出错的那几个文件属于哪个模块
然后到 .repo/manifest/default.xml 中将对应的模块删掉就好了,但可能编译错误
配置环境
- 安装编译所需依赖
1 | sudo apt install git curl gnupg zip unzip ccache xsltproc gettext repo \ |
- 若找不到repo包请添加contrib源或直接从谷歌下载
1 | sudo curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /usr/local/bin/repo |
- 从其他源安装OpenJDK
1 | # AOSP中的master分支在platform/prebuilts/jdk中有预编译版本的OpenJDK。因此主线分支无需再额外安装 |
获取源码
- 设置变量
1 | # 使用REPO前需要设置GIT的用户信息 |
- 拉取仓库
1 | mkdir android-source && cd android-source |
- 同步源码
1 | repo sync -j4 --no-tags --no-clone-bundle --current-branch |
编译源码
- 编译目标系统
1 | cd android-source |
- 编译后的文件
1 | 内核将在 out/target/product/x86_64/kernel |
- 指定配置文件
1 | # 默认配置文件在该路径中 kernel/arch/x86/configs/ ,编译时将自动使用变量 TARGET_PRODUCT 对应的 defconfig |
- 编译后的清理
1 | 1. 在源码目录的根目录下 make clean |
内核定制
- 自定义内核配置
1 | # 不建议直接编辑内核配置文件,因为它可能会生成不满足依赖性等错误的配置 |
- 仅构建内核用于其他的Android X86系统
1 | # 单独构建内核及其模块 |
- 构建包含定制内核的镜像
1 | 1. 如你已有合适的内核配置文件my_defconfig,可使用你的配置文件来构建包含定制内核的镜像ISO |
- 使用其他版本内核构建系统
1 | # 使用4.9内核构建9.0-r2 |
注意事项
Win10中WSL环境下编译会通不过,envsetup.sh脚本目前仅支持bash或zsh,其他自测。
编译Android 7~10使用JDK8,5~6使用JDK7,2.3~4.4使用JDK6,1.5~2.2使用JDK5
使用12线程编译ISO历时3个小时左右,16G内存最高时占用12G,需要的磁盘空间超过150G
使用CCACHE来提高编译速度
1 | export USE_CCACHE=1 # 开启CCACHE |
- 获取源码时的错误解决
1 | 错误:error: RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received. |
- 编译系统时的错误解决
1 | # Try increasing heap size with java option '-Xmx<size>'. 出现Xmx错误是由于电脑内存不足 |
- 编译Anbox镜像
1 | cd anbox |