rk3576 android15平台camera编译配置都做了什么?

科技时尚 2026-03-07 chy123 4706

该文件是瑞芯微(Rockchip)Android平台下相机子系统的核心编译配置Makefile,属于Android Build System的关键组成部分,作用是根据编译环境的动态条件(SDK版本、芯片平台、产品类型),实现相机相关配置文件、固件、IQ参数文件的条件化拷贝,以及相机专属库的编译打包,最终将这些文件部署到开发板的system/vendor分区,是相机硬件与软件适配的核心配置桥梁。

本文将从核心作用编译条件维度分模块执行逻辑编译部署流程文件/库汇总五个维度展开分析,并配套流程图和表格。

一、文件核心作用

1.动态确定相机基础文件根路径:根据Android SDK版本区分camera/etccamera_v3/etc,适配不同Android版本的相机文件目录结构;

2.条件化文件拷贝:按产品类型(无相机的ATV/VR等)、芯片平台rk3528等专属芯片)、SDK版本Android8.0+/低版本)实现文件拷贝的过滤和分区选择;

3.芯片专属ISP IQ文件适配:为瑞芯微不同芯片(rk1126/rk3588等)匹配对应版本的ISP图像参数文件,决定相机成像效果;

4.库文件编译打包:指定CPU端人脸检测库的编译,将其加入系统镜像打包列表;

5.适配Android分区架构:严格区分system/vendor分区,遵循Android 8.0+的厂商文件与系统文件分离的设计规范。

二、关键编译条件维度

该文件的所有执行逻辑均基于三个核心条件的组合判断,是瑞芯微为适配多芯片、多Android版本、多产品形态设计的灵活编译策略,条件详情如下表:

条件类型

判断阈值/匹配值

对应Android版本/硬件/产品

核心作用

PLATFORM_SDK_VERSION

≥28API28/ ≥26API26

≥28=Android9.0≥26=Android8.0

确定文件根路径和目标分区

TARGET_BOARD_PLATFORM_PRODUCT

atv/vr/stbvr

安卓电视/VR/机顶盒VR

过滤无相机模块的产品

TARGET_BOARD_PLATFORM

rk3528/rk1126/rk356x/rk3588

瑞芯微各系列芯片

芯片专属文件/ISP IQ文件适配

关键背景Android 8.0API26)开始引入vendor分区,将厂商(瑞芯微)专属文件从system分区分离,提升系统兼容性和可维护性;Android9.0API28)对相机框架做了细节调整,因此瑞芯微区分了cameracamera_v3两个文件目录。

三、分模块执行逻辑

文件按路径确定基础文件拷贝过滤分区拷贝→IQ文件拷贝库编译的顺序执行,每个模块相互关联且基于条件判断,以下是逐模块详细解析。

模块1:动态确定相机基础文件根路径(CUR_PATH

根据Android SDK版本是否≥28,确定相机配置文件、固件的源码根路径,是后续所有文件拷贝的基础。

ifeq(1,$(strip$(shellexpr$(PLATFORM_SDK_VERSION)>= 28)))CUR_PATH :=$(TOP)/hardware/rockchip/camera/etc # Android9.0+elseCUR_PATH :=$(TOP)/hardware/rockchip/camera_v3/etc# Android9.0以下endif

$(TOP)Android源码根目录;

区分camera/camera_v3:瑞芯微对不同Android版本相机框架的适配,camera_v3对应早期相机3.0框架,camera为高版本优化后的框架。

模块2:基础文件拷贝的双层过滤

通过产品类型芯片平台做双层过滤,跳过无相机模块/专属适配芯片的基础文件拷贝,减少无效编译。

过滤1:产品类型过滤

ifeq($(filteratv vr stbvr, $(strip$(TARGET_BOARD_PLATFORM_PRODUCT))), )# 非ATV/VR/STBVR产品,执行后续拷贝endif

atv/vr/stbvr:无相机硬件模块的产品形态(安卓电视、VR设备、机顶盒VR),无需拷贝相机基础文件;

filterMakefile内置函数,匹配指定字符,无匹配则执行后续逻辑。

过滤2:芯片平台过滤

ifeq($(filterrk3528, $(strip$(TARGET_BOARD_PLATFORM))), )# 非rk3528芯片,执行后续拷贝endif

rk3528:瑞芯微该款芯片有单独的相机配置文件适配,因此跳过通用基础文件拷贝,避免文件冲突。

模块3:按SDK版本实现分分区基础文件拷贝

这是文件的核心拷贝逻辑,根据SDK是否≥26Android8.0),将相机基础文件拷贝到vendorsystem分区,同时使用Android构建系统的递归拷贝函数实现全目录文件复制。

核心语法:find-copy-subdir-files

该函数是Android Build System的内置函数,作用是递归查找源目录下的所有文件,按原目录结构拷贝到目标目录,参数含义:

$(call find-copy-subdir-files, 匹配规则, 源目录, 目标目录)#示例:$(call find-copy-subdir-files,*,$(CUR_PATH)/firmware,$(TARGET_COPY_OUT_VENDOR)/firmware)#*:匹配所有文件;递归拷贝firmware下所有文件到vendor/firmware

分支1SDK≥26Android8.0+拷贝到vendor分区

Android8.0+要求厂商专属文件部署在vendor分区,该分区为只读分区,独立于system分区,提升系统升级兼容性。

PRODUCT_COPY_FILES += # 芯片专属camera3配置文件,重命名为通用名$(CUR_PATH)/camera/camera3_profiles_$(TARGET_BOARD_PLATFORM).xml:$(TARGET_COPY_OUT_VENDOR)/etc/camera/camera3_profiles.xml # 递归拷贝相机固件$(callfind-copy-subdir-files,*,$(CUR_PATH)/firmware,$(TARGET_COPY_OUT_VENDOR)/firmware)# 递归拷贝相机所有配置文件$(callfind-copy-subdir-files,*,$(CUR_PATH)/camera,$(TARGET_COPY_OUT_VENDOR)/etc/camera)

PRODUCT_COPY_FILESAndroid Build System的核心变量,用于指定需要拷贝到系统镜像的文件列表,格式为源文件:目标文件

$(TARGET_COPY_OUT_VENDOR)Android构建系统宏,指向vendor分区的输出路径(实际为out/target/product/xxx/vendor)。

分支2SDK<26Android8.0以下)拷贝到system分区

低版本Android无独立vendor分区,所有文件均部署在system分区,同时额外拷贝相机工具到system/bin(高版本工具已整合到vendor分区)。

PRODUCT_COPY_FILES += $(CUR_PATH)/camera/camera3_profiles_$(TARGET_BOARD_PLATFORM).xml:$(TARGET_COPY_OUT_SYSTEM)/etc/camera/camera3_profiles.xml $(callfind-copy-subdir-files,*,$(CUR_PATH)/firmware,$(TARGET_COPY_OUT_SYSTEM)/etc/firmware)$(callfind-copy-subdir-files,*,$(CUR_PATH)/camera,$(TARGET_COPY_OUT_SYSTEM)/etc/camera)# 低版本额外拷贝相机工具到系统可执行目录$(callfind-copy-subdir-files,*,$(CUR_PATH)/tools,$(TARGET_COPY_OUT_SYSTEM)/bin)

$(TARGET_COPY_OUT_SYSTEM):指向system分区的输出路径(out/target/product/xxx/system);

system/binAndroid系统可执行工具的默认目录,相机工具拷贝到此处可直接在终端执行。

模块4:芯片专属ISP IQ文件拷贝

IQ文件是相机图像信号处理器(ISP)的核心参数配置文件,包含曝光、白平衡、锐化、降噪等成像参数,瑞芯微为不同芯片匹配了不同版本的ISP IQ文件,统一拷贝到vendor分区(所有支持IQ文件的芯片均为Android8.0+适配)。

该模块通过ifneq判断芯片平台,匹配后指定IQ文件源路径,再递归拷贝到vendor/etc/camera/rkisp2/,各芯片适配详情如下:

#rk1126/rk356x → isp21#rk3588 → isp3x#rk3562 → isp32_lite(轻量版ISP)#rk3576 → isp39(高性能ISP,支持4K成像){insert_element_0_}

IQ文件源码路径:$(TOP)/external/camera_engine_rkaiq/iqfiles/(瑞芯微开源的相机引擎rkaiq目录);

目标路径:所有芯片的IQ文件均统一到vendor/etc/camera/rkisp2/,便于相机驱动统一读取。

模块5CPU端人脸检测库编译打包

该模块通过Android构建系统变量指定库文件的编译和打包,实现相机的CPU端人脸检测功能(区别于ISP硬件人脸检测)。

#CPU facedetec libPRODUCT_PACKAGES+= libcam_facedetection

PRODUCT_PACKAGESAndroid Build System核心变量,用于指定需要编译并加入系统镜像的库/可执行文件/应用

libcam_facedetection:瑞芯微自研的CPU端人脸检测动态库.so文件),构建系统会自动从源码目录编译该库,并将其拷贝到系统的vendor/lib/system/lib目录,相机应用可直接调用。

四、相机相关文件/库的编译部署流程图

使用Mermaid语法绘制完整流程,涵盖条件判断文件拷贝库编译的全链路,可直接渲染查看:

wKgZPGmjhQaAdgE6AAQA6Pm2858133.png

五、相机相关文件/库源/目标路径汇总表

该表整合所有文件类型、触发条件、源码路径、目标路径、所属分区,是开发板相机文件部署的核心参考,备注列说明文件的核心作用:

5.1基础文件(配置/固件/工具)

文件类型

触发条件

源码根路径

目标路径

所属分区

备注

camera3配置文件

ATV/VR/STBVR+rk3528

$(CUR_PATH)/camera/xxx.xml

/etc/camera/camera3_profiles.xml

vendor/system

芯片专属相机3.0框架配置,重命名为通用名

相机固件

ATV/VR/STBVR+rk3528

$(CUR_PATH)/firmware/

/firmware//etc/firmware/

vendor/system

相机硬件驱动的固件文件

相机通用配置文件

ATV/VR/STBVR+rk3528

$(CUR_PATH)/camera/

/etc/camera/

vendor/system

包含白平衡、对焦等通用配置

相机工具

ATV/VR/STBVR+rk3528+SDK<26

$(CUR_PATH)/tools/

/bin/

system

相机调试/配置的可执行工具

5.2 ISP IQ参数文件(各芯片专属)

芯片平台

ISP版本

源码路径

目标路径

所属分区

备注

rk1126/rk356x

isp21

$(TOP)/external/camera_engine_rkaiq/iqfiles/isp21/

/vendor/etc/camera/rkisp2/

vendor

通用版ISP,适配中低性能芯片

rk3588

isp3x

$(TOP)/external/camera_engine_rkaiq/iqfiles/isp3x/

/vendor/etc/camera/rkisp2/

vendor

高性能ISP,支持4K/高分辨率成像

rk3562

isp32_lite

$(TOP)/external/camera_engine_rkaiq/iqfiles/isp32_lite/

/vendor/etc/camera/rkisp2/

vendor

轻量版ISP,适配低功耗芯片

rk3576

isp39

$(TOP)/external/camera_engine_rkaiq/iqfiles/isp39/

/vendor/etc/camera/rkisp2/

vendor

旗舰版ISP,支持双4K视频编码

5.3库文件(人脸检测)

库名

触发条件

编译方式

目标路径

所属分区

备注

libcam_facedetection

无(全局)

PRODUCT_PACKAGES

/vendor/lib//system/lib/

vendor/system

CPU端人脸检测动态库,相机应用可直接调用

六、关键知识点补充

1.分区差异vendor分区为瑞芯微厂商专属,system分区为Android系统原生,Android8.0+要求厂商文件优先部署在vendor,避免系统升级时覆盖厂商配置;

2.文件重命名camera3_profiles_$(TARGET_BOARD_PLATFORM).xml重命名为camera3_profiles.xml,是为了让相机框架统一读取通用文件名,无需适配不同芯片的文件名;

3.rkaiq引擎:瑞芯微的camera_engine_rkaiq是开源的相机图像优化引擎,IQ文件是该引擎的核心配置,决定相机的最终成像效果;

4.编译输出:所有拷贝的文件和编译的库,最终都会生成在Android源码的out/target/product/[芯片名]/目录下,随system.img/vendor.img烧录到开发板的对应分区。

七、文件的工程价值

该文件是瑞芯微多芯片、多Android版本、多产品形态相机适配的统一编译入口,通过Makefile的条件判断实现了一次配置,多场景编译,减少了重复的配置文件编写,同时严格遵循Android的分区架构规范,提升了系统的可维护性和兼容性。开发人员可通过修改该文件,快速添加/删除相机文件、适配新芯片的IQ文件、调整文件部署分区。