rk3576 android15平台camera编译配置都做了什么?
该文件是瑞芯微(Rockchip)Android平台下相机子系统的核心编译配置Makefile,属于Android Build System的关键组成部分,作用是根据编译环境的动态条件(SDK版本、芯片平台、产品类型),实现相机相关配置文件、固件、IQ参数文件的条件化拷贝,以及相机专属库的编译打包,最终将这些文件部署到开发板的system/vendor分区,是相机硬件与软件适配的核心配置桥梁。
本文将从核心作用、编译条件维度、分模块执行逻辑、编译部署流程、文件/库汇总五个维度展开分析,并配套流程图和表格。
一、文件核心作用
1.动态确定相机基础文件根路径:根据Android SDK版本区分camera/etc和camera_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
|
≥28(API28)/ ≥26(API26)
|
≥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.0(API26)开始引入vendor分区,将厂商(瑞芯微)专属文件从system分区分离,提升系统兼容性和可维护性;Android9.0(API28)对相机框架做了细节调整,因此瑞芯微区分了camera和camera_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),无需拷贝相机基础文件;
•filter:Makefile内置函数,匹配指定字符,无匹配则执行后续逻辑。
过滤2:芯片平台过滤
ifeq($(filterrk3528, $(strip$(TARGET_BOARD_PLATFORM))), )# 非rk3528芯片,执行后续拷贝endif
•rk3528:瑞芯微该款芯片有单独的相机配置文件适配,因此跳过通用基础文件拷贝,避免文件冲突。
模块3:按SDK版本实现分分区基础文件拷贝
这是文件的核心拷贝逻辑,根据SDK是否≥26(Android8.0),将相机基础文件拷贝到vendor或system分区,同时使用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
分支1:SDK≥26(Android8.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_FILES:Android Build System的核心变量,用于指定需要拷贝到系统镜像的文件列表,格式为源文件:目标文件;
•$(TARGET_COPY_OUT_VENDOR):Android构建系统宏,指向vendor分区的输出路径(实际为out/target/product/xxx/vendor)。
分支2:SDK<26(Android8.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/bin:Android系统可执行工具的默认目录,相机工具拷贝到此处可直接在终端执行。
模块4:芯片专属ISP IQ文件拷贝
IQ文件是相机图像信号处理器(ISP)的核心参数配置文件,包含曝光、白平衡、锐化、降噪等成像参数,瑞芯微为不同芯片匹配了不同版本的ISP IQ文件,统一拷贝到vendor分区(所有支持IQ文件的芯片均为Android8.0+适配)。
该模块通过ifneq判断芯片平台,匹配后指定IQ文件源路径,再递归拷贝到vendor/etc/camera/rkisp2/,各芯片适配详情如下:
rk1126/rk356x → isp21rk3588 → isp3xrk3562 → isp32_lite(轻量版ISP)rk3576 → isp39(高性能ISP,支持4K成像){insert_element_0_}
•IQ文件源码路径:$(TOP)/external/camera_engine_rkaiq/iqfiles/(瑞芯微开源的相机引擎rkaiq目录);
•目标路径:所有芯片的IQ文件均统一到vendor/etc/camera/rkisp2/,便于相机驱动统一读取。
模块5:CPU端人脸检测库编译打包
该模块通过Android构建系统变量指定库文件的编译和打包,实现相机的CPU端人脸检测功能(区别于ISP硬件人脸检测)。
#CPU facedetec libPRODUCT_PACKAGES+=libcam_facedetection
•PRODUCT_PACKAGES:Android Build System核心变量,用于指定需要编译并加入系统镜像的库/可执行文件/应用;
•libcam_facedetection:瑞芯微自研的CPU端人脸检测动态库(.so文件),构建系统会自动从源码目录编译该库,并将其拷贝到系统的vendor/lib/system/lib目录,相机应用可直接调用。
四、相机相关文件/库的编译部署流程图
使用Mermaid语法绘制完整流程,涵盖条件判断→文件拷贝→库编译的全链路,可直接渲染查看:
五、相机相关文件/库源/目标路径汇总表
该表整合所有文件类型、触发条件、源码路径、目标路径、所属分区,是开发板相机文件部署的核心参考,备注列说明文件的核心作用:
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文件、调整文件部署分区。
- rk3576 android15平台camera编译配置都做了什么?
- -40V/1A超低噪音低压差稳压电源参数与使用极限
- 谷景解析贴片共模电感升级优势与应用
- 功率放大器在微流控超声空化实验中的应用
- HLK-LD2452赋能智能风扇与空调
- 光隔离探头校准过程介绍
- 步进电机驱动器的作用介绍
- 变频器接触器故障判断处理方法
- 农村微电网:能源民主化与可持续发展的新路径
- 增量式线性编码器:工业精密控制的“隐形引擎”
- 经典西门子S7-1200PLC,拥抱PROFINET转EtherCAT网关
- IP2006H至为芯支持双C口快充的100W宽功率AC-DC主控芯片
- 当车间电费居高不下:借助WiFi智能电表定位能耗分布
- 沃伦森低压电机绝缘传感器,智能革新线路绝缘检测,告别传统兆欧表时代
- 3W导热凝胶性能特点与应用场景 |铬锐特实业
- UPS电源怎么选功率?核心公式与避坑指南