商务网站开发前期项目费用预算,本科自考有什么专业,举三个成功的新媒体营销案例,百度推广app下载一、RPMsg-lite与端点机制回顾
在RPMsg协议框架中#xff1a;
Endpoint#xff08;端点#xff09; 是一个逻辑通信端口#xff0c;由本地地址#xff08;local addr#xff09;、远程地址#xff08;remote addr#xff09;和回调函数组成。每个消息都会发送到特定的…一、RPMsg-lite与端点机制回顾
在RPMsg协议框架中
Endpoint端点 是一个逻辑通信端口由本地地址local addr、远程地址remote addr和回调函数组成。每个消息都会发送到特定的端点地址端点负责接收并处理对应地址的消息。rpmsg-lite库提供了轻量级API用于RTOS或裸机端实现降低资源占用。
RPMsg端点创建的一般步骤为
创建端点提供本地地址、回调函数。向名字服务注册端点名可选。通知远端核自动完成绑定。 二、rpmsg_lite_create_ept的详细实现
函数原型与含义
struct rpmsg_lite_endpoint *rpmsg_lite_create_ept(struct rpmsg_lite_instance *rpmsg_dev, // rpmsg-lite 实例uint32_t addr, // 本地端点地址可以填 RPMSG_ADDR_ANY 自动分配rpmsg_ept_rx_cb_t rx_cb, // 消息接收回调函数void *rx_cb_data // 回调函数用户数据上下文
);执行流程与机制
1. 创建端点结构体endpoint
在内部分配一个struct rpmsg_lite_endpoint包含端点地址、本地回调函数、回调数据等
struct rpmsg_lite_endpoint {struct rpmsg_lite_instance *rpmsg_dev;uint32_t addr; // 本地地址rpmsg_ept_rx_cb_t cb; // 回调函数void *cb_data; // 回调数据struct rpmsg_lite_endpoint *next;
};2. 地址分配机制
如果用户指定地址为RPMSG_ADDR_ANY (0xFFFFFFFF)RPMsg-lite会自动从地址池分配未占用的地址。如果指定了明确地址则直接使用该地址。
3. 回调函数的注册
接收到的消息会通过RPMsg-lite库的中断/virtqueue机制接收后解析目标地址将消息分发给对应端点调用注册的回调函数
// 接收消息流程示意
rpmsg_rx_callback(endpoint, payload, payload_len, src_addr);实例代码示例
// 创建端点示例
struct rpmsg_lite_endpoint *my_ept rpmsg_lite_create_ept(rpmsg_instance, RPMSG_ADDR_ANY, // 自动地址分配my_endpoint_rx_cb, // 回调函数NULL // 回调上下文
);三、rpmsg_ns_announce实现详解名字服务机制
RPMsg名字服务用于远端核自动发现端点并建立端到端通信通道。
函数原型与含义
int32_t rpmsg_ns_announce(struct rpmsg_lite_instance *rpmsg_lite_dev, struct rpmsg_lite_endpoint *new_ept, const char *ept_name, uint32_t flags
);rpmsg_lite_devRPMsg实例句柄。new_ept需要注册的端点句柄。ept_name端点名称远端用此名称发现服务。flags标志位目前通常为0。
内部实现流程
rpmsg_ns_announce本质是向一个特殊端点地址为RPMSG_NS_ADDR53发送一个特殊消息这个消息称为名字服务公告消息announce。
消息结构定义为伪代码
struct rpmsg_ns_msg {char name[32]; // 端点名uint32_t addr; // 端点地址uint32_t flags; // 属性标记
};发送方式
将name、addr、flags组成payload发送到特殊端点地址53。远端的RPMsg名字服务Linux端的rpmsg_core、rpmsg_ctrl会监听地址53的消息收到此消息后自动执行相应端点绑定和设备节点创建操作。
示例
// 发送名字服务公告消息
rpmsg_ns_announce(rpmsg_instance, my_ept, rpmsg-channel-1, 0);四、协议交互过程详细示意图解
RTOS/裸机端M4与Linux端A53交互过程如下
M4端 共享内存VRing Linux端| | |
rpmsg_lite_create_ept(...) | |--创建端点自动分配地址 | || | |
rpmsg_ns_announce(...) | |---向RPMSG_NS_ADDR发送端点公告---------| || |--------VRing传输名字服务消息-----------|| | || | Linux RPMsg Core| | || |-----接收到名字服务公告端点名地址--| | || |----自动创建/dev/rpmsgX设备文件rpmsg_char| | || | || | ||---远端核打开/dev/rpmsgX并绑定到端点地址------| | | ||-------远端通过/dev/rpmsgX发送消息到地址端点|| | |
my_endpoint_rx_cb(...) | |----回调被调用处理接收到的消息 | |五、关键注意事项与高级技巧 自动绑定机制 名字服务公告消息本质是一种特殊的RPMsg消息因此远端核必须启动RPMsg Core服务才能接收公告消息实现自动绑定。 多端点支持 使用RPMsg-lite时可创建多个端点每个端点可以独立注册名字服务Linux端会对应创建多个/dev/rpmsgX设备节点。 资源表配置 resource_table中的VDEV资源定义了vring共享内存和VirtIO队列配置必须与RPMsg-lite实例初始化参数保持一致。 六、小结与应用场景推荐
rpmsg_lite_create_ept负责本地端点的地址申请与回调注册。rpmsg_ns_announce通过特殊消息完成远程核端点发现与自动设备绑定。
典型应用场景包括
Linux核调用RTOS侧传感器数据采集。M4核主动向Linux核推送实时数据。多核系统启动时自动建立通讯链路。