打开通道
客户端提供一个打开配置,其中包含可选的传输名称、远端 edge、通道名称和回调函数。核心会复制该配置,并使用这些回调来报告通道状态、接收数据、发送完成、接收意图请求、信号变更和中止事件。 打开通道的步骤:- 准备一个包含传输名称、远端 edge、通道名称和回调函数的配置。
- 使用该配置调用打开函数。
- 在发送数据之前等待已连接通知。
发送和接收数据
接收端应在发送端发送之前排队意图。发送端可以对连续缓冲区或向量式缓冲区(如 SKB 或 DSM 链)调用发送函数。 发送和接收数据的步骤:- 接收端:以其可接收的最大报文大小排队接收意图。
- 发送端:以数据和大小调用发送函数。
- 接收端:接收数据并处理。
- 接收端:使用完缓冲区后发出完成信号。
- 发送端:收到缓冲区已被处理的通知。
控制信号
客户端可以与对端交换一个 32 位的控制信号字段:- 设置本地信号值。
- 读取缓存的本地值。
- 读取缓存的远端值。
- 在远端信号变化时接收通知。
关闭通道
当不再需要交换数据时调用 close。本地 close 报告本地断开;对端发起的 close 报告远端断开。close 路径必须在销毁属于回调的资源之前排空或中止挂起的工作。传输注册
传输向核心注册接口和配置。配置提供其名称、edge、支持的版本、最大通道 ID 数和最大意图 ID 数。传输在以下状态之间流转:- Down(初始状态)
- Negotiating(版本协商进行中)
- Opened(可供通道使用)
- Failed(协商失败)
用户空间通道访问
用户空间驱动可以将已配置的 GLink 通道暴露为字符设备。文件操作与客户端 API 的映射如下:- Open → 打开通道
- Write → 发送数据
- Read → 接收数据并完成
- Release → 关闭通道
- ioctl → 排队接收意图
- poll → 等待通道可用
- mmap → 避免额外的内核/用户缓冲区拷贝

