
- 将邮箱硬件(由 RTSS 邮箱驱动配置)映射到
/dev/sail/*通道。 - 为 HLOS 应用程序提供通知 API。
- 通过邮箱 IPC 机制,在 Linux 与 RTSS/NHLOS 之间实现全双工的结构化 IPC。
- 打开通道:应用程序打开邮箱资源管理器公开的 Tx 和 Rx 设备节点。
- 发送:应用程序向 Tx 设备节点写入结构化消息。
- 接收:
- 应用程序在 Rx 设备节点上阻塞(或使用 poll()/select())。
- 收到通知时读取消息(异步或基于轮询)。
- 关闭:应用程序关闭邮箱句柄;资源管理器清理上下文。
sources/sail-mailbox/sail-mb-umd/include/sail_mailbox.hsources/sail-mailbox/sail-mb-umd/src/sail_mbox_core.c、sail_mbox_lib.c、sail_mbox_lib.h和sailmb_internal.c
- 将共享的 DDR 邮箱区域划分为多个区域,例如区域 0、区域 1 和区域 2。
- 将每个区域视为一个通道/子区域,由唯一的通道/子区域 IDN 标识。
- 为 RTSS 与 APSS 之间的消息传递提供缓冲和通知基础设施。
/dev/sail/* 节点进行通信。
消息流和通知:
- RTSS 和 APSS 共享 DDR 邮箱区域,这些区域由邮箱外部驱动(RTSS 侧)以及相应的 APSS/HLOS 驱动管理。
- 当 APSS 或 RTSS 向某个区域的环形缓冲区写入数据时,该数据即可供应用程序使用。
- 为通知应用程序有新数据可用或某个缓冲区已被消费:
邮箱外部驱动使用 IPCC 在 APSS 与 RTSS 之间生成异步事件。
- 在 RTSS 上:
- 这些 IPC 事件会触发邮箱外部驱动的回调。
- 使用典型的 RTOS IPC 机制来唤醒或同步实时消费/生成消息的任务。
sail_proc/BSP/mailboxExt/public/mailboxExt_api.hsail_proc/BSP/mailboxExt/src/mailboxExt_api.c、mailboxExt_config.c
创建新的邮箱通道
RTSS 侧- 添加客户端 ID。
- 将新的客户端 ID 添加到
mailboxExt_api.h中的xMailboxExtclienttype。 - 将该条目放在 QCMI 起始和结束标记之间:
- 将新的客户端 ID 添加到
- 添加通道 ID。
mailboxExt_config.h 中的 mailboxEBChanType_e。
b. 将这些 ID 插入 QCMI 起始和结束标记之间:
- 更新子区域数量。
mailboxExt_config.h 中的 mailboxEB_QCMI_NUMSUBREGION 以反映新通道:
- 对于 Rx-Tx 对,子区域数量为 2,因此将
mailboxEB_QCMI_NUMSUBREGION设置为 22。 - 对于仅 Rx 或仅 Tx,子区域数量为 1,因此将
mailboxEB_QCMI_NUMSUBREGION设置为 21。
- 定义新的通道配置条目。
mailboxEB_DATA 静态资源表中添加新的通道配置条目:
xMailboxExtClientType 枚举中定义的更新后的通道索引编号。
mbsub_rgn_config_t 的结构定义:
mailboxExt_config.c 文件。
xMailboxExtClientType 枚举中索引值为 3 的 MAILBOX_CONSOLE 条目定义如下:
注意
name字段应包含三个字符,读通道以0为后缀,写通道以1为后缀。- 如果
xMailboxExtClientType客户端条目仅映射了单个 Rx 或 Tx ID,请使用默认值初始化其他通道条目,请参阅MAILBOX_CONSOLE示例
-
在
xMailboxClientRec表中添加条目。 a. 更新mailboxEB_CONST表:
xMailboxEBClientRec_t 的结构定义:
xMailboxEBChanRec_t 的结构定义:
/dev/sail/log 通道,客户端 ID 为 MAILBOX_CONSOLE 的客户端包含以下配置条目,其中仅定义了 Tx(写)通道。
- 根据该表选择协议、发送端和接收端。
- RTSS 核心使用附加在宏后的逻辑编号后缀,例如核心 0 对应 IPCC_C_SAIL0。
- 发送端列表示 APSS 用于与 RTSS 域接收端客户端连接的发送端客户端线路。每个发送端客户端根据所选协议提供表中指定数量的信号。
mailbox_test 应用程序位于 sail_proc\BSP\tests\sailsw1\mailbox_test\src\MBtests_sailsw1.c。
APPS 侧
-
在设备树中添加新的通道条目。
- 使用新的通道配置更新设备树:
注意&ipcc_computeL1 IPCC_CLIENT_SAIL0 0xA表示:ipcc_computeL1:协议名称(目前仅支持此协议)。IPCC_CLIENT_SAIL1:RTSS 核心编号。0XA:通道编号。
- 映射示例:
这对应于
/dev/sail/log,映射到xMailboxExtClientType枚举中索引值为 3 的MAILBOX_CONSOLE。
saildbg-
位置
sail-mailbox/reference_apps/sail_dbg/src/saildbg.c -
关键 API:
open_sail_mailbox():为 TX 和 RX 打开邮箱通道。write_sail_mailbox():向 TX 通道写入消息。read_sail_mailbox():从 RX 通道读取消息。close_sail_mailbox():关闭 TX 和 RX 的邮箱通道。
-
结构:
struct SailClientDataType *pTxClientData:用于发送消息的 TX 结构。struct SailClientDataType *pRxClientData:用于接收消息的 RX 结构。
- 邮箱测试应用程序: 邮箱测试应用程序:saildbg
-
位置
- sail_console_chan`:
-
位置:
sail-mailbox/unit_test_apps/sail_console_chan_app.c - 邮箱测试应用程序: 邮箱测试应用程序:sail_console_chan_app
-
位置:
RTSS 邮箱演示应用程序
sailmb_demo 参考应用程序演示了运行 Linux 的 APSS 与运行 Free RTOS 的 RTSS 之间的双向邮箱通信。该应用程序从 APSS 向某个 RTSS CPU 核心发送消息,并接收该 RTSS CPU 核心的响应。
成功的消息交换可验证以下内容:
- RTSS 固件已在 DDR 中初始化共享邮箱结构。
- Linux 邮箱驱动已加载、映射共享内存,并完成与 RTSS 的硬件握手。
- APSS 应用程序可以向共享内存写入消息并触发发往 RTSS 的中断。
- RTSS 可以接收中断、读取消息、写入响应并触发发往 APSS 的中断。
- APSS 可以接收中断、读取响应并将其显示在控制台上。
要运行 RTSS 邮箱演示应用程序,请参阅邮箱测试应用程序:sailmb_demo。

