一 架构概述
1.1 架构

MTK LBS 架构
二 介绍

GPS 系统的组成部分
全球定位系统(GPS)是由 24 颗卫星及其控制站组成的全球无线电导航系统。GPS 以这些 "人造卫星" 为参考点,可计算出精度达米级的位置。从某种意义上说,它相当于给地球上的每平方米都分配了一个唯一的地址。
全球共有 5 个控制站,分别位于夏威夷、阿森松岛、迪戈加西亚岛、夸贾林环礁和科罗拉多斯普林斯。这些控制站监测 GPS 卫星,检查其运行状态与太空精确位置。主地面站会将卫星星历常数和时钟偏移的修正信息传回卫星,卫星再将这些更新整合到发送给 GPS 接收机的信号中。

A-GPS 拓扑模型
A-GPS(辅助 GPS)利用 GPS 卫星确定用户设备(UE)的位置。它被称为 "辅助 GPS",是因为其方法与原始 GPS 不同:用户设备会使用蜂窝网络基站处的参考 GPS 接收机提供的卫星信息。
- 辅助计算位置,但无法单独完成定位
- 可接收透明的移动 / 通信网络信号,即使在室内或无开阔天空的环境中
- 通过基站获取 / 计算来自卫星的辅助数据、星历、历书等信息
- 最初是为移动通信的紧急救援而设计的
A-GPS 数据路径
-
控制面:该方式通过标准定义的信令控制信道(因此称为 "控制面")传输 A-GPS 数据,这是网络运营商移动呼叫分发系统的固有部分。控制面的目标是向紧急服务提供商提供高精度、高可用性的位置响应。定位功能需处理随时、随地发起的位置请求,且无法预判前置事件。
-
用户面:用户面通常基于 TCP/IP,用于支持位置服务。它旨在为用户提供非紧急用途的位置信息增强处理能力(如速度、精度、易用性)。这种方案被称为 "用户面",因其相关信令对无线网络而言仅表现为用户数据。通常,所有流量都通过 IP 承载传输。
我们目前支持 2G/3G/4G AGP 以及 SUPL V1.0/V2.0。

EPO 客户端架构
EPO 是联发科创新的专有离线服务器型 A-GPS 解决方案之一。它可为客户和用户提供长达 30 天的卫星轨道预测,通过提升首次定位时间(TTFF)大幅优化 GPS 用户体验。
四 位置服务调试应用(LBS Debug App)
4.1 定位事件管理器(LocationEM)
4.1.1 全球定位系统(GPS)

(1)GPS开启或关闭 GPS。
(2)清除 / GPS 模式向 GPS 芯片发送清除辅助数据的指令以进行性能测试。发送给 GPS 芯片的辅助数据类型,取决于在 GPS 模式中选择的重置类型(热启动、温启动、冷启动、全启动等)。
(3)参考位置设置一个参考位置,用于计算 GPS 定位结果与参考位置之间的距离,单位为米;当定位结果可用时,会显示该距离。
(4)压力测试启动或停止 GPS 压力测试,执行流程由压力测试设置控制。
(5)计时器当 GPS 启用时,计时器开始计时,单位为秒。
(6)定位结果当 GPS 芯片生成定位结果后,可查看各类位置信息,例如纬度、经度、UTC 时间、高度、精度、方位、速度、距离、首次定位时间(TTFF)、初始纬度、初始经度、初始距离。
(7)卫星信息显示 GPS 芯片搜索到的当前卫星信息,包括 PRN(伪随机噪声码)、SNR(信噪比)、AZI(方位角)、ELE(高度角)。
(8)NMEA 日志显示 GPS 驱动上报的 NMEA 字符串。
(9)压力测试设置测试人员可通过这些配置控制压力测试的流程。
4.1.2 视图

(1)GPS 视图
在该页面,用户可以查看每颗卫星的位置,支持以不同颜色显示多颗卫星。
表 4-1:卫星系统的颜色编码
| 卫星系统 | 颜色 |
|---|---|
| GPS(GP) | 青色(0xff00ffff) |
| 格洛纳斯(GL) | 黄色(0xffffff00) |
| 北斗(BD) | 蓝色(0xff0000ff) |
(2)信号强度在该页面,用户可以查看每颗卫星的信号强度。
(3)用于定位的卫星当卫星被 GPS 模块用于定位时,会标记为绿色;否则标记为红色。
4.1.3 AGPS



-
最近 A-GPS 分析信息显示 A-GPS 操作的最新时间戳,并展示调制解调器 GPS 与 A-GPS 之间的消息传输情况。
-
启用 A-GPS切换 A-GPS 功能的开启或关闭状态。
-
**CP 与 UP 切换(仅 SI)**选择你希望使用的 A-GPS 信令方式,默认设置为 UP 模式。
-
CDMA 设置当 CDMA 和 WCDMA 网络均可用时,你偏好哪种 AGPS 协议?
-
SUPL 设置配置 SUPL 协议的设置项。
-
**UP 预方法(仅 SI)**选择 A-GPS 的一种操作模式:MSA、MSB 或无偏好。这些选项会在 "用户面" 被选中时显示。
-
UP 定位技术启用设备使用 MSA 或 MSB 的 UP 定位方法。这些选项会在 "用户面" 被选中时显示。
-
SUPL 版本选择使用 SUPL1.0 或 2.0 协议的用户面(UP)会话。
-
TLS 版本选择 TLS 连接版本:1.0、1.1 或 1.2。
-
证书验证启用或禁用证书验证,默认值为禁用。
-
UDP 启用启用 UDP 端口监听,以监控来自网络的 NI 请求。
-
修改 SUPL UT2 时间自定义 SUPL UT2 计时器。
-
修改 SUPL UT3 时间自定义 SUPL UT3 计时器。
-
SUPL 版本次要号若满足上述 MCC/MNC 条件,自动配置 SUPL 的次要版本。
-
SUPL 版本服务标识若满足上述 MCC/MNC 条件,自动配置 SUPL 的服务标识。
-
SLP 模板快速从以下选项中选择 "SLP 地址" 和 "SLP 端口" 的 SLP 模板设置:[Google]、[Google noTLS]、[Googl IP]、[Sprint]、[Rns]、[CMSS Lab]、[Andrew]、[Ericsson]、[Ericsson FQDN]、[ORANGE]、[CMCC]、[Telstra]、[Chunghwa]、[T-Mobile]、[Vodafone]。
-
SLP 地址显示当前的 SLP 地址。
-
SLP 端口显示当前的 SLP 端口。
-
TLS 启用启用与 TLS 的连接。
-
周期性设置周期性相关操作项。
-
周期性启动启动一个周期性触发的会话。
-
中止中止触发式会话以停止正在进行的触发会话(若存在)。
-
区域设置配置 SI 区域事件参数;启动区域触发式会话,或中止触发式会话以停止正在进行的触发会话(若存在)。
-
进入区域当设备首次检测到自身处于预定义区域内时,向 SLP 发送报告;若启用重复报告,设备离开后再次进入预定义区域时会再次报告。
-
处于区域内当设备处于预定义区域内时,向 SLP 发送报告。
-
离开区域当设备首次检测到自身处于预定义区域外时,向 SLP 发送报告;若启用重复报告,设备进入后再次离开预定义区域时会再次报告。
-
显示 SI QoP 编辑器显示 SI 定位质量配置编辑器。
-
精度单位显示水平精度和垂直精度的不同单位。
-
水平精度水平精度是 SUPL QoP(定位质量)的参数之一。
-
垂直精度垂直精度是 SUPL QoP(定位质量)的参数之一。
-
位置时效位置时效是 SUPL QoP(定位质量)的参数之一。
-
延迟延迟是 SUPL QoP(定位质量)的参数之一。
-
控制面设置可在此处修改控制面设置。
-
MOLR 定位方法选择一种 MOLR 定位方法,如 "位置估算" 或 "辅助数据",默认值为 "位置估算"。
-
外部地址启用或禁用外部地址转发。
-
MLC 编号启用或禁用移动定位中心(MLC)服务转发。
-
EPC MOLR PDU 启用仅在执行 MOLR 的 LPP CP 期间启用此项;AGPS 会从配置文件中注入负载,以告知服务器设备的能力。
-
功能启用器所有功能选项均可在此处修改。
-
允许网络发起的请求启用或禁用对 SUPL NI 或 CP MTIR 的处理;若禁用此项,收到 SUPL NI 或 CP MTIR 请求时会话会被拒绝。
-
允许漫游启用或禁用设备漫游时的 A-GPS 功能;若禁用此项,漫游状态下 A-GPS 将无法运行。
-
CP 自动重置启用或禁用 CP 自动重置;此功能仅用于联发科内部,默认请勿启用。
-
将 SUPL 记录到文件为满足 CMCC 要求,可将特定 SUPL 消息输出到文件;默认路径为 "/data/agps_supl/log/",若存在 SD 卡,路径会改为 "/sdcard/"。
-
记录敏感数据启用或禁用包含敏感信息(如当前位置)的 AGPS 守护进程日志。
-
允许从 SD 卡进行 AGPS 认证启用此项可允许 agpsd 从设备存储的 "/sdcard/agps/cacerts" 路径加载证书。
-
允许基于当前 PLMN 自动配置 SUPL 配置文件启用 SUPL 专用 APN。
-
SUPL 专用 APN 流可启用或禁用 SUPL 专用 APN 流。
-
将 AGPS 设置同步到 SLPD运行时将 AGPS 设置(如 SUPL 配置文件、SUPL 版本、TLS 版本)从 AGPSD 同步到 SLPD。
-
允许 SUPL 消息中包含有效的 IMSI启用或禁用 SUPL 消息中包含有效的 IMSI。
-
网络发起会话期间显示 GPS 图标启用或禁用 E911 定位服务期间 GPS 图标的显示。
-
LPPe 禁用众包定位启用或禁用 LPPe 的众包定位(如网络定位)。
-
LPPe CP 启用启用或禁用 CP LPPe 功能。
-
LPPe UP 启用启用或禁用 UP LPPe 功能。
-
AOSP 分析启用启用或禁用通过 "native_set_agps_server" 从 GnssLocationProvider 进行 SUPL 配置文件配置;启用此项后,"自动配置 SUPL 配置文件" 会被忽略,因为 AOSP 定位框架会针对不同 MCC/MNC 从框架资源中加载 SUPL_HOST 和 SUPL_PORT。
-
将 NLP 设置用于 SUPL启用或禁用将 NLP 设置绑定到 SUPL SI 流程。
-
LBS 日志启用启用或禁用向调试端口输出 LBS 日志。
-
SIB8/SIB16 启用启用或禁用 SIB8/SIB16。
-
A - 格洛纳斯启用若硬件支持 A - 格洛纳斯,启用或禁用格洛纳斯辅助功能。
-
A - 北斗启用若硬件支持 A - 北斗,启用或禁用北斗辅助功能。
-
A - 伽利略启用若硬件支持 A - 伽利略,启用或禁用伽利略辅助功能。
-
重置为默认值此按钮可将所有 A-GPS 设置重置为默认值。
4.1.4 FLOW

4.1.5 View
(1)清空屏幕清除当前屏幕上显示的日志。
(2)日志显示展示 AGPS 进程日志,以标识当前进度。
4.1.6 MISC


(1)跳转功能这些是用于跳转到特定功能界面的快捷按钮:
- GPS → 位置服务
- YGPS → YGPS 功能
- TIME → 日期和时间服务
- DSD → 数据服务诊断
- WIFI → Wi-Fi 设置
(2)当前蜂窝单元信息显示当前蜂窝单元信息与 IP 地址。
(3)服务器地址输入你想要测试的服务器地址。
(4)服务器端口输入你想要测试的服务器端口。
(5)连接启动或停止连接测试。
(6)连接结果显示服务器连接结果,包括时间戳、DNS 查询、成功结果,或连接失败的原因。
4.1.7 Raw Data


(1)导航启动或停止查询 GPS 导航相关的原始数据消息。
(2)测量启动或停止查询 GPS 测量相关的原始数据消息。
4.1.8 NLP

(1)**网络定位(NLP)**向定位框架发起或终止网络位置更新请求。
(2)清空屏幕清除已上报的网络位置消息。
五 定制指南
5.1 如何集成网络定位提供方
除 GPS 外,移动设备平台还可通过基于网络的信息提供定位服务。移动系统会收集设备的网络状态参数(如 Wi-Fi MAC 地址或移动蜂窝单元信息),并将这些数据发送至网络定位服务服务器;服务器随后查询其数据库,并将定位结果回传给设备。
被称为 "网络定位提供方" 的客户端应用,是移动设备上的一项服务:它负责收集设备信息,并处理与远程网络定位服务器的通信。目前,Android 设备可通过安装 Google GMS 包或第三方网络定位提供方来支持网络定位;Google 网络定位提供方是 GMS 包中包含的一项服务。
在联发科的系统包中,早期 Android 版本默认预装了百度网络定位提供方。百度 NLP 包的路径如下:
- alps/vendor/mediatek/proprietary/binary/3rd-party/free/Baidu_Location(Android L)
- alps/vendor/mediatek/proprietary/packages/3rd-party/Baidu_Location(Android M)
- alps/vendor/mediatek/proprietary/packages/3rd-party/LBS/Baidu_NLP(Android N、O、P)
- (Android Q 及之后版本)不包含第三方 NLP 包
OEM 客户可选择使用第三方网络定位提供方(如高德)替代默认的百度 NLP。要配置其他厂商的 NLP,需遵循以下步骤:
- 将第三方 NLP 包放入代码库,可参考百度 NLP 的路径:a. alps/vendor/mediatek/proprietary/packages/3rd-party/LBS/Baidu_NLP(Android N 及之后版本)
- 更新
alps/device/mediatek/common/device.mk以编译 NLP 包。 - 将
com.Baidu.Location包名改为其他第三方 NLP 的包名。 - 更新系统配置:a. alps/vendor/mediatek/proprietary/frameworks/base/res/values/config.xmlb. 将百度 NLP 的 Java 包名 "com.baidu.map.location" 替换为第三方 NLP 的 Java 包名。
- 重新编译系统包。
5.2 如何开启 / 关闭 A-GPS 功能
为动态启用或禁用 A-GPS,Android 构建系统提供了可选配置标签(MTK_GPS_SUPPORT、MTK_AGPS_APP),支持自定义这些功能。"关闭" 意味着 A-GPS 的 MMI 菜单不会出现在用户应用中,且不显示任何菜单列表;相应地,mtk_agps.li、libagpsupl.so、libssadp.so等相关模块不会被包含在系统镜像中。若这些模块已存在,只需使用remake命令重新构建项目即可。
由于 A-GPS 无法脱离 GPS 运行,我们在 AGPS 与 GPS 之间建立了依赖关系,以便在两者间切换:
- 若设置
MTK_GPS_SUPPORT = no,MTK_AGPS_APP也必须设为 "no";否则项目构建会报错(提示 "无 GPS 支持时 A-GPS 无法切换"),仅将MTK_AGPS_APP设为 "no" 才能无错构建。 - 若设置
MTK_GPS_SUPPORT = yes,MTK_AGPS_APP可设为 "yes" 或 "no"。
以上所有依赖功能均已集成到 Android 构建系统中。以下是开启 / 关闭 A-GPS 的步骤:
- 开启 A-GPS:在
device.mk中设置MTK_GPS_SUPPORT = yes且MTK_AGPS_APP = yes - 关闭 A-GPS:在
device.mk中设置MTK_AGPS_APP = no
5.3 A-GPS 配置文件
A-GPS 配置文件的作用是允许客户自定义 A-GPS 的行为。以下是 A-GPS 配置文件的路径信息:
表 5-1:代码库中的路径
| Android 版本 | 路径 |
|---|---|
| 4.4.2(KK2) | alps/mediatek/frameworks/base/agps/etc/agps_profiles_conf.xml |
| 5.0(L)~ 6.0(M) | alps/vendor/mediatek/proprietary/frameworks/base/agps/etc/agps_profiles_conf2.xml |
| 6.0(M)~ 10.0(Q) | alps/device/mediatek/common/agps/agps_profiles_conf2.xml |
| 10.0(Q)(拆分构建启用,如 Q.mp1) | alps/device/mediatek/vendor/common/agps/agps_profiles_conf2.xml |
| 11.0(R) | alps/device/mediatek/vendor/common/agps/agps_profiles_conf2.xmlalps/device/mediatek/vendor/common/agps/carrier/agps_profiles_conf2_carrier_*.xml |
表 5-2:设备中的路径(ODM 默认值)
| Android 版本 | 路径 |
|---|---|
| 4.4.2(KK2)~ 6.0(M) | /etc/agps_profiles_conf2.xml |
| 7.0(N)~ 10.0(Q) | /vendor/etc/agps_profiles_conf2.xml/vendor/etc/agps_profiles_conf2.xml- 包含运营商映射的定义- 也被称为原始 xml |
| 11.0(R) | /vendor/etc/gnss/carrier/agps_profiles_conf2_carrier_*.xml- 为运营商提供特殊值- 缺失项会使用原始 xml 中的值- 被称为 carrier.xml |
表 5-3:设备中的路径(经 LocationEM、自动配置或 ODM 工具编辑后)
| Android 版本 | 路径 |
|---|---|
| 4.4.2(KK2)~ 6.0(M) | /data/agps_supl/agps_profiles_conf2.xml |
| 7.0(N)~ 10.0(Q) | /data/vendor/agps_supl/agps_profiles_conf2.xml/data/current.xml被称为 current.xml |
| 11.0(R) | /data/vendor/agps_supl/agps_profiles_conf2_prv.xml- 备份原始 xml 中的通用值,为运营商提供特殊值- 当 IMSI 的(MCC, MNC)不在 carrier_mapping 中时,会加载此文件- 被称为 prv.xml |
A-GPS 配置 XML 文件的结构如下表所示:
表 5-4:XML 中的布局
| 标签 | 说明 |
|---|---|
<mtk_agps_profiles> |
XML 文件的根元素 |
<cur_supl_profile /> |
当前激活的 SUPL 配置文件 |
<supl_profile /> |
未激活的 supl_profile 列表,用于在 LocationEM 中定义 SLP 模板(适用于 3GPP2 A-GPS 行为) |
<cdma_profile /> |
仅用于内部测试,不面向真实网络 |
<agps_setting /> |
为联发科 A-GPS 守护进程提供选项 |
<gnss_setting /> |
为 GNSS 模块提供选项 |
<cp_setting /> |
为 3GPP 控制面 A-GPS 行为提供选项,发送至联发科 A-GPS 守护进程的 MNL(调制解调器网络层守护进程) |
<up_setting /> |
为用户面 A-GPS 行为提供选项,发送至 LBS 模块 |
<carrier_mapping> |
为 SUPL 任务提供选项,发送至联发科 A-GPS 守护进程 |
<carrier_mapping> |
每个 carrier_mapping 定义了一组 mcc_mnc 编码到运营商名称的映射- 仅 Android 11.0 支持- 仅原始 xml 支持 carrier_mapping |
详细配置如下:
| 属性 | 示例 | 描述 |
|---|---|---|
| maj_ver | "2" | XML 文件的主版本号 |
| min_ver | "1" | XML 文件的次版本号 |
| carrier_xml_enable | "false" | "false":禁用运营商 xml(默认)"true":启用运营商 xml- 仅 Android 11.0(R)支持- 仅原始 xml 支持此选项 |
详细配置如下:

例如:
mtk_agps_profiles maj_ver="1" min_ver="2" carrier_xml_enable="true">

例如:
<!-- CMCC-->
<supl_profile name="CMCC"
addr="221.176.0.55"
port="7275"
tls="true"
app_id="ap0004"
provider_id="221.176.0.55"
default_apn="CMCC WAP"
optional_apn="CMNET"
optional_apn_2=""
address_type="IPv4address:port"
/>

例如:
<agps_setting
agps_enable="true"
agps_protocol="0"
gpevt="false"
e911_gps_icon_enable="false"
e911_open_gps="false"
tc10_ignore_fw_config="false"
lppe_network_location_disable="false"
agps_nvram_enable="true"
lbs_log_enable="false"
lppe_crowd_source_confident="90"
ignore_si_for_e911="false"
/>

例如:
<gnss_setting
sib8_16_enable="true"
a_glonass_satellite_enable="true"
a_beidou_satellite_enable="true"
a_galileo_satellite_enable="true" />


六 调试
6.1 调试消息
有两种日志消息,可通过不同方式记录。
6.1.1 如何记录调试消息
你可以使用 Android 日志系统工具 "logcat",在命令行中记录 A-GPS 调试消息:示例:将主日志记录到 mainlog.txtadb logcat -v time >/mainlog.txt
6.1.2 将 SUPL 日志记录到文件
在 A-GPS 的工程师模式菜单中,我们提供了 "Log SUPL to File" 选项,可在 SUPL 处理过程中,将关键日志语句记录到文件(路径:/data/agps_supl/log/),此功能仅适用于用户面。通过该日志文件,我们可以查看 SUPL 会话的主要流程。若需要获取详细日志信息,请选择 logcat 工具。
七 如何使用 A-GPS
7.1 前提条件
- 确保可用的 SIM 卡已插入被测设备(DUT)。
- 确保数据连接可用。
- 没有防火墙阻止 A-GPS 会话与服务器的连接。
- 通过 "设置→位置访问→GPS 卫星" 启用 GPS 功能。
7.2 如何触发 A-GPS 会话
本节是启动 A-GPS 定位的指南,请按照步骤(1)、(2)、(3)完成定位请求。


八 参考资料
8.1 参考文档
A-GPS 相关信息对应的规范文档:
- 3GPP_34.171
- 3GPP_34.123
- 3GPP_25.331
- 3GPP_51.010
- 3GPP_44.031
- OMA_AD_SUPL_V1.0
- OMA_TS_ULP_V1.0
- OMA_RD_SUPL_V1.0
- OMA_ETS_SUPL_V1.0
- OMA_AD_SUPL_V2.0
- OMA_TS_ULP_V2.0
- OMA_RD_SUPL_V2.0
- OMA_ETS_SUPL_V2.0
LPP 相关信息对应的规范文档:
- 3GPP_24.171
- 3GPP_23.271
- 3GPP_36.305
- 3GPP_36.355
- 3GPP_37.571
3GPP 下载链接:https://www.3gpp.org/
OMA SUPL 下载链接:http://openmobilealliance.org/Technical/current_releases.aspx
8.2 源代码信息
- LocationEM 应用:vendor/mediatek/proprietary/packages/apps/LocationEM2
- Agpsinterface:vendor/mediatek/proprietary/packages/apps/agpsinterface
- MTK LBS 服务:
- Android 13 及之前版本:vendor/mediatek/proprietary/hardware/connectivity/gps_lbs_hidl_service
- Android 14 及之后版本:vendor/mediatek/proprietary/hardware/lbs/mtk_lbs_service