首页文章[Android]从零开始的内核编译手机型号查询「[Android]从零开始的内核编译」

[Android]从零开始的内核编译手机型号查询「[Android]从零开始的内核编译」

时间2025-01-17 07:54:55发布yu分类文章浏览157
导读:本教程将基于小米 10S 的内核源码进行实例,其他型号的手机请自行寻找内核源码。具体内容可以参考我的内核编译项目。 在安卓设备终端()上执行: 并寻找带有 这一行,里面的内容即为你的手机代号,例如: 在安卓设备终端()上执行: 我的设备显示为 , 即可判断我的设备架构为 。 在安卓设备终端()上执行:...

本教程将基于小米 10S 的内核源码进行实例,其他型号的手机请自行寻找内核源码。具体内容可以参考我的内核编译项目。

在安卓设备终端()上执行:


并寻找带有 这一行,里面的内容即为你的手机代号,例如:



在安卓设备终端()上执行:


我的设备显示为 , 即可判断我的设备架构为 。

在安卓设备终端()上执行:


输出内容的格式为:

  • [版本].[补丁版本].[子版本号]-[内核标识]-[提交记录]

例如我的设备显示为

内核源码的一般格式为 ,例如,小米 10S(thyme)的代号为 , CPU 型号为 ,生产厂商为 ,则搜索格式应为下面几种:


以下是我收集的一些小米 10S(thyme)的源码仓库:

  • Lynnrin-Studio/android_kernel_xiaomi_thyme: 这是我目前编译内核所使用的内核源码。
  • UtsavBalar1231/kernel_xiaomi_8250: CLO 内核升级为 CAF 标签 ,AOSP 源码同步上游 。
  • WeeAris/RK-KSU-mi-kernel-8250: 支持 的 Rohail33/RealKing-kernel-8250 分支。
  • Rohail33/RealKing-kernel-8250: 基于 标签的内核。

当然除此之外还有很多源码,但这些源码对于我来说是我前期学习的一个途径,因此在这里列出给大家。

途径具体介绍各厂商开源小米内核开源
华为开源代码去手机社区找源码XDA 论坛

强烈推荐您学习[内核向] 交叉编译器的选择以及[白话文版] ClangBuiltLinux Clang 的使用来学习工具链的配置。

同时可以配合 Neutron-Clang 的说明文档来进行编译参数配置。

目前比较推荐的几个预编译工具链如下:

工具名称简介Neutron-Clang这是为内核开发构建的 LLVM 和 Clang 编译器工具链。构建始终是从最新的 LLVM 源代码而不是稳定版本构建的,因此无法保证完全的稳定性。阿菌•未霜 Clang/LLVM Toolchain with Binutils这是一个预构建的工具链,构建始终来自最新的 LLVM 和 Binutils 源而不是稳定版本,因此无法保证完全的稳定性。它是用 Full LTO、PGO 和 BOLT 构建的,以尽可能减少编译时间。ClangBuiltLinux/tc-build类似前两个工具,但是这个工具需要自己在本地从 LLVM 的源码进行构建,但编译时间较长。

除此之外,一个比较保险的方法是从预编译内核机器的 提取`,需要对应版本的交叉编译器以及 Clang,自行选择合适版本下载即可,通过这种方式编译出来的内核一般是不会存在错误的。

这是为内核开发构建的 LLVM 和 Clang 编译器工具链。构建始终是从最新的 LLVM 源代码而不是稳定版本构建的,因此不能保证完全的稳定性。目前该编译链工具使用 来同步工具,具体使用方法如下:


一些更多的 命令:

功能对应命令同步最新的工具链构建 或 同步特定的工具链版本检查更新检查更新和同步更新同步特定更新删除同步构建显示有关同步构建的信息同步特定的工具链版本

如果需要更多细节介绍,请运行 获取。

如果您想要使用这个工具链的话,那么其中的编译工具则需要你自行编译,对应的编译脚本为 ClangBuiltLinux/tc-build。

诚然,自行编译确实是一件造轮子且费时费力的方法,但是通过这种方式编译出来的工具是最适合您的系统的,不会发生其他的编译中的关于 等方面的错误。

这是一个预构建的工具链,构建始终来自最新的 LLVM 和 Binutils 源而不是稳定版本,因此无法保证完全的稳定性。它是用 Full LTO、PGO 和 BOLT 构建的,以尽可能减少编译时间。

其编译链工具存储在:

  • GitHub:仅用于发布预构建的压缩文件(*.7z)
  • Gitea:仅用于存储预构建的二进制文件(Current AR Archive、ELF 64-bit L shared object 存储在 LFS)

内核编译流程其实只有两步:

  1. 生成对应设备的配置文件
  2. 开始编译内核

您可以直接执行这些指令进行编译(参数设置一定要正确),或参考我下面的编译流程:

最简单的设置环境办法就是将编译链工具的路径添加到系统路径中,例如:


如果您在使用 ,可能还需要将 工具链的路径加入到环境变量中。

首先给出一个最基础的配置脚本:


该脚本是在使用上一节的三个工具时才可以正常使用的,如果您使用其他工具可以需要进行其他配置。

下面是一些参数对应的说明:

参数说明一般参数指定使用的编译器,因为 默认使用 ,因此实际上只有你在使用 进行编译的时候才会使用该参数您的主要交叉编译链工具,如果你在使用谷歌的 gcc 4.9,请指定参数为 ,32 位同理只在使用 进行编译的时候才需要使用,用于指定当 不生效时候使用的工具链,但在使用上一节我们提到的工具中基本不用设置该参数只在编译 32 位内核或者带 vdso 补丁的内核时需要指定该参数类似于参数 ,但内核版本为 4.19 及更新版本应使用本参数而非

更多参数介绍可以参考一下 Neutron-Clang 的编译说明,里面对于一些参数的说明比较详细。

正常情况下,clang 是无法独立完成内核编译的,需要 gcc 的辅助。但使用上一节介绍的几种工具并不需要并不需要单独指定 来辅助编译。

  • DogDayAndroid/KSU_Thyme_BuildBot:我自己编译的内核使用的本地编译脚本。
  • UtsavBalar1231/Drone-scripts:一个很多人使用的编译脚本,我的部分代码也是参考自这里。
  • EndCredits/kernel_xiaomi_7250:同样的一个编译脚本,但并未提供编译链,但是其中的脚本流程我也有参考。
  • xiaoleGun/KernelSU_Action: 的编译脚本,同样有参考。

内核编译完成后的打包请参考文章[内核向] 论如何优雅的刷入内核,目前最流行的方法是使用 o0sis/AnyKernel3 来完成整个内核的打包刷入工作。

如果您更喜欢自己动手,那么请参考文章内的其他方法。

值得注意的是,不同版本的内核编译出来的内容并不相同,因此需要区分他们之间的打包,详情请参考文章:关于 Image.xx-dtb 和 Image.xx + dtb 的区别。

来自文章的评论区:_对应芯片组的。比如 865 只需要 kona-v2.1.dtb。如果弄不清楚,可以使用 cat 命令将多个 dtb 连接在一起,bootloader 会自动识别。


本教程将基于小米 10S 的内核源码进行实例,其他型号的手机请自行寻找内核源码。具体内容可以参考我的内核编译项目。


您可以修改 为 ;或者去除MakeFile 中对应错误限制。

  • 自己编译定制一个牛逼的安卓内核
  • 让 Android 手机更省电流畅,你可以试试「刷内核」
  • [内核向] 交叉编译器的选择
  • [白话文版] ClangBuiltLinux Clang 的使用
  • Neutron-clang 的编译说明
  • [内核向] 论如何优雅的刷入内核

海宁版权声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com

展开全文READ MORE
从零开始手机型号编译
我们为何戒不掉“手机依赖”?手机上瘾「我们为何戒不掉“手机依赖”?」 JAVA基于J2ME的手机游戏开发免费java手机游戏「JAVA基于J2ME的手机游戏开发免费」