当前位置: 首页 > news >正文

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.shBUILD_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 的流程是完全足够的。
在这里插入图片描述

http://www.dtcms.com/a/340360.html

相关文章:

  • Linux系统:C语言进程间通信信号(Signal)
  • RK3576赋能无人机巡检:多路视频+AI识别引领智能化变革
  • deque的原理与实现(了解即可)
  • 基于截止至 2025 年 6 月 4 日,在 App Store 上进行交易的设备数据统计,iOS/iPadOS 各版本在所有设备中所占比例详情
  • 比剪映更轻量!SolveigMM 视频无损剪切实战体验
  • shell变量进阶
  • 基于51单片机自动浇花1602液晶显示设计
  • Ubuntu-安装Epics Archiver Appliance教程
  • 玳瑁的嵌入式日记D21-08020(数据结构)
  • 服务器内存条不识别及服务器内存位置图
  • 认识Node.js及其与 Nginx 前端项目区别
  • 动手学深度学习(pytorch版):第五章节—多层感知机(1)层和块
  • 从异构计算视角审视ARM与FPGA:架构融合驱动智能时代计算范式革新
  • mybatis xml中表名 字段报红解决
  • S32K328(Arm Cortex-M7)适配CmBacktrace错误追踪
  • 生产电路板的公司有哪些?国内生产电路板的公司
  • 05-网关服务开发指南
  • 从零实现自定义顺序表:万字详解 + 完整源码 + 图文分析
  • 虚幻引擎目录结构
  • MYSQL-增删查改CRUD
  • Protobuf
  • AIStarter服务器版深度解析:与桌面版对比,解锁云端AI开发新体
  • STM32F4 外扩SRAM介绍及应用
  • word——如何给封面、目录、摘要、正文设置不同的页码
  • Web网站的运行原理1
  • 使用 mongosh 设置 MongoDB 账号密码
  • word——快速删除页眉横线
  • 微软宣布开源大模型gpt-oss在Azure平台实现性能突破
  • Azure 使用记录
  • Claude Code NPM 包发布命令