瑞芯微RV1126平台IMX415摄像头驱动开发与V4L2集成实战
1. 项目背景与核心挑战最近在调试一块基于瑞芯微RV1126芯片的开发板客户要求在现有的摄像头模组支持列表里新增一颗索尼的IMX415图像传感器。这个需求听起来很直接不就是加个驱动吗但真正上手后才发现从拿到一份可能不完整的Sensor数据手册到最终能在Linux用户层通过标准的v4l2接口稳定抓取到图像中间每一步都可能藏着“坑”。尤其是对于RV1126这类集成了专用图像处理单元ISP的芯片驱动开发不仅仅是让内核“认识”这个设备更要确保数据流能正确地穿过ISP的各个处理模块最终生成可用的图像。网上关于IMX415在RV1126上的资料零零散散很多教程只讲了“怎么做”却没讲清楚“为什么这么做”以及某个参数设置不对会导致什么现象。这篇内容就是把我从零开始适配IMX415并成功实现v4l2抓图的完整过程、核心原理和踩过的坑梳理出来希望能给遇到类似问题的朋友一个清晰的参考路线。简单来说我们的目标是在RV1126的Linux BSP板级支持包中新增IMX415的驱动支持使得应用程序能够像使用其他标准摄像头一样通过Video for Linux 2 (v4l2) 框架打开设备、设置参数并捕获图像数据。这涉及到内核驱动层、设备树配置、以及ISP管线配置等多个层面的协同工作。整个过程不仅是对Linux驱动框架的理解更是对嵌入式图像处理系统数据流的深入实践。2. IMX415 Sensor驱动开发环境与源码定位在开始写代码之前搭建一个正确的开发环境和理解代码结构是至关重要的。RV1126的SDK通常由原厂提供里面包含了内核、uboot、根文件系统以及一整套构建工具。2.1 SDK获取与目录结构解析首先你需要获取RV1126的官方SDK。解压后我们主要关注内核部分。典型的SDK目录结构如下sdk/ ├── buildroot/ # 构建系统和根文件系统配置 ├── kernel/ # Linux内核源码 │ ├── arch/arm/boot/dts/rockchip/ # 设备树文件重中之重 │ └── drivers/media/i2c/ # 大多数Sensor驱动所在位置 ├── external/ # 可能包含一些第三方库 └── rv1126_rv1109_linux_sdk_release_20211022.pdf # 重要的参考文档进入kernel/drivers/media/i2c/目录你会发现一堆以imx、ov、gc开头的C文件这些就是不同图像传感器的驱动。我们的目标就是在这里创建一个imx415.c或者如果SDK中已有其他IMX系列如imx317、imx477的驱动可以将其作为模板进行修改这比从零开始要高效得多。2.2 驱动代码框架与V4L2子设备在Linux的V4L2框架中图像传感器被抽象为一个“子设备”subdev。子设备驱动的主要任务是向V4L2核心注册自己并实现一系列的回调函数ops用于处理上层发来的控制命令例如设置分辨率、帧率、曝光时间、增益等。一个最基础的Sensor驱动框架包含以下几个部分驱动加载与卸载module_init和module_exit宏定义的入口和出口函数。I2C设备ID匹配表一个struct i2c_device_id数组用于告诉内核当I2C总线上出现某个特定地址的设备时应该由这个驱动来管理。IMX415的I2C地址通常是0x1a7位地址。核心结构体imx415这是一个自定义的结构体用于保存这个Sensor实例的所有状态信息例如I2C客户端指针、当前模式、锁、控制句柄等。它通常会内嵌一个struct v4l2_subdev成员这是与V4L2框架交互的核心。子设备操作集v4l2_subdev_ops这里定义了诸如.s_stream(启动/停止数据流)、.set_fmt(设置格式) 等关键操作。媒体控制器Media Controller集成对于RV1126这类复杂芯片强烈建议使用Media Controller框架来管理数据流管线。这意味着你的驱动还需要实现media_entity_operations并调用media_entity_pads_init等函数来声明Sensor的源pad输出端。初始化序列在驱动探测probe函数中需要完成一系列操作检查Sensor ID通过读寄存器确认是IMX415、分配核心结构体、初始化子设备、初始化媒体实体、创建控制句柄v4l2_ctrl_handler、注册子设备。这里有一个关键点Sensor驱动本身不直接产生/dev/videoX设备节点。它只是整个摄像头管线中的一个环节。视频设备节点是由更上层的“视频接收器”例如RV1126的CSI主机控制器驱动在识别并绑定到Sensor子设备后创建的。我们的驱动要做的就是正确地将自己注册到系统中并等待被“链接”。3. 设备树DTS配置硬件连接的软件描述设备树是告诉内核硬件如何连接的关键。对于RV1126接入IMX415我们需要在对应的板级设备树文件例如kernel/arch/arm/boot/dts/rockchip/rv1126-xxx.dtsi中添加节点。3.1 I2C总线与Sensor节点首先要确定IMX415连接在哪个I2C总线上。假设连接在I2C1上。i2c1 { status okay; clock-frequency 400000; // I2C速率400kHz通常足够 imx415: imx4151a { compatible sony,imx415; reg 0x1a; // I2C从机地址与驱动中的匹配表对应 clocks cru CLK_MIPICSI_OUT; // 输入时钟需要参考时钟树 clock-names xvclk; power-domains power RV1126_PD_VI; pinctrl-names default; pinctrl-0 mipicsi_clk0; // 引脚复用配置控制MIPI CSI时钟和数据线 reset-gpios gpio1 RK_PD0 GPIO_ACTIVE_LOW; // 复位引脚低电平有效 pwdn-gpios gpio1 RK_PD1 GPIO_ACTIVE_HIGH; // 电源down引脚高电平有效 rockchip,camera-module-index 0; // 摄像头模组索引 rockchip,camera-module-facing back; // 摄像头朝向 rockchip,camera-module-name default; // 模组名 rockchip,camera-module-lens-name default; // 镜头名 port { imx415_out: endpoint { remote-endpoint mipi_in_ucam0; // 连接到MIPI CSI主控的输入端口 >csi_dphy0 { status okay; ports { port0 { reg 0; #address-cells 1; #size-cells 0; mipi_in_ucam0: endpoint1 { reg 1; remote-endpoint imx415_out; // 与Sensor的输出端点对应 >struct imx415_reg { u16 addr; u8 val; }; static const struct imx415_reg imx415_global_regs[] { {0x3000, 0x01}, // 软件复位 {0x3002, 0x00}, // 主模式设置 // ... 数十甚至上百个寄存器配置 {0x3000, 0x00}, // 结束复位 };然后在驱动的初始化函数中通过一个I2C写函数循环将这个数组写入Sensor。这里有一个大坑寄存器写入的顺序和时机可能非常严格。例如必须先给Sensor供电稳定再释放复位等待一定时间如ms级延时才能开始写I2C寄存器。某些关键寄存器如模式切换寄存器在写入后需要等待Sensor内部的稳定时间驱动里需要调用msleep或usleep_range。4.2 模式Format与帧率Frame Rate设置IMX415支持多种分辨率如3840x2160 (4K)、1920x1080等。我们需要在驱动中定义支持的模式。static const struct imx415_mode supported_modes[] { { .width 3840, .height 2160, .max_fps { .numerator 10000, .denominator 300000, // 约30fps }, .hts_def 4400, // 水平总像素含消隐 .vts_def 2250, // 垂直总行数含消隐 .reg_list imx415_4k30_regs, // 指向3840x216030fps的专用寄存器列表 }, // ... 可以定义其他模式 };hts_def(Horizontal Total Size) 和vts_def(Vertical Total Size) 这两个参数至关重要。它们定义了Sensor输出的“总”行像素数和“总”行数包含了有效图像区域和消隐区域。帧率FPS的计算公式为FPS 输入时钟频率 / (vts * hts)。当你需要调整帧率时通常不是直接改时钟而是修改vts寄存器的值来增加或减少垂直消隐时间。.reg_list指向该分辨率下特定的寄存器配置数组。不同分辨率下窗口大小、读出方式等寄存器配置是不同的。在V4L2的.set_fmt操作中驱动需要根据应用层请求的格式和分辨率切换到对应的模式并应用相应的寄存器列表。4.3 曝光与增益控制自动曝光AE和自动增益控制AGC是图像处理的基础。在V4L2框架下这些通过控制Control接口暴露给用户层。我们需要在驱动中创建这些控制项。static const struct v4l2_ctrl_config imx415_ctrls[] { { .ops imx415_ctrl_ops, .id V4L2_CID_EXPOSURE_ABSOLUTE, .name Exposure, .type V4L2_CTRL_TYPE_INTEGER, .min 1, .max 1125, // 最大不能超过vts-4留出行消隐 .step 1, .def 0x200, .flags V4L2_CTRL_FLAG_SLIDER, }, { .ops imx415_ctrl_ops, .id V4L2_CID_ANALOGUE_GAIN, .name Analogue Gain, .type V4L2_CTRL_TYPE_INTEGER_MENU, .min 0, .max ARRAY_SIZE(imx415_gain_menu) - 1, .menu_skip_mask 0, .def 0, .qmenu imx415_gain_menu, // 一个字符串数组描述如1x, 2x等 }, };在.s_ctrl回调函数中当用户层或ISP的3A算法设置这些控制值时驱动需要将对应的值如曝光行数、增益索引转换为Sensor的寄存器值并通过I2C写入。这里需要注意单位的转换例如V4L2的曝光控制单位可能是“行”而IMX415的曝光寄存器可能分成高、中、低多个字节需要正确组合。5. 与RV1126 ISP的集成Media Controller链路建立这是RV1126平台Sensor驱动开发中最具特色也最容易出错的部分。RV1126的ISP是一个复杂的硬件图像处理管线包含许多处理单元如RAW处理、降噪、色彩校正等。Linux内核使用Media Controller框架来管理和配置这个管线。5.1 理解Media Controller概念Media Controller将整个视频设备抽象为一个由多个“实体”Entity和“连接”Link组成的图Graph。实体Entity代表一个硬件模块或虚拟处理单元如Sensor (imx415)、CSI接收器 (csi-dphy0)、ISP前端 (rkisp-isp-subdev)、ISP参数节点 (rkisp-params-subdev)、ISP统计节点 (rkisp-statistics-subdev) 以及多个视频设备节点 (rkisp_mainpath,rkisp_selfpath等)。Pad实体上的输入或输出端点。例如Sensor实体只有一个输出padCSI接收器有一个输入pad和一个输出pad。连接Link将一个实体的输出pad连接到另一个实体的输入pad建立数据流通路。我们的目标就是让内核在启动时自动或通过用户空间工具如media-ctl建立一条从imx415到rkisp_mainpath主路径视频节点的完整链路。5.2 驱动中的Media Controller初始化在Sensor驱动的probe函数中除了注册V4L2子设备还必须初始化其Media Controller实体。// 1. 初始化媒体实体 sensor-sd.entity.function MEDIA_ENT_F_CAM_SENSOR; sensor-pad.flags MEDIA_PAD_FL_SOURCE; // Sensor是源只有输出pad ret media_entity_pads_init(sensor-sd.entity, 1, sensor-pad); // 2. 将子设备实体注册到Media Controller设备 // 通常RV1126的ISP驱动如rkisp会创建一个media_device。 // Sensor驱动需要找到这个media_device并将自己的实体添加到其中。 // 这通常在platform driver的probe中通过遍历子节点或使用API完成。 // 关键代码可能类似于 sensor-sd.entity.graph_obj.mdev mdev; // mdev是ISP的media_device ret media_device_register_entity(mdev, sensor-sd.entity);关键点Sensor实体必须被正确地注册到ISP驱动创建的media_device上否则后续的链路建立会失败。5.3 设备树中的链路配置可选但推荐更优雅的方式是在设备树中描述链路。这需要内核和驱动支持。在RV1126的BSP中可能已经定义好了ISP的端口。我们需要做的就是将Sensor的输出端口连接到ISP的输入端口正如第3节设备树配置中remote-endpoint所做的那样。当驱动解析设备树时会自动调用media_create_pad_link来建立连接。如果设备树配置正确系统启动后使用media-ctl -p命令应该能看到一条完整的链路- entity 1: imx415 1-001a (1 pad, 1 link) type V4L2 subdev subtype Sensor flags 0 device node name /dev/v4l-subdev0 pad0: Source [fmt:SRGGB10/3840x2160 field:none colorspace:srgb] - rockchip-sy-mipi-dphy:0 [ENABLED] - entity 5: rkisp-isp-subdev (4 pads, 4 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 pad0: Sink [fmt:SRGGB10/3840x2160 field:none colorspace:srgb] - rockchip-sy-mipi-dphy:1 [ENABLED] pad1: Source [fmt:YUYV8_2X8/3840x2160 field:none colorspace:srgb] - rkisp_mainpath:0 [ENABLED]这个输出显示了数据流imx415-rockchip-sy-mipi-dphy(CSI PHY) -rkisp-isp-subdev(ISP处理单元) -rkisp_mainpath(最终视频设备)。6. 调试与问题排查实战记录理论配置完成后真正的挑战才开始。以下是我在调试IMX415时遇到的一些典型问题及排查思路。6.1 驱动探测失败I2C通信问题现象内核启动日志中看不到imx415的probe函数被调用或者提示“probe failed”。排查步骤检查设备树确认compatible字符串与驱动中的of_device_id表是否完全一致包括大小写。确认reg地址是否正确。检查I2C总线使用i2cdetect工具。首先加载I2C驱动然后在用户空间执行i2cdetect -y 1假设是I2C1。如果能看到地址0x1a显示为UU表示该地址已被内核驱动占用这是正常的。如果显示为--表示没有设备响应可能是硬件问题电源、复位、I2C上拉电阻或I2C总线未使能。如果显示为数字如1a表示有设备但未被驱动绑定可能是驱动未编译进内核或匹配失败。检查电源和复位时序用示波器或逻辑分析仪测量Sensor的电源AVDD、DVDD、DOVDD、复位引脚和PWDN引脚的上电时序。必须严格按照IMX415数据手册的要求通常是先上电然后释放PWDN如果存在等待至少几毫秒再释放复位。驱动中的probe函数应按照此时序操作GPIO。检查输入时钟用示波器测量Sensor的XCLK引脚确认是否有时钟信号频率是否正确如24MHz。时钟不对Sensor根本无法工作。6.2 媒体链路建立失败无/dev/videoX节点现象驱动probe成功内核日志显示Sensor被识别但系统没有生成/dev/video0等设备节点。排查步骤运行media-ctl -p这是最重要的调试命令。查看imx415实体是否存在它的输出pad是否连接[ENABLED]到了下一个实体如CSI PHY。如果链路是[DISABLED]或根本没有连接说明Media Controller链路没建立好。检查设备树连接反复核对Sensor节点中port/endpoint的remote-endpoint属性与CSI主机控制器节点中对应端点的reg编号是否匹配。一个字符错误都会导致连接失败。检查内核配置确保CONFIG_MEDIA_CONTROLLER和CONFIG_VIDEO_V4L2_SUBDEV_API被启用。RV1126的ISP驱动如CONFIG_VIDEO_ROCKCHIP_ISP1也必须启用。查看内核日志使用dmesg | grep -iE “media|link|entity|v4l2”过滤相关日志看是否有建立链路失败的报错信息。6.3 能抓到图但图像异常花屏、条纹、颜色不对现象使用v4l2-ctl --stream-mmap --stream-count10 -d /dev/video0 --stream-toframe.raw可以抓取数据但用工具如raw2rgbpnm转换后看到的图像是乱的。排查步骤确认数据格式使用v4l2-ctl -d /dev/video0 --list-formats-ext查看设备支持的格式。确保你请求的格式如YUYV、NV12与Sensor实际输出的格式通常是SRGGB10这种RAW Bayer格式以及ISP能够处理的格式匹配。在Media Controller链路中每个pad上的格式需要协商一致。如果Sensor输出SRGGB10而ISP sink pad期望的是SBGGR10就会因Bayer顺序不对导致颜色异常。检查MIPI配置图像出现规律性条纹或错位很可能是MIPI配置问题。重点检查链路频率 (link-frequencies)是否与Sensor寄存器设置的实际输出速率匹配不匹配会导致接收端采样错误。Lane数量和映射>

相关新闻

在Mac mini M2上编译部署Vastbase G100:ARM架构企业级数据库实战

在Mac mini M2上编译部署Vastbase G100:ARM架构企业级数据库实战

1. 项目概述:当“养虾神器”遇上企业级数据库最近,我的朋友圈和几个技术社区被一个奇特的“项目”刷屏了:用苹果的Mac mini来“养虾”。这听起来像是个段子,但背后其实是一群极客在用一种幽默的方式,表达对Mac mini M系…

2026/8/5 3:42:17 阅读更多 →
CPU-Z内存检测全解析:从插槽、频率到双通道与超频实战

CPU-Z内存检测全解析:从插槽、频率到双通道与超频实战

1. 项目概述:为什么我们需要CPU-Z来“看透”内存?对于任何一位自己动手组装电脑、升级硬件,或者仅仅是好奇自己电脑“肚子里”到底装了些什么的朋友来说,内存都是一个绕不开的核心部件。它直接决定了你同时打开几十个浏览器标签页…

2026/8/5 3:42:13 阅读更多 →
解决npm EINTEGRITY错误的3种实战方法

解决npm EINTEGRITY错误的3种实战方法

1. 项目概述最近在开发前端项目时,频繁遇到一个令人头疼的npm报错:"npm ERR! code EINTEGRITY"。这个错误通常发生在执行npm install或npm ci命令时,表现为包完整性校验失败。作为一名全栈开发者,我花了大量时间研究这个…

2026/8/5 3:42:08 阅读更多 →

最新新闻

Qt开发进阶:攻克图形视图、多线程与部署三大核心难点

Qt开发进阶:攻克图形视图、多线程与部署三大核心难点

在实际 C 图形界面开发中,Qt 框架以其跨平台特性和丰富的组件库成为许多桌面应用的首选。然而,从学习到精通,再到应对复杂的生产级项目,开发者会经历一个明显的难度曲线。这个曲线并非平滑上升,而是在某些关键节点上会…

2026/8/5 10:52:50 阅读更多 →
搜索推荐系统评估:Precision@k、Recall@k、F1@k与NDCG@k详解与应用

搜索推荐系统评估:Precision@k、Recall@k、F1@k与NDCG@k详解与应用

1. 从“搜不到”到“搜不准”:为什么我们需要这些k指标? 做搜索和推荐系统的朋友,估计都经历过这样的场景:你精心设计了一个模型,离线指标看着挺漂亮,AUC、准确率都挺高,结果一上线,…

2026/8/5 10:52:50 阅读更多 →
Windows苹果设备驱动一键安装:3分钟解决iPhone USB网络共享难题

Windows苹果设备驱动一键安装:3分钟解决iPhone USB网络共享难题

Windows苹果设备驱动一键安装:3分钟解决iPhone USB网络共享难题 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.c…

2026/8/5 10:52:50 阅读更多 →
3.Introduction to PyTorch YouTube Series--Autograd

3.Introduction to PyTorch YouTube Series--Autograd

前言 学习地址 方向导数:研究函数在某一点处沿某个方向的变化率 梯度:本质是一个向量,它的方向是函数在某一点处方向导数取得最大值的方向,也就是某一点处变化率最快的方向,它的向量模就意味着最大值。 python中的a…

2026/8/5 10:52:50 阅读更多 →
思源宋体TTF:7种字重免费商用中文字体的终极指南

思源宋体TTF:7种字重免费商用中文字体的终极指南

思源宋体TTF:7种字重免费商用中文字体的终极指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在寻找一款既专业又完全免费的中文字体吗?思源宋体TTF&#…

2026/8/5 10:52:50 阅读更多 →
Linux下Unreal Engine深度集成Cesium插件:源码编译与引擎嵌入实战

Linux下Unreal Engine深度集成Cesium插件:源码编译与引擎嵌入实战

1. 项目概述与核心目标最近在Ubuntu 20.04.1上折腾Unreal Engine,想把CesiumForUnreal这个强大的地理空间插件给集成进去,结果踩了一路的坑。我的目标很明确:不是简单地把插件放到某个项目里,而是要把插件直接编译并嵌入到Unreal …

2026/8/5 10:51:50 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →