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 的流程是完全足够的。

相关推荐
帅次10 小时前
Android 高级工程师面试:Flow 与状态流 近1年高频追问 22 题
android·面试·职场和发展
新e选店长10 小时前
新e选烤火罩使用相关问题、购买相关问题、售后相关问题。
大数据·科技·物联网·材质·烤火罩
雨季余静10 小时前
RustDesk Android APK 从零编译全步骤
android
法雅特吉他11 小时前
国产吉他品牌技术发展与市场格局分析
大数据·经验分享·新媒体运营·学习方法·流量运营·材质·内容运营
我的温馨家园11 小时前
新手入局干细胞研究的五大认知陷阱
大数据·人工智能·精选
辰合软件11 小时前
通达OA目录结构与核心文件解析
android·数据库·oracle
小羊Yveesss11 小时前
2026年外贸建站服务器怎么选?访问速度、稳定性和海外收录怎么判断
大数据·运维·服务器
ACP广源盛1392462567311 小时前
GSV6155 @ACP#工业车规 DP1.4 重定时器 Retimer
大数据·人工智能·分布式·嵌入式硬件
通玄11 小时前
Jetpack Compose 入门系列(八):Compose 中的副作用处理
android
海兰11 小时前
【AI编程思考:第八篇】从演示到生产:AI工程部署实战指南
大数据·人工智能·ai编程