• 主页
  • 归档
  • 软件
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 软件

浅谈安卓内核的碎片化

2023-07-19

如题所见,这篇文章浅谈一下安卓内核的碎片化。
我编译过安卓内核我觉得我应该有话语权.jpg

gki时期

这里指gki2.0时期。gki1.0不在讨论范围内

什么是gki?

谷歌官方对gki的介绍:

通用内核映像 (GKI) 项目通过统一核心内核并将 SoC 和板级支持从核心内核移至可加载模块中,解决了内核碎片化问题。GKI 内核为内核模块提供了稳定的内核模块接口 (KMI),因此模块和内核可以独立进行更新。

GKI 2.0

搭载 Android S (2021) 平台版本且使用内核版本 v5.x(5.x 是 2020 年年底被选为 LTS 的内核版本)或更高版本的设备必须附带 GKI 内核。将提供已签名的启动映像,并通过 LTS 和重大问题修复定期对其进行更新。由于 KMI 将保持二进制稳定性,因此无需对供应商映像进行任何更改,即可安装这些启动映像。

gki的特性

  • 基于 ACK 来源构建而成。
  • 是每个架构和每个 LTS 版本的单内核二进制文件以及关联的可加载模块(目前只有适用于 android11-5.4 和 android12-5.4 的 arm64)。
  • 已经过关联 ACK 支持的所有 Android 平台版本的测试。在 GKI 内核版本的生命周期内不会发生功能弃用。
  • 为给定 LTS 中的驱动程序提供了稳定版 KMI。
  • 不包含 SoC 专用代码或板卡专用代码。

图片

这就意味着只要内核是gki内核,就可以通刷同内核大版本(例如5.15.xxx)的内核。
某些厂商将私有代码集成在了内核里面。刷入gki内核将丢失私有代码所产生的特性。例如小米的机器刷完gki后会丢快充。

非gki时期

主要指的是内核版本为4.x或3.x的内核版本时期。这一阶段,厂商内核的碎片化是极其严重的。
一般地,android kernel的来源是这样的:

linux kernel > aosp kernel > 供应商添加soc或外围设备的驱动及特性 > oem厂商添加附加特性 > android kernel

供应商内核和设备内核位于 ACK 的下游。供应商通过修改内核源代码并添加设备驱动程序,添加了对 SoC 和外围设备的支持。这些修改内容可能很多,以至于设备上运行的代码中有多达 50% 是树外代码,并非来自上游 Linux 和 AOSP 通用内核。
图片

几乎所有设备都具有自定义内核。这就导致了内核碎片化问题。

aosp kernel

众所周知,android不是gnu/linux,这就意味着aosp kernel和linux kernel会有一些不同。

AOSP通用内核(也称为 Android 通用内核或 ACK)是 kernel.org 内核的下游,包含与 Android 社区相关但尚未合并到 Mainline 内核或长期支持 (LTS) 内核的补丁程序。这些补丁程序可能包括:

  • Android 功能所需的向后移植和精选的上游功能
  • 可供 Android 设备使用但仍处于上游开发阶段的功能(例如,Energy Aware Scheduler 任务放置优化)。
  • 对其他生态系统合作伙伴有用的供应商/原始设备制造商 (OEM) 功能(例如,sdcardfs)。

目前 Android 通用内核也分以下两种:

  • 功能内核

    包含最新 Android 平台版本功能的增强内核称为功能内核。对于 Android 11,功能内核基于内核版本 4.14.y、4.19.y 和 5.4.y。在过去的平台版本中,功能内核与启动内核相同。但在 Android 12 中,将有两个功能内核和三个启动内核。

  • 启动内核

    指定的启动内核可用于启动搭载特定 Android 平台版本的设备。对于 Android 11,可以使用基于内核版本 4.14.y、4.19.y 和 5.4.y 的内核启动设备。

每个 Android 平台版本都支持基于三个 Linux 内核版本中的任何一个启动新设备。例如Android 11 的启动内核为 android-4.14-stable、android-4.19-stable 和 android11-5.4。

由于更新平台版本时通常不需要升级内核,因此缺少平台版本最新功能的内核仍然可以用来启动设备。因此,即使设备上的平台版本已升级到 Android 11,为 Android 10 设计的内核(例如 android-4.19-q)也可以在设备上使用。

这就导致某些厂商秉承着能用就行的原则,能不升级内核版本就不升级内核版本。吃力可能不讨好的事厂商不会去干。

厂商不升级内核版本导致了Android 框架代码必须假设支持的内核版本多达 5 个,并且没有针对新的平台版本进行任何内核更改(Android 10 支持内核版本 3.18、4.4、4.9、4.14 和 4.19;在某些情况下,这些版本自 2017 年 Android 8 发布以来还未添加新功能)。

supplier kernel

供应商在aosp kernel的基础上添加设备(相机,屏幕等)的驱动或特性所产生的内核。

oem kernel

oem厂商在supplier kernel后添加大量私有特性后所发布的源码。大部分厂商都是非实时开源的。

通俗讲就是一次性开源,后续安卓版本更新内核代码不会及时提交。

而且厂商会添加大量私有特性在内核源码中。

例如华为会在config里添加大量海思麒麟的特性。
而OPPO会将私有特性配置在xxxfetures.mk里。



-------------本文结束感谢您的阅读-------------



  • kernel
  • android
  • android kernel
  • gki

扫一扫,分享到微信

微信分享二维码
linux电脑给手机进行9008刷机
哔哩哔哩危险地带部分补档
  1. 1. gki时期
    1. 1.0.1. 什么是gki?
    2. 1.0.2. GKI 2.0
    3. 1.0.3. gki的特性
  • 2. 非gki时期
    1. 2.0.1. aosp kernel
    2. 2.0.2. supplier kernel
    3. 2.0.3. oem kernel

  • 预览:

    0  字
    评论
    • Latest
    • Oldest
    • Hottest
    Powered by Waline v2.15.8
    © 2025 dpkg123
    Loading ...
    Hexo Theme Yilia by Litten
    萌ICP备20231955号
    • 所有文章
    • 友情链接
    • 关于我

    tag:

    • 3DS
    • linux
    • buildroot
    • kernel
    • android
    • makefile
    • OPPO
    • PostmarketOS
    • ROM移植
    • 刷机
    • miui
    • coloros
    • 手机
    • dtc
    • dtb
    • hexo
    • web前端
    • github
    • shell
    • 刷机工具
    • 二次元
    • 9008
    • twrp
    • build
    • debian
    • Android
    • Root
    • Github
    • CI
    • Linux
    • 网页加速
    • 虚拟化 Android
    • 归档
    • 番剧
    • 别当欧尼酱了
    • 哔哩哔哩
    • av10492
    • 猎奇
    • 内核
    • 编译
    • 速通
    • 教程
    • 奇技淫巧
    • TypeScript
    • Github Actions
    • 网页搭建
    • 杂谈
    • alpine
    • 软件源
    • android kernel
    • gki
    • 联发科
    • KernelSU
    • kvm
    • vps
    • fastboot
    • kernelSU
    • 移植
    • 内核编译
    • Kernel

      缺失模块。
      1、请确保node版本大于6.2
      2、在博客根目录(注意不是yilia根目录)执行以下命令:
      npm i hexo-generator-json-content --save

      3、在根目录_config.yml里添加配置:

        jsonContent:
          meta: false
          pages: false
          posts:
            title: true
            date: true
            path: true
            text: false
            raw: false
            content: false
            slug: false
            updated: false
            comments: false
            link: false
            permalink: false
            excerpt: false
            categories: false
            tags: true
      

    • Hello World

      2025-03-11

    • 关于高通gunyah虚拟化的一些研究

      2025-03-03

      #虚拟化 Android

    • 安卓内核编译速通

      2025-02-13

      #Android#内核#编译#速通#教程#奇技淫巧

    • 使用github工作流全自动构建postmarketos刷机包

      2025-02-13

      #刷机#手机#Android#Root#Github#CI#Linux

    • PostmarketOS移植常见问题

      2024-08-12

      #linux#android#PostmarketOS#ROM移植#刷机

    • 本地搭建第三方alpine repo

      2024-03-22

      #linux#alpine#软件源

    • 折腾ts action遇到的其中一个问题

      2024-02-11

      #TypeScript#Github Actions

    • dtc编译教程

      2024-01-29

      #linux#android#dtc#dtb

    • OPPO Reno6 ColorOS13.1内核源码编译记录

      2024-01-15

      #kernel#android#OPPO

    • Android boot.img 文件的解包、修改与重打包小记

      2023-12-24

      #linux#android

    • twrp设备树从入门到放弃

      2023-12-10

      #linux#android#twrp#build

    • 3DS折腾linux小记

      2023-10-06

      #3DS#linux#buildroot#kernel

    • 暂停更新博客通知

      2023-08-08

      #杂谈

    • Makefile入门

      2023-08-04

      #linux#makefile

    • linux电脑给手机进行9008刷机

      2023-07-28

      #linux#刷机#9008

    • 浅谈安卓内核的碎片化

      2023-07-19

      #kernel#android#android kernel#gki

    • 哔哩哔哩危险地带部分补档

      2023-06-28

      #哔哩哔哩#av10492#猎奇

    • 使用dh_make快速构建deb

      2023-06-22

      #linux#debian

    • linux解压payload.bin和转换system.new.dat.br

      2023-06-18

      #linux#android#刷机

    • 浅谈联发科设备玩机的可能性

      2023-05-15

      #刷机#联发科#KernelSU#kvm

    • 给OPPO Reno6移植kernelSU

      2023-05-10

      #linux#kernelSU#移植#内核编译#Kernel

    • 别当欧尼酱了12集归档

      2023-05-02

      #归档#番剧#别当欧尼酱了

    • 珍爱生命,远离小众云

      2023-05-01

      #vps

    • fdt转dtb

      2023-04-30

      #android#dtb

    • coloros和miui

      2023-04-30

      #android#miui#coloros#手机

    • linux刷机工具箱

      2023-04-29

      #linux#shell#刷机工具

    • 简单写一个shell刷机脚本之进阶篇

      2023-04-29

      #linux#刷机#shell#fastboot

    • 简单写一个shell刷机脚本

      2023-04-29

      #linux#刷机#shell

    • linux娘

      2023-04-12

      #linux#二次元

    • 使用netlify加快博客访问速度

      2023-04-12

      #hexo#github#网页加速

    • hexo博客源码备份

      2023-04-10

      #hexo#web前端#github

    • 新博客

      2023-04-10

      #hexo#网页搭建

    • note现在暂不考虑申请新的友链
    • 图床
    • 留言板
    • 原来的博客
    • Adminzhangの个人博客
    • cyp0633的blog
    • 小码同学
    • U.M.R-Powered-Blog
    • 秋澪Akimio
    • ialtone的小站
    • PiCpo的阁楼
    • artiga033
    • 柏园猫のBlog
    • 欠陥電気の摸鱼小池
    • 洛仙璃の幻梦
    • 木屐落在水洼了
    • 湛蓝的调色板
    • SakuraKooi的Blog
    • 新世界的大门
    • 沨鸾的小窝
    • Revincx
    • JIPA233の小窝
    • Mufanc
    • Fika
    • Pinpe的物语
    • 残夜的小博客
    透明小菜鸡一枚

    目前正在学习C++和C
    正在移植postmarketOS到k30pro上
    本博客使用github-page作为网页托管平台,netlify提供cdn加速服务。
    不知道为啥yilia主题改不了下面的文字。
    总之欢迎来到这里!