获取更多相关的【RK3576】【Android14】驱动开发,可收藏系列博文,持续更新中:
【RK3576】Android 14 驱动开发实战指南
目录
简介
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