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

电子说

1.4w人已加入

描述

 

 

 

该文件是瑞芯微(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 $(shell expr $(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 ($(filter atv vr stbvr, $(strip $(TARGET_BOARD_PLATFORM_PRODUCT))), )# 非ATV/VR/STBVR产品,执行后续拷贝endif

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

 

 

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

 

 

过滤2:芯片平台过滤

 

 

  •  
  •  
  •  
ifeq ($(filter rk3528, $(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 # 递归拷贝相机固件$(call find-copy-subdir-files,*,$(CUR_PATH)/firmware,$(TARGET_COPY_OUT_VENDOR)/firmware) # 递归拷贝相机所有配置文件$(call find-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 $(call find-copy-subdir-files,*,$(CUR_PATH)/firmware,$(TARGET_COPY_OUT_SYSTEM)/etc/firmware) $(call find-copy-subdir-files,*,$(CUR_PATH)/camera,$(TARGET_COPY_OUT_SYSTEM)/etc/camera) # 低版本额外拷贝相机工具到系统可执行目录$(call find-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 → 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/,便于相机驱动统一读取。

 

 

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

 

 

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

 

 

  •  
  •  
  •  
#CPU facedetec libPRODUCT_PACKAGES +=  libcam_facedetection

PRODUCT_PACKAGESAndroid 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文件、调整文件部署分区。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分