openvela Telephony 概述
一、背景
当前 openvela 已广泛应用于多类消费终端产品中。其中部分终端(如轻智能 eSIM 手表)需要支持蜂窝通信功能。为了满足这一需求,openvela 需要构建一个标准化、兼容性良好且可持续演进的 openvela Telephony 子系统,以管理蜂窝通信相关的核心功能和外围接口。这将进一步丰富和促进 openvela 生态系统的发展。
二、为什么选择 oFono 作为基础
oFono 是一个面向基于 Linux 的嵌入式移动设备和桌面系统的 Telephony Host Stack(电话主机栈)。它采用了 GPLv2 协议。oFono 使用 C 语言、GLib 和 DBus 实现,支持多种类型的调制解调器(Modem),例如:
- ATModem(基于 AT 命令的调制解调器)
- RILModem(集成 AOSP RIL 格式的调制解调器)
- ISIModem(集成 SIM 调制解调器)
基于 oFono 的技术优势和开源生态,openvela 选择 oFono 作为基础,扩展开发 Telephony 子系统,以满足蜂窝通信的功能需求。
三、移动通信解决方案
openvela 将 oFono 集成到系统中,并增强了其移动通信能力,例如支持 VoLTE(Voice over LTE)语音通话,从而提升了物联网实时操作系统的移动通信能力。通过层级封装和解耦,以及多样化的芯片平台集成方式,openvela 系统的整体移动通信解决方案能够让上层应用程序(APP) 实现跨平台复用,为用户提供最佳的通信体验。
基于 oFono 作为 Telephony 的服务层,系统对外提供 TAPI(Telephony API) 接口,下层对接 RIL(Radio Interface Layer) 层,实现完整的 Telephony 功能。
1、Telephony API(TAPI)说明
TAPI 功能概述
TAPI 是一个基于 DBus Lib 库的 oFono D-Bus 接口封装层,主要目标包括:
- 基于 DBus Lib 对 oFono Stack 的所有 D-Bus 接口进行二次封装,使外部应用程序对 D-Bus 或 oFono 无感知。
- TAPI 和 oFono 之间基于 C/S 架构通信,通过 D-Bus 实现消息的分发和订阅。
TAPI 架构图
以下是 Telephony API 的架构图:
TAPI 模块化设计
TAPI 内部按照业务功能划分为多个模块,每个模块的功能和代码说明如下:
模块 | 文件 | 说明 |
---|---|---|
公共接口 | tapi_manager.c tapi.h |
提供 Telephony 公共接口。 |
工具接口 | tapi_utils.c/h | 提供 Telephony 工具类接口。 |
通话接口 | tapi_call.c/h tapi_ussd.c/h |
通话管理接口。 |
网络接口 | tapi_network.c/h | 网络注册接口。 |
数据接口 | tapi_gprs.c/h | 提供数据服务接口。 |
SIM 接口 | tapi_sim.c/h tapi_stk.c/h |
SIM 卡管理接口。 |
短信接口 | tapi_sms.c/h | 短信管理接口。 |
IMS 接口 | tapi_ims.c/h | 提供 IMS 服务接口。 |
测试工具 | telephony_tools.c | 提供客户端模拟工具。 |
2、RIL 说明
RIL 功能概述
Telephony 通过 RIL 机制与调制解调器(Modem)交互。Telephony 层通过 Socket 与 RILD 进程通信,而 RILD 进程内嵌 Vendor RIL,用于与 Modem 交互。
RIL 设计原则
- 对标 AOSP:openvela RIL 接口参考 Android 12 RIL AOSP 的设计。
- oFono 原生已支持 Android 4.3 的 RIL 接口,其参数与 Android 4.3 一致。
- openvela基于Android 12 RIL接口,根据 openvela 的业务需求挑选,RIL 参数保持与 Android 一致。
- 对于 Android 定义的 CDMA 和 NR5G 相关接口,由于无业务需求,openvela 不支持。
- 对于 IMS 相关接口,由于没有 AOSP 的统一规范,按照 openvela 需求独立设计。
- openvela 按照业务需求扩展定制部分接口。
- 数据结构:请求参数和响应参数均参考 oFono 源码 gril/parcel.h 中的 Socket 字节流数据结构定义。
3、Reference RIL 介绍
Reference RIL 的功能
Reference RIL 提供了一套适用于 QEMU Emulator 的参考实现,用于模拟电话、短信、上网等 Telephony 功能,方便在 QEMU 模拟器上调试应用程序的 Telephony 功能。
Reference RIL 的模块划分
Reference RIL 将 RIL 模块拆分为以下两部分:
- openvela LibRIL:openvela RIL 的接口标准。
- Reference QEMU RIL:适用于 QEMU 模拟器的参考实现。
调制解调器(Modem)芯片厂商可以参考 Reference QEMU RIL 实现 Vendor RIL 模块,通过 Vendor RIL 与 Modem 实现控制面交互。在商用产品中,openvela LibRIL 和 Vendor RIL 共同实现完整的 RIL 功能。
四、Telephony 业务适配
在 openvela 系统上实现 Telephony 功能,需要完成以下适配工作:
- 蜂窝应用层 APP:调用 TAPI(Telephony API)接口,实现 UI 应用的控制和显示。
- 蜂窝控制面逻辑 Vendor RIL:实现与 Modem 的控制面交互,参考 openvela Reference QEMU RIL。
- 蜂窝数据面:适配语音流和数据流的传输逻辑。
以下分别介绍语音流和数据流的适配方案。
1、Voice 语音适配
语音控制面
语音控制面的逻辑通道为:
TAPI -> oFono voice -> RIL -> Modem
语音数据面
语音数据面由 Modem 与 Audio DSP 直接交互,完成语音流的收发和编解码。当前 Telephony 支持以下语音功能:
- LTE IMS 的 VoLTE 语音。
- GSM 和 WCDMA 下的 CS 语音。
语音数据面的适配需要芯片厂商开发 openvela 的音频驱动(Audio Driver)。
2、Data 数据服务
数据控制面
数据服务的控制面通过以下逻辑通道实现:
oFono gprs -> RIL -> Modem
在数据激活流程中,Vendor RIL 在收到 Modem 返回的 IP 信息后,负责创建 openvela OS 的网卡并填充 IP 等信息。当前 openvela 的蜂窝网卡可以通过以下两种方式创建:
- 在 Vendor RIL 中创建。
- 在 Modem 芯片厂商的 openvela 驱动适配层中创建。
芯片厂商可根据需求选择适合的蜂窝网卡适配方案。
蜂窝网卡驱动实现
蜂窝网卡的驱动实现主要由以下两部分组成:
- Modem 硬件交互:负责与外界进行数据收发的 Modem 驱动。
- 网络设备结构体实现:包含协议栈所需的回调函数,并将结构注册到协议栈中。
在这两个模块之间,需要实现数据的高效传递:
- 第一部分由 Modem 驱动开发人员负责。
- 第二部分与协议栈相关。
推荐方案:基于 TUN 虚拟网卡
建议采用基于 TUN 虚拟网卡的实现方案。此方案的特点如下:
- 适用场景:适用于对带宽要求不高、不需要极限网络性能的场景。
- 性能限制:可能存在性能瓶颈。
- 操作便利性:用户态程序可以直接调用,操作简单。

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐
所有评论(0)