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

【RK3576】【Android14】Android平台构建

获取更多相关的【RK3576】【Android14】驱动开发,可收藏系列博文,持续更新中:
【RK3576】Android 14 驱动开发实战指南


目录

简介

Android构建

设置构建环境

lunch 选择平台配置

关联UBOOT配置

关联DTS配置


简介

Android14源码下载后,通过如下命令编译SDK:

source build/envsetup.sh

lunch rk3576_u-userdebug

./build.sh -UKAup -J32

针对上述命令,进行解析,了解如何重新构建一个项目配置

Android构建

设置构建环境

编译安卓前,需要先配置“source build/envsetup.sh”以设置构建环境

此脚本会导入若干命令(包括本页中使用的命令),设置一些环境变量和shell函数为后续的编译工作做准备。 

lunch 选择平台配置

lunch 是 Android 构建系统的环境配置脚本(定义在 build/envsetup.sh 中),用于选择目标设备构建配置。在构建 Android 之前,必须先确定要构建的目标。目标旨在反映您要构建的目标平台。如需确定要构建的目标,请使用 lunch 命令,后跟表示目标的字符串。

以”lunch rk3576_u-userdebug“为例,执行后系统会:

1、解析参数 rk3576_u-userdebug,拆分为设备名 rk3576_u 和构建类型 userdebug

2、在SDK/device目录下,搜索设备配置

    |——device/<vendor>/<device>/AndroidProducts.mk

 (对于 rk3576_u,系统会检索到 device/rockchip/rk3576/rk3576_u/ 目录)

3、AndroidProducts.mk文件定义了设备与构建类型的映射关系

    |——PRODUCT_MAKEFILES := $(LOCAL_DIR)/rk3576_u.mk

            (rk3576_u.mk 文件会进一步指定设备属性、依赖的模块等)

            (构建系统通过该文件关联到 device/rockchip/rk3576/rk3576_u目录

        |——include device/rockchip/common/build/rockchip/DynamicPartitions.mk

                (对应动态分区配置)

        |——include device/rockchip/rk3576/rk3576_u/BoardConfig.mk

        |——include device/rockchip/common/BoardConfig.mk

        |——$(call inherit-product, device/rockchip/common/device.mk)

                |——$(call inherit-product, device/rockchip/common/modules/kernel_config.mk)

                (对应关联到内核配置项)

4、执行 lunch 后,系统会设置关键环境变量

    |——TARGET_PRODUCT=rk3576_u

    |——TARGET_BUILD_VARIANT=userdebug

    |——TARGET_DEVICE_DIR=device/rockchip/rk3576/rk3576_u

关联UBOOT配置

在“TARGET_DEVICE_DIR=device/rockchip/rk3576/rk3576_u/BoardConfig.mk”中读取UBOOT配置:

PRODUCT_UBOOT_CONFIG ?= rk3576_defconfig

关联分区配置

在“device/rockchip/rk3576/rk3576_u/rk3576_u.mk”中包含了“DynamicPartitions.mk”对应关联动态分区配置

PRODUCT_USE_DYNAMIC_PARTITIONS := true

关联DTS配置

在“TARGET_DEVICE_DIR=device/rockchip/rk3576/rk3576_u/BoardConfig.mk”中读取DTS配置:

PRODUCT_KERNEL_DTS ?= rk3576-evb1-v10

在“./arch/arm64/boot/dts/”下找到对应dts配置文件

./arch/arm64/boot/dts/rockchip/rk3576-evb1-v10.dts

关联Kernel配置

在“device/rockchip/rk3576/rk3576_u/rk3576_u.mk”包含了“device/rockchip/common/device.mk”

而“device/rockchip/common/device.mk”又包含了“device/rockchip/common/modules/kernel_config.mk”,其中表明了内核基础配置项

device/rockchip/common/modules/kernel_config.mk:20:PRODUCT_KERNEL_CONFIG := rockchip_defconfig android-14.config

device/rockchip/rk3576/BoardConfig.mk:28:PRODUCT_KERNEL_CONFIG += rk3576.config

device/rockchip/rk3576/rk3576_u/BoardConfig.mk:27:PRODUCT_KERNEL_CONFIG += pcie_wifi.config

在 Android 构建系统中,内核配置不再仅依赖单一的 defconfig 文件,而是通过 分层配置机制 实现灵活定制。

1. 基础层:defconfig 文件

2. 扩展层:.config 片段(Fragment)

通过 PRODUCT_KERNEL_CONFIG 变量声明,构建时自动合并。

最终生成的 .config 文件是这些层的叠加结果

后续修改可以用如下方式,只展示项目变化的配置项

# 生成差异配置
diff -u arch/arm64/configs/rockchip_defconfig out/android14-rk3576/.config > ../configs/debug_fs.config


# 在项目 BoardConfig.mk 中追加
PRODUCT_KERNEL_CONFIG += debug_fs.config

如果觉得过于复杂了,也可以精简,直接配置,就能直接覆盖掉

PRODUCT_KERNEL_CONFIG = [product]_defconfig

http://www.xdnf.cn/news/15771.html

相关文章:

  • 爬虫逆向之JS混淆案例(全国招标公告公示搜索引擎 type__1017逆向)
  • 重学Framework Input模块:如何实现按键一键启动Activity-学员作业
  • HTML5中的自定义属性
  • 【洛谷】询问学号、寄包柜、移动零、颜色分类(vector相关算法题p1)
  • 实验室危险品智能管控:行为识别算法降低爆炸风险
  • bws-rs:Rust 编写的 S3 协议网关框架,支持灵活后端接入
  • 汽车ECU控制器通信架构
  • Java学习--------消息队列的重复消费、消失与顺序性的深度解析​
  • Linux 内存管理(2):了解内存回收机制
  • Python实现智能文件搜索系统:从基础到高级应用
  • 【Oracle】ORACLE OMF说明
  • AUTOSAR进阶图解==>AUTOSAR_SWS_DiagnosticLogAndTrace
  • Redisson RLocalCachedMap 核心参详解
  • kotlin部分常用特性总结
  • Ultralytics代码详细解析(三:engine->trainer.py主框架)
  • LVS——nat模式
  • 电机相关常见名词
  • 如何解决Flink CDC同步时间类型字段8小时时间差的问题,以MySQL为例
  • Redis Sentinel哨兵集群
  • Spring之【AnnotatedBeanDefinitionReader】
  • 针对大规模语言模型的上下文工程技术调研与总结(翻译并摘要)
  • 【C++】入门阶段
  • 基于开放API接口采集的定制开发开源AI智能名片S2B2C商城小程序数据整合与增长策略研究
  • 本地部署开源的 AI 驱动的搜索引擎 Perplexica 并实现外部访问
  • Spring Bean 的作用域(Bean Scope)
  • SpringAI_Chat模型_DeepSeek模型--基础对话
  • 扭蛋机系统开发:打造多元化娱乐生态的新引擎
  • Libevent(3)之使用教程(2)创建事件
  • Spring MVC @RequestParam注解全解析
  • 【Linux】重生之从零开始学习运维之Nginx之server小实践