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

    文章

    699

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    STM32F10xxx硬件开发指南

    官方STM32F10xxx硬件开发指南
    发表于 04-14 14:59 2次下载

    【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发-第4章 UART基础知识

    【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发-第4章 UART基础知识
    的头像 发表于 03-17 15:50 846次阅读
    【北京迅为】iTOP-<b class='flag-5'>RK</b>3568<b class='flag-5'>开发</b>板OpenHarmony系统南向驱动<b class='flag-5'>开发</b>-第4章 UART<b class='flag-5'>基础知识</b>

    【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识

    【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识
    的头像 发表于 03-06 11:23 1000次阅读
    【北京迅为】iTOP-<b class='flag-5'>RK</b>3568OpenHarmony系统南向驱动<b class='flag-5'>开发</b>GPIO<b class='flag-5'>基础知识</b>

    GD32F1x0硬件开发指南

    电子发烧友网站提供《GD32F1x0硬件开发指南.pdf》资料免费下载
    发表于 02-09 15:39 0次下载
    GD32F1x0硬件<b class='flag-5'>开发指南</b>

    GD32F10x硬件开发指南

    电子发烧友网站提供《GD32F10x硬件开发指南.pdf》资料免费下载
    发表于 02-07 17:30 0次下载
    GD32F10x硬件<b class='flag-5'>开发指南</b>

    GD32VF103硬件开发指南

    电子发烧友网站提供《GD32VF103硬件开发指南.pdf》资料免费下载
    发表于 02-07 17:30 2次下载
    GD32VF103硬件<b class='flag-5'>开发指南</b>

    GD32L23x硬件开发指南

    电子发烧友网站提供《GD32L23x硬件开发指南.pdf》资料免费下载
    发表于 02-07 17:26 2次下载
    GD32L23x硬件<b class='flag-5'>开发指南</b>

    GD32F4xx硬件开发指南

    电子发烧友网站提供《GD32F4xx硬件开发指南.pdf》资料免费下载
    发表于 02-07 17:20 3次下载
    GD32F4xx硬件<b class='flag-5'>开发指南</b>

    GD32F3x0硬件开发指南

    电子发烧友网站提供《GD32F3x0硬件开发指南.pdf》资料免费下载
    发表于 02-07 17:19 1次下载
    GD32F3x0硬件<b class='flag-5'>开发指南</b>

    GD32E23x硬件开发指南

    电子发烧友网站提供《GD32E23x硬件开发指南.pdf》资料免费下载
    发表于 02-07 16:20 0次下载
    GD32E23x硬件<b class='flag-5'>开发指南</b>

    AN154 GD32VW553快速开发指南

    电子发烧友网站提供《AN154 GD32VW553快速开发指南.pdf》资料免费下载
    发表于 01-17 15:39 15次下载
    AN154 GD32VW553快速<b class='flag-5'>开发指南</b>

    VCA5807开发指南

    电子发烧友网站提供《VCA5807开发指南.pdf》资料免费下载
    发表于 01-03 16:56 3次下载
    VCA5807<b class='flag-5'>开发指南</b>

    超值音棒参考设计套件开发指南

    电子发烧友网站提供《超值音棒参考设计套件开发指南.pdf》资料免费下载
    发表于 12-21 09:16 0次下载
    超值音棒参考设计套件<b class='flag-5'>开发指南</b>

    Verilog 测试平台设计方法 Verilog FPGA开发指南

    Verilog测试平台设计方法是Verilog FPGA开发中的重要环节,它用于验证Verilog设计的正确性和性能。以下是一个详细的Verilog测试平台设计方法及Verilog FPGA
    的头像 发表于 12-17 09:50 1556次阅读