0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK3576 Android15 框架扩展— RkAi 架构篇

jf_44130326 来源:Linux1024 作者:Linux1024 2026-05-13 08:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Rockchip RK3576平台的Android定制框架中,RkAi子系统是核心的AI能力扩展模块。本文将从架构设计、文件职责、启动流程、接口设计等维度,完整拆解RkAi子系统的实现逻辑,帮你吃透Rockchip定制Android框架的核心思路。

思维导图

先通过一张思维导图快速把握RkAi子系统的整体结构:

wKgZO2oDwVqARn0ZAAFBoDanf9Q190.png

1.前置知识

想要理解RkAi子系统,首先要掌握两个基础前提:Android标准Binder Service框架,以及Rockchip框架定制的通用惯例。

1.1 Android的Binder Service框架

当Android系统需要向上层App提供新能力时,通常遵循固定的跨进程通信模式:

AIDL定义接口 → 编译生成BinderStub/Proxy    ↓客户端(Proxy) ←BinderIPC→ 服务端(Stub)

AIDL:定义跨进程通信的接口,是Binder通信的“契约”;

Binder:Android特有的IPC机制,比Linux Socket效率更高;

Stub:服务端实现,继承自AIDL生成的骨架类;

Proxy:客户端代理,封装Binder调用的底层细节。

1.2 Rockchip的框架定制惯例

RK平台在Android框架层的定制有一套固定模式,避免与原生框架冲突且便于维护:

1.在vendor/rockchip/platform/frameworks/base/下创建RK特有Java/AIDL文件;

2.通过Android.bp的appendTo机制,将定制代码注入原生framework编译流程;

3.在SystemServer中注册为独立服务,通过ServiceManager对外暴露;

4.RK特有服务名以rk前缀命名,如rkai_management。

2.文件结构与职责

RkAi子系统的代码分布在App侧、Server侧、Native侧三个维度,每个文件都有明确的职责分工。

2.1文件全景

wKgZO2oDwVqAKYhRAAEFv_aYL6I601.png

2.2每个文件的具体职责

文件 角色
RKContext.java 定义服务名常量,如rkai_management
RKFeatureManager.java 定义feature名称,如rockchip.software.ai
RkAiData.java + .aidl 消息数据载体,type + Bundle结构
IOnRkAiListener.aidl oneway回调接口
IRkAiManagerService.aidl 服务端接口:添加/移除监听、发送消息
RkAiManager.java 客户端核心,应用通过它调用服务
RkAiManagerService.java 服务端核心,处理Binder请求
RockchipSystemService.java SystemServer中注册服务
onload.cpp JNI函数注册入口
com_android_server_RkAiManagerService.cpp JNI实现,桥接AudioSystem

3.注册与启动流程

RkAi服务并非开机必启,而是基于设备能力的条件启动,且启动过程分为两个关键阶段。

3.1条件启动

RkAi服务依赖Android的PackageManagerhasSystemFeature机制,只有设备声明了指定feature才会启动:

// RockchipSystemService.javaif(mPackageManager.hasSystemFeature(FEATURE_ROCKCHIP_AI)) { ServiceManager.addService(PLATFORM_AI_MANAGEMENT,   newRkAiManagerService(context));}

其中FEATURE_ROCKCHIP_AI对应rockchip.software.ai,这个feature通常在设备的device.mk或frameworks/base/core/res/res/values/config.xml中声明。

3.2完整启动序列

wKgZO2oDwVqAZuoYAAE5JQCHTY0393.png

3.3为什么分两个阶段?

onStart()和onBootPhase()是Android SystemService的两个核心生命周期方法,分工明确:

onStart():加载Native库librockchip_servers.so,触发JNI_OnLoad注册所有JNI函数,为后续Native层调用做准备;

onBootPhase():此时PackageManager已就绪,才能调用hasSystemFeature()判断设备能力,避免提前调用导致的空指针或功能判断错误。

这种设计能有效避免Native库未加载时调用JNI方法引发的崩溃。

4. AIDL接口设计

AIDL是RkAi跨进程通信的核心,包含服务端接口、回调接口、数据载体三类关键定义。

4.1服务端接口:IRkAiManagerService

interfaceIRkAiManagerService{ voidaddListener(inIOnRkAiListener listener,      String callingPackage, ...); voidremoveListener(inIOnRkAiListener listener,      String callingPackage, ...); voidsendRkAiMsg(inRkAiData data,      String callingPackage, ...);}

三个核心方法职责清晰:

•addListener/removeListener:注册/注销回调监听;

•sendRkAiMsg:实现App向Service发送AI消息。

注意:每个方法都携带callingPackage、attributionTag、userId、deviceId四个参数(Android 14+安全规范),但当前服务端未对callingPackage做权限校验,是可加固的优化点;另外,RkAiManager构造时若服务未注册(如开机未完成),mService会为null,后续调用会触发空指针,当前代码无重试/重连机制。

4.2回调接口:IOnRkAiListener

onewayinterfaceIOnRkAiListener{ voiddispatchRkAiListener(inRkAiData data);}

这里的关键设计是oneway关键字,它决定了回调的通信模式:

为什么回调要用oneway?
ASR(语音识别)数据是高频、实时的,同步回调会导致:

1.服务端广播时被最慢的listener阻塞;

2.产生反压,影响AudioFlinger的音频处理;

3.大概率丢失语音数据。
oneway能保证“发了就返回”,服务端无需等待App处理完成,适配高频实时的ASR数据场景。

4.3数据载体:RkAiData

publicclassRkAiDataimplementsParcelable{ privateintmType;    // 消息类型:LLM=1, ASR=2 privateBundle mInfo;  // 消息内容,随类型变化 // LLM 消息携带: //  "select_text" → 选中文本 //  "context_text" → 上下文文本 // ASR 消息携带: //  "asr_buffer"  → short[] 音频数据 //  "asr_buffer_len" → 数据长度}

这种设计类似Android的Intent:通过类型+ Bundle的组合实现灵活的载荷封装,无需为每个消息类型定义独立的Parcelable类,降低维护成本。

提示:类型常量和Bundle key(如EXTRA_ASR_BUFFER)的实际定义在RkAiManager.java中,RkAiData仅负责序列化/反序列化。

5.客户端API设计:RkAiManager

RkAiManager是App侧调用RkAi服务的唯一入口,封装了Binder连接、监听器管理等核心逻辑。

5.1 Binder连接

publicRkAiManager(Context context){ IBinderiBinder=ServiceManager.getService("rkai_management"); if(iBinder ==null) {    Log.e(TAG,"Unable to connect to RkAiManager service");  }else{    mService = IRkAiManagerService.Stub.asInterface(iBinder);  }}

这是Android获取SystemService的典型方式:通过ServiceManager.getService()获取服务的Binder引用,再转换为AIDL接口代理。若服务未注册(如开机阶段),iBinder为null,此时RkAiManager无法正常工作。

5.2监听器管理

wKgZO2oDwVuAalkDAAFCpKPmayc351.png

监听器管理的设计亮点:

延迟注册:仅当第一个listener添加时,才跨进程向服务端注册;最后一个listener移除时自动注销,减少资源占用;

线程切换:Binder回调到达时,通过mHandler.post()切回App主线程分发,符合Android主线程更新UI的规范;

Copy-on-Write保护:reportRkAiMsg()中先在synchronized块内通过mListeners.toArray()获取数组快照,再遍历分发,避免遍历过程中集合被修改导致的异常。

6.架构特征总结

wKgZO2oDwVuAWITPAAB6Dw8ewWk440.png

7.调试方法

开发和问题定位过程中,可通过以下命令快速调试RkAi服务:

# 1. 确认服务是否注册adbshell service check rkai_management# 输出示例:Service rkai_management: found# 2. 查看 feature 是否生效adb shell pm list features | grep rockchip# 输出:feature:rockchip.software.ai# 3. 实时日志,三个 TAG 分别对应三层adb logcat -s RkAiManager RkAiManagerService RkAiManagerNative# 4. 查看服务详情adb shell dumpsys service rkai_management

审核编辑 黄宇

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

    关注

    12

    文章

    4041

    浏览量

    134751
  • rk3576
    +关注

    关注

    1

    文章

    315

    浏览量

    1712
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3576 Android15音频开发必看:alsa_route核心文件解析与修改场景

    ——alsa_route(alsa_route.h/alsa_route.c)。 作为连接Android上层音频框架与底层ALSA驱动的“桥梁”,alsa_route是RK3576 Andro
    的头像 发表于 02-26 08:08 477次阅读
    <b class='flag-5'>RK3576</b> <b class='flag-5'>Android15</b>音频开发必看:alsa_route核心文件解析与修改场景

    RK3576平台Android HAL层故障排查:从lshal命令看透问题本质

    RK3576 作为瑞芯微主流的中高端芯片,其 HAL 层基于 HIDL ( Android 硬件接口定义语言)实现,排查这类问题的核心工具就是 lshal —— 一个能直接暴露 HIDL 服务运行状态的命令
    的头像 发表于 02-06 07:12 724次阅读
    <b class='flag-5'>RK3576</b>平台<b class='flag-5'>Android</b> HAL层故障排查:从lshal命令看透问题本质

    基于rk3576开发debian、ubuntu、android

    RK3576芯片是一款功能强大、全面支持多媒体处理、高速连接和外部扩展的嵌入式处理器。它适用于多种应用场景,如高清视频播放、嵌入式开发、智能家居、汽车电子等。
    的头像 发表于 01-30 17:53 2964次阅读
    基于<b class='flag-5'>rk3576</b>开发debian、ubuntu、<b class='flag-5'>android</b>

    硬核进阶:RK3576 Android15 驱动与系统开发实战指南

    android15,想与大家探讨更多,不仅仅是驱动,更包含android其他方面。 各位嵌入式与Android开发的朋友们,我们的  RK3576
    的头像 发表于 01-26 22:29 902次阅读
    硬核进阶:<b class='flag-5'>RK3576</b> <b class='flag-5'>Android15</b> 驱动与系统开发实战指南

    RK3576开发板OpenGL性能大起底,这数据我真的服了

    瑞芯微RK3576芯片作为一款中高端的八核Arm架构嵌入式处理器,集成Mali-G52MC3的GPU。本次OpenGL性能测试,基于触觉智能RK3576开发板PurplePiOH2演示。为了回馈大家
    的头像 发表于 01-16 17:20 1867次阅读
    <b class='flag-5'>RK3576</b>开发板OpenGL性能大起底,这数据我真的服了

    迅为RK3576对比RK3568:AI算力与接口的全面跃迁

    迅为RK3576对比RK3568:AI算力与接口的全面跃迁
    的头像 发表于 12-22 15:24 2680次阅读
    迅为<b class='flag-5'>RK3576</b>对比<b class='flag-5'>RK</b>3568:AI算力与接口的全面跃迁

    迅为如何在RK3576上部署YOLOv5;基于RK3576构建智能门禁系统

    迅为如何在RK3576开发板上部署YOLOv5;基于RK3576构建智能门禁系统
    的头像 发表于 11-25 14:06 2070次阅读
    迅为如何在<b class='flag-5'>RK3576</b>上部署YOLOv5;基于<b class='flag-5'>RK3576</b>构建智能门禁系统

    360环视硬件平台为什么推荐使用米尔RK3576开发板?

    。凭借先进的 SoC 架构与完善的多媒体引擎,它不仅具备 12路摄像头 的高清视频接入能力,还能将编码与 RTSP 低延迟推流 组合成体系化方案,为360环视提供稳定可靠的底座。 米尔RK3576开发板
    发表于 09-19 17:38

    【作品合集】米尔RK3576开发板测评

    米尔RK3576开发板测评作品合集 产品介绍: RK3576 是瑞芯微一款面向AI市场推出的高性能处理器,它配备了四核Cortex-A72和四 核Cortex-A53 的 CPU,集成了6TOPS
    发表于 09-11 10:19

    RK3576助力智慧安防:8路高清采集与AI识别

    :多路实时监控,结合人脸识别门禁。 • 城市交通:路口多角度监控+车辆检测。 • 工业园区:重点区域实时巡检。5. 未来趋势随着AI算法与边缘计算的融合,安防监控将从单一的“记录回放”走向“实时分析+智能响应”。米尔RK3576凭借卓越的性能和扩展性,将在智慧安防领域持续
    发表于 08-22 17:41

    瑞芯微RK3576RK3576S有什么区别,性能参数配置与型号差异解析

    瑞芯微第二代8nm高性能AIOT平台RK3576家族再添新成员-RK3576S,先说结论:相较主型号的RK3576/RK3576J,性能略有缩减,而功耗有所降低。主要应用于商显终端、智
    的头像 发表于 08-14 23:57 2871次阅读
    瑞芯微<b class='flag-5'>RK3576</b>与<b class='flag-5'>RK3576</b>S有什么区别,性能参数配置与型号差异解析

    RK这2款旗舰芯片RK3588 PK RK3576,谁是最优选

    ,了解两者的区别十分重要,以下将从多个方面进行详细对比。一、处理器性能解析(一)CPU 性能1. 核心架构RK3576:采用四核 Cortex - A72 和四核 Cortex - A53 架构
    发表于 07-10 18:24

    Mpp支持RK3576

    想问下,https://github.com/rockchip-linux/mpp这里面支持RK3576么,看介绍没有提到说支持RK3576 目前是买了个rk3576的机顶盒,搭载了安卓14,想做安卓视频硬解。
    发表于 06-13 15:35

    RK3576 vs RK3588:为何越来越多的开发者转向RK3576

    (图形性能更强) 分析: RK3576 的 A72+A53+M0 组合 在能效比上更优,适合需要长时间运行的设备(如 IoT、平板)。 RK3588 的 A76 架构 单核性能更强,适合高性能计算场景(如
    发表于 05-30 08:46

    适配多种系统,米尔瑞芯微RK3576核心板解锁多样化应用

    米尔电子发布的基于瑞芯微 RK3576 核心板和开发板,具备高性能数据处理能力、领先的AI智能分析功能、多样化的显示与操作体验以及强大的扩展性与兼容性,适用于多种应用场景。目前米尔电子为
    发表于 05-23 16:07