android kernel代码 common-android13-5.15 下载 编译

下载

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/kernel/manifest -b common-android13-5.15

cd common-android13-5.15

编译

BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.aarch64 build/build.sh

我们来详细讲解如何下载和编译适用于 Android 13 的 Linux 内核,版本为 common-android13-5.15。

这个过程主要分为几个步骤:搭建编译环境、获取源代码、配置内核、编译内核。我们将以在 Ubuntu 22.04 LTS 系统上编译为例。

第一步:搭建编译环境

首先,你需要安装必要的依赖包和工具链。

复制代码
安装基本依赖包:
bash

sudo apt update

sudo apt install -y git-core gnupg flex bison build-essential zip curl zlib1g-dev

libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev

lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python3

git make gcc g++ libssl-dev bc rsync ccache

安装特定版本的 Clang 编译器 (推荐):

Android 内核编译强烈推荐使用 Google 预构建的 Clang 编译器,而不是 GCC。我们会从 AOSP 的预构建仓库中获取它。在下一步下载源代码时,它会自动包含在 prebuilts/ 目录中。我们稍后会设置路径。

安装 Repo 工具:

repo 是 Google 开发的一个用于管理多个 Git 仓库的工具,Android 内核开发依赖它。

bash

mkdir -p ~/bin

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

chmod a+x ~/bin/repo

将 ~/bin 添加到你的 PATH 环境变量中。将下面这行添加到你的 ~/.bashrc 或 ~/.zshrc 文件末尾:

bash

复制代码
export PATH=~/bin:$PATH

然后执行 source ~/.bashrc 使其生效。

第二步:获取内核源代码

Google 为不同的 Android 设备和平台维护了多个内核仓库。common-android13-5.15 是一个"通用"内核,用于模拟器或作为其他设备的起点。

复制代码
创建一个工作目录并初始化 Repo 清单:
bash

mkdir android-kernel && cd android-kernel

初始化 Repo,指定分支(-b)。

复制代码
重要: 你需要指定正确的清单分支。对于 common-android13-5.15,通常使用 android13-5.15 分支。

清单仓库是 https://android.googlesource.com/kernel/manifest。

bash

repo init -u https://android.googlesource.com/kernel/manifest -b android13-5.15

这条命令会初始化 Repo,并下载当前清单(default.xml),它描述了所有需要下载的子项目(Git 仓库)。

同步源代码:

这一步会根据 manifest.xml 文件下载所有的内核源代码和预编译工具链。这是一个非常耗时的过程,取决于你的网速。

bash

repo sync -j$(nproc) # -j 使用你CPU核心数来并行下载,加快速度

同步完成后,你的 android-kernel 目录下会出现多个子目录,如 common/(通用内核代码)、prebuilts/(预构建的编译器)等。

进入内核目录:

common-android13-5.15 的源代码位于 common/ 目录。

bash

复制代码
cd common

第三步:配置和编译内核

现在源代码已经就绪,我们需要配置内核并启动编译过程。

复制代码
设置环境变量(构建配置):
你需要告诉构建系统要编译什么架构以及使用哪个配置。对于在 x86 主机上为 ARM 设备(或模拟器)编译,我们需要交叉编译。

    ARCH: 目标架构(例如 arm64, x86_64)

    CROSS_COMPILE: 交叉编译工具链的前缀

    CLANG_TRIPLE: Clang 工具链的目标三元组

    LLVM: 指向 Clang 编译器的路径

Google 提供了脚本来设置这些复杂的环境变量。最可靠的方法是使用他们提供的 build.config 文件。

对于 common 内核,通常有一个预定义的构建配置。你可以使用 build.sh 脚本。

使用 build.sh 脚本编译(推荐方法):
这是 Google 官方推荐的方法,它会自动处理所有的环境变量和配置。
bash

# 在 common/ 目录下执行
BUILD_CONFIG=common-modules/virtual-device/build.config.gki.x86_64 build/build.sh

    BUILD_CONFIG: 这个环境变量指定了使用哪个构建配置文件。这里我们选择为"虚拟设备"(如模拟器)编译一个 x86_64 架构的 GKI(通用内核映像)内核。

    build/build.sh: 这是 Google 提供的主要构建脚本。

其他常见的 BUILD_CONFIG 例子:

    为 ARM64 设备编译:BUILD_CONFIG=common-modules/virtual-device/build.config.gki.aarch64

    为 Pixel 设备编译会有特定的配置文件(如 build.config.floral)。

等待编译完成:
编译过程会需要一些时间。如果成功,你会在终端看到类似 Kernel build successful 的消息。

第四步:找到编译产物

编译成功后,输出文件(内核映像、模块等)位于 out/ 目录下,具体路径由 BUILD_CONFIG 决定。

对于上面的 x86_64 例子,路径通常是:

bash

ls -la out/android13-5.15/common-modules/virtual-device/dist/

在这个 dist/ 目录下,你应该能找到最重要的文件:

复制代码
kernel-5.15-xxx: 压缩的内核映像文件(例如 bzImage 用于 x86)

System.map-5.15-xxx: 内核符号映射文件

多个 *.ko 文件:内核模块

常见问题与疑难解答

复制代码
repo init 或 repo sync 失败:

    网络问题: 由于网络原因,访问 android.googlesource.com 可能会不稳定。可以尝试使用代理或更换网络环境。

    镜像源: 清华大学提供了 AOSP 的镜像源,但内核仓库可能需要单独配置,有时不如直接访问官方源稳定。

编译失败:

    依赖缺失: 最常见的原因是第一步的依赖包没有安装完全。仔细检查错误信息,它通常会提示缺少哪个库或工具。

    Python 版本: 确保你的系统默认 python 是 python3。可以通过 sudo update-alternatives --config python 来设置。

    Clang 版本: 确保使用的是 prebuilts/ 目录下的 Clang,而不是系统自带的。build.sh 脚本会自动处理这一点。

    内存不足: 编译内核需要大量内存。如果内存不足,可以减少编译并行任务数,使用 make -j2 而不是 -j$(nproc)(但使用 build.sh 时不需要手动指定)。

如何清理编译结果?
bash

# 在 common/ 目录下
build/build.sh clean
# 或者手动删除 out/ 目录
rm -rf out/

总结

整个过程的核心步骤是:

复制代码
准备环境:安装所有必要的软件包。

获取代码:使用 repo 工具同步 android13-5.15 分支的源代码。

执行编译:在 common/ 目录下,使用 BUILD_CONFIG=... build/build.sh 命令来触发自动化编译流程。

对于为真实设备(如 Pixel 7)编译内核,过程会更为复杂,需要获取该设备特定的内核配置和可能需要的专有驱动程序blob。但为模拟器或学习目的,上述 common-android13-5.15 的流程是完全足够的。

相关推荐
胖虎121 分钟前
Android 入门到实战(三):ViewPager及ViewPager2多页面布局
android·viewpager·viewpager2
Lx3522 小时前
Hadoop小文件处理难题:合并与优化的最佳实践
大数据·hadoop
风往哪边走2 小时前
Media3在线本地视频播放器
android
Monkey-旭2 小时前
Android 人脸识别技术全解析
android·android 人脸识别·ml kit 实战·活体检测技术·人脸识别性能优化·人脸考勤系统·移动端人脸特征提取
绝缘体12 小时前
折扣大牌点餐api接口对接适合本地生活吗?
大数据·网络·搜索引擎·pygame
huisheng_qaq3 小时前
【ElasticSearch实用篇-03】QueryDsl高阶用法以及缓存机制
elasticsearch·缓存·nosql·querydsl·score打分机制
vivo互联网技术3 小时前
桌面挂件不能承受之重——GIF
android·gif加载·桌面挂件
君不见,青丝成雪3 小时前
浅看架构理论(二)
大数据·架构