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

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

3天内不再提示

RK 平台 Vendor Storage 开发指南:基础知识、流程与实用技巧

jf_44130326 来源:Linux1024 作者:Linux1024 2025-11-22 07:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

瑞芯微(RK)平台的嵌入式开发中,vendor_storage是一个核心模块,专门用于存储SN(序列号)、MAC地址、DRM密钥等厂商专属数据。它不仅提供了跨环境的数据读写能力,还具备可靠性校验、掉电恢复等关键特性,是保障设备身份标识、功能授权等核心信息安全的重要组件。本文将从基础知识、开发流程、使用途径三方面,为开发者梳理完整的开发逻辑。

wKgZO2kg8naAHK-lAAAwidjUaJQ168.png

一、核心基础知识:了解Vendor Storage是什么?

1.核心定位与核心特性

Vendor Storage的核心作用是集中管理厂商专属静态数据,这些数据通常需要在设备全生命周期中稳定存储,且支持多环境访问。其核心特性包括:

•多场景读写:支持UBOOT、Kernel、Linux应用层、PC工具直接读写,覆盖设备启动到运行的全流程;

•数据可靠性:自带Hash校验、掉电恢复机制,避免数据损坏或丢失;

•灵活分配:数据按64字节整数倍分配(1-64字节占64字节,65-128字节占128字节,以此类推);

•唯一ID访问:每个数据项对应唯一ID,通过ID精准读写,支持SN、MAC、密钥等16种标准类型及自定义类型。

2.存储架构与数据布局

Vendor Storage支持EMMC、SPI NOR、NAND等主流存储介质,整体架构分为“索引区+数据区+校验区”三部分:

•索引区(64K):存储数据项的ID、偏移量、大小、空闲空间等元信息,便于快速定位数据;

•数据区(按需分配):存储实际厂商数据,如SN、WIFI MAC、LAN MAC、BT MAC等,支持用户自定义数据项;

•校验区(8字节):包含4字节Hash校验值和4字节版本号,确保数据完整性。

3.关键ID定义(标准类型)

开发中需通过ID标识数据项,常用标准ID如下:

数据类型 对应ID名称 用途
序列号 VENDOR_SN_ID 设备唯一标识
有线网MAC VENDOR_LAN_MAC_ID 局域网身份标识
无线网MAC VENDOR_WIFI_MAC_ID WIFI模块身份标识
蓝牙MAC VENDOR_BT_MAC_ID 蓝牙模块身份标识
DRM密钥 VENDOR_DRM_KEY_ID 数字版权保护授权
传感器校准数据 VENDOR_SENSOR_CALIBRATION_ID 传感器精度校准参数
自定义数据 VENDOR_CUSTOM_ID(含扩展) 用户自定义厂商数据

二、开发流程:从环境配置到功能实现

Vendor Storage的开发流程围绕“环境配置→接口调用→测试验证”三步骤展开,覆盖UBOOT、Kernel、应用层全场景。

1.前期准备:环境配置与源码依赖

(1)源码路径

•UBOOT层:

u-boot/board/rockchip/common/storage/storage.c

•Kernel层:

kernel/drivers/soc/rockchip/rk_vendor_storage.c、sdmmc_vendor_storage.c

•应用层:基于Kernel提供的IOCTL节点或PC工具开发

(2)编译配置

•Kernel层:通过Menuconfig启用驱动(路径:Drivers -> SOC -> Rockchip -> Vendor Storage);

•UBOOT层:默认集成源码,需确保编译时勾选“Vendor Storage Support”。

2.核心开发:接口调用(分场景实现)

(1)UBOOT层开发(设备启动阶段读写)

UBOOT层主要用于设备启动时读取关键数据(如MAC地址),核心接口如下:

•初始化:int vendor_storage_init(void)

◦功能:初始化Vendor Storage模块

◦返回值:0 =成功,非0 =失败

•读取数据:int vendor_storage_read(u32 id, void *pbuf, u32 size)

◦入参:id =数据项ID,pbuf =接收数据的缓冲区,size =期望读取字节数

◦返回值:非- 1 =实际读取字节数,-1 =读取失败

•写入数据:int vendor_storage_write(u32 id, void *pbuf, u32 size)

◦入参:id =数据项ID,pbuf =待写入数据缓冲区,size =写入字节数

◦返回值:0 =成功,非0 =失败

示例场景:UBOOT阶段读取SN并打印

vendor_storage_init();// 初始化charsn_buf[64];intret =vendor_storage_read(VENDOR_SN_ID, sn_buf,64);// 读取SNif(ret >0) { printf("Device SN: %sn", sn_buf);}

(2)Kernel层开发(驱动级读写)

Kernel层通过驱动接口提供IOCTL节点,供应用层调用,核心接口与UBOOT层类似:

•读取数据:int rk_vendor_read(u32 id, void *pbuf, u32 size)

•写入数据:int rk_vendor_write(u32 id, void *pbuf, u32 size)

•注意:Kernel层无需手动初始化,驱动加载时自动完成初始化。

(3)Linux应用层开发(用户态读写)

应用层通过打开/dev/vendor_storage设备节点,结合IOCTL实现读写,核心步骤:

1.打开设备节点:int sys_fd = open("/dev/vendor_storage", O_RDWR, 0);

2.构造读写请求(指定ID、缓冲区、数据大小);

3.调用IOCTL接口完成读写;

4.关闭设备节点。

示例代码片段(读取WIFI MAC):

intsys_fd =open("/dev/vendor_storage", O_RDWR,0);if(sys_fd < 0) {    perror("open vendor_storage fail");    return -1;}struct rk_vendor_req req;req.tag = VENDOR_REQ_TAG;req.id = VENDOR_WIFI_MAC_ID;req.len = 6; // MAC地址占6字节int ret = ioctl(sys_fd, VENDOR_READ_IO, &req);if (ret >=0) { printf("WIFI MAC:%02x:%02x:%02x:%02x:%02x:%02xn",     req.data[0], req.data[1], req.data[2],     req.data[3], req.data[4], req.data[5]);}close(sys_fd);

3.测试验证:工具与方法

(1)PC工具测试(RKDevInfoWriteTool)

•兼容模式:选择“兼容模式”下面写号,在这种模式下面,可以选择”强制MASKROM”强制机器到maskrom下面写号,或者不选择“强制MASKROM”,那么机器需要先切换到loader模式写号(适用于在空片情况下使用);

•写后重启:写完后重启机器;

•适用场景:量产阶段批量写入SN、MAC等数据,或快速验证数据正确性。

wKgZO2kg8naAIr_rAAD6RK8DnnI490.png

(2)命令行工具测试(vendor_storage工具)

RK提供专用命令行工具,支持Linux环境快速读写,常用命令示例:

•写入字符串到自定义ID(ID=26):

vendor_storage -w VENDOR_CUSTOM_ID_1A -t string -i "test_storage"

•读取自定义ID数据到文件:

vendor_storage -r VENDOR_CUSTOM_ID_1A -t file -i /userdata/read.bin

•读取SN并以字符串显示:

vendor_storage -r VENDOR_SN_ID -t string

三、使用途径:不同场景下的应用选择

根据开发阶段和使用场景,可选择不同的访问途径,具体如下:

使用场景 推荐途径 优势
设备启动阶段(UBOOT) UBOOT层API 启动早、资源占用少,适合关键数据读取
驱动开发/内核态操作 Kernel层API 权限高、性能好,支持底层数据管理
应用层程序读写 Linux应用层IOCTL接口 开发便捷,无需关注底层实现
量产批量写入/快速验证 PC工具(ProvisioningTool) 可视化操作,支持批量处理
调试/命令行快速操作 vendor_storage命令行工具 轻量化,适合Linux环境快速测试

四、开发注意事项

1.数据大小:严格遵循64字节整数倍分配规则,避免空间浪费;

2.数据可靠性:写入关键数据后建议读取校验,确保Hash验证通过;

3.ID唯一性:自定义ID需避开标准ID(0-255中已定义的16种类型),避免冲突;

4.权限控制:应用层访问/dev/vendor_storage需root权限,可通过修改设备节点权限优化。

Vendor Storage作为RK平台的核心厂商数据管理模块,其设计兼顾了可靠性、灵活性和多场景适配性。掌握本文梳理的基础知识、开发流程和使用途径,可快速实现SN、MAC、密钥等数据的管理需求,适配从设备启动到量产交付的全流程开发场景。


审核编辑 黄宇

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

    关注

    27

    文章

    855

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3576 单板机 C/Python/MQTT 应用开发手册(二)

    本文为创龙科技RK3576 单板机应用开发指南,包含开发环境配置、GDB 调试、外设控制(LED/CAN/ 串口)、Python 开发及 MQTT 通信案例。提供完整编译命令、代码解析
    的头像 发表于 04-21 10:43 78次阅读
    <b class='flag-5'>RK</b>3576 单板机 C/Python/MQTT 应用<b class='flag-5'>开发</b>手册(二)

    芯科科技低功耗Wi-Fi开发指南

    Silicon Labs(芯科科技)整理并制作了低功耗Wi-Fi开发指南的网站资源,以帮助开发人员使用低功耗 Wi-Fi 6协议进行下一代物联网产品开发
    的头像 发表于 04-21 10:09 171次阅读

    RK3576 单板机 C/Python/MQTT 应用开发手册(一)

    本文为创龙科技RK3576 单板机应用开发指南,包含开发环境配置、GDB 调试、外设控制(LED/CAN/ 串口)、Python 开发及 MQTT 通信案例。提供完整编译命令、代码解析
    的头像 发表于 04-20 13:55 205次阅读
    <b class='flag-5'>RK</b>3576 单板机 C/Python/MQTT 应用<b class='flag-5'>开发</b>手册(一)

    RK3576 单板机 LinuxSDK 开发与系统定制手册(一)

    本文为创龙科技RK3576 单板机 Linux 系统开发指南,涵盖 SDK 搭建、内核与引导程序开发、根文件系统修改、镜像打包、分区配置及硬件资源调优等全流程。提供命令实操、参数说明与
    的头像 发表于 04-15 11:18 403次阅读
    <b class='flag-5'>RK</b>3576 单板机 LinuxSDK <b class='flag-5'>开发</b>与系统定制手册(一)

    RK3562 单板机嵌入式 eMMC 健康监测开发指南:数据采集与状态分析

    本文为创龙科技RK3562 单板机 eMMC 健康管理开发指南,围绕 emmc_get_info 案例,详解 eMMC 的 EXT_CSD 寄存器查询、多品牌寿命评估(擦写次数、坏块、寿命消耗
    的头像 发表于 03-31 15:07 169次阅读
    <b class='flag-5'>RK</b>3562 单板机嵌入式 eMMC 健康监测<b class='flag-5'>开发指南</b>:数据采集与状态分析

    RK3562 单板机嵌入式 ROS2 开发指南:环境搭建与工程编译

    本文为创龙科技RK3562 单板机 ROS2 Foxy 开发指南,涵盖系统测试与开发流程。详细说明 Python/C++ 节点通信、turtlesim 可视化测试的实操指令,以及上位
    的头像 发表于 03-27 11:26 7421次阅读
    <b class='flag-5'>RK</b>3562 单板机嵌入式 ROS2 <b class='flag-5'>开发指南</b>:环境搭建与工程编译

    RK3562 单板机 Linux 应用开发实战手册:LED/CAN/TCP/UART 案例与 Python 开发(二)

    本文为创龙科技RK3562 单板机应用开发指南,核心包含交叉编译工具链部署、GDB 远程调试,以及 LED、CAN、TCP/UDP、MQTT 等实战案例。文档支持 C/C++ 与 Python 双语
    的头像 发表于 02-25 11:35 1661次阅读
    <b class='flag-5'>RK</b>3562 单板机 Linux 应用<b class='flag-5'>开发</b>实战手册:LED/CAN/TCP/UART 案例与 Python <b class='flag-5'>开发</b>(二)

    RK3562 单板机 Linux-RT 系统开发指南:内核配置、实时性优化与案例详解

    本文为创龙科技RK3562 单板机 Linux-RT 开发指南,核心聚焦实时内核的性能测试与开发应用。内容包括 Linux 与 Linux-RT 实时性对比、CPU 负载测试、内核配置编译,以及
    的头像 发表于 02-10 11:49 1.8w次阅读
    <b class='flag-5'>RK</b>3562 单板机 Linux-RT 系统<b class='flag-5'>开发指南</b>:内核配置、实时性优化与案例详解

    一文吃透RK平台OTA升级开发:从逻辑到调试的完整指南

    ,能让开发者高效解决固件更新、功能迭代等问题。本文将从升级逻辑、核心技巧、调试要点到问题排查,全方位拆解 RK 平台 OTA 升级开发,附关键流程
    的头像 发表于 02-09 16:26 741次阅读
    一文吃透<b class='flag-5'>RK</b><b class='flag-5'>平台</b>OTA升级<b class='flag-5'>开发</b>:从逻辑到调试的完整<b class='flag-5'>指南</b>

    RK平台UART开发!从驱动配置到测试全流程

    完善的 UART 开发支持,本文将结合官方开发指南,从功能特点、驱动配置、测试验证三个维度,带大家快速掌握 RK 平台 UART 开发技巧,
    的头像 发表于 02-04 17:44 2123次阅读
    <b class='flag-5'>RK</b><b class='flag-5'>平台</b>UART<b class='flag-5'>开发</b>!从驱动配置到测试全<b class='flag-5'>流程</b>

    从eMMC到SPI+SSD:双存储方案下Vendor Storage适配指南

    Vendor Storage 访问异常。本文将结合实际调试案例,拆解适配过程中的核心问题与解决方案,帮助开发者快速踩坑。
    的头像 发表于 02-04 17:38 3729次阅读
    从eMMC到SPI+SSD:双存储方案下<b class='flag-5'>Vendor</b> <b class='flag-5'>Storage</b>适配<b class='flag-5'>指南</b>

    RK 平台 SPI 开发完全指南(驱动 + 配置 + 测试 + 优化)

    Linux 平台 SPI 驱动已形成完善的开发体系,支持 Master/Slave 双模式、多速率适配及灵活配置。本文基于 Rockchip 官方开发指南,从功能特性、驱动配置、测试验证到优化方案
    的头像 发表于 01-30 22:35 1195次阅读
    <b class='flag-5'>RK</b> <b class='flag-5'>平台</b> SPI <b class='flag-5'>开发</b>完全<b class='flag-5'>指南</b>(驱动 + 配置 + 测试 + 优化)

    C#上位机实战开发指南

    电子发烧友网站提供《C#上位机实战开发指南.pdf》资料免费下载
    发表于 01-11 17:15 6次下载

    避坑指南RK3568开发板选型,这5点没看清千万别下手!(附迅为驱动开发指南资源)

    避坑指南RK3568开发板选型,这5点没看清千万别下手!(附迅为驱动开发指南资源)
    的头像 发表于 10-30 15:49 1082次阅读
    避坑<b class='flag-5'>指南</b>!<b class='flag-5'>RK</b>3568<b class='flag-5'>开发</b>板选型,这5点没看清千万别下手!(附迅为驱动<b class='flag-5'>开发指南</b>资源)

    ArkUI-X在Android平台动态化开发指南

    目的; 场景2:特性Bundle动态化,特性和宿主应用发布解耦; 开发指南 目录说明 动态加载时要求应用沙箱内目录架构如下所示: /data/data/应用/files/arkui-x
    发表于 06-15 23:33