# 定位
**Quectel Pi** 开发板支持 GNSS 定位功能。本文说明板端内置定位测试工具的用途区别、硬件连接注意事项,以及推荐的 GNSS 定位测试命令。
> 💡 测定位优先使用 `garden_app`。`qlril-api-test` 主要用于 QLRIL / 蜂窝通信 API 测试,虽然也包含简单 GNSS 菜单,但不建议作为定位验收的首选工具。
# 测试环境确认
当前开发板通过 ADB 连接后确认如下:
|
项目
|
结果
|
说明
|
| --- | --- | --- |
| `garden_app` | `/usr/bin/garden_app` | 板端已内置 Qualcomm GNSS Garden 测试程序。 |
| `qlril-api-test` | `/usr/bin/qlril-api-test` | 板端已内置 Quectel QLRIL API 测试工具。 |
| ModemManager 定位能力 | `gps-raw`、`gps-nmea`、`agps-msa`、`agps-msb` | 通过 `mmcli -m 0 --location-status` 可查询。 |
# 硬件连接
测试 GNSS 前,请确认开发板已正确连接 GNSS 天线,并尽量将天线放置在室外、窗边或无遮挡位置。室内、屏蔽环境、天线未连接或天线方向不正确,都可能导致长时间无法搜星或无法定位。
**硬件连接示意图:**
```{image} images/image_EJEpb3qfOo4LrSxq1VwcghZDnsd.webp
:width: 1397px
:height: 911px
:align: center
```
**GNSS 天线:**
```{image} images/image_Kcv0bCF6eo6R3DxvwImceqa2nGe.webp
:width: 800px
:height: 800px
:align: center
```
# 工具区别
|
工具
|
主要用途
|
是否推荐用于定位验收
|
| --- | --- | --- |
| `garden_app` | Qualcomm GPS/GNSS Garden 测试程序,用于测试 LOC API HAL、GNSS 定位、NMEA、卫星信息、TTFF 等。 | 推荐。 |
| `qlril-api-test` | Quectel QLRIL API 测试工具,主要测试 SIM、运营商、信号、语音、短信、数据拨号和 RIL 相关能力;也包含简单 GNSS 菜单。 | 不作为首选,仅用于 QLRIL/GNSS 接口辅助验证。 |
`qlril-api-test` 中 GNSS 相关菜单包括 `QLRIL_GNSS_CLIENT_OPEN`、`QLRIL_GNSS_NEMA_TYPE`、`QLRIL_GNSS_START_FIX`、`QLRIL_GNSS_STOP_FIX`、`QLRIL_GNSS_CLIENT_CLOSE` 和 `QLRIL_GNSS_NEMA_GetLocation`。这些接口更适合验证 Quectel RIL API 对 GNSS 的封装,而不是完整定位体验测试。
# 推荐测试方法:garden_app
## 1. 确认工具存在
```bash
adb shell 'command -v garden_app; command -v qlril-api-test'
```
正常情况下应输出:
```
/usr/bin/garden_app
/usr/bin/qlril-api-test
```
## 2. 查看 garden_app 帮助
```bash
adb shell 'garden_app -h'
```
重点关注以下参数:
|
参数
|
含义
|
建议
|
| --- | --- | --- |
| `-t` | 定位 session 的最长等待时间,单位为秒。 | 首次测试建议设置为 `120` 秒。 |
| `-n` | 打印 NMEA 字符串、时间戳和长度。 | 建议打开,便于确认 GNSS 输出。 |
| `-y` | 打印可见卫星的详细信息。 | 建议打开,便于判断是否搜星。 |
| `-o` | 设置 TTFF 阈值,超过阈值会判定失败。 | 可设置为 `120`,用于定位验收。 |
| `-A` | 配合 `-B` 使用,表示看到的最少卫星数量。 | 快速搜星测试可设为 `4`。 |
| `-B` | 配合 `-A` 使用,表示每颗卫星的最小 SNR / CN0 门限。 | 快速搜星测试可设为 `28`。 |
## 3. 测试是否能正常输出定位结果
如果目标是确认“是否能定位出经纬度”,建议使用以下命令:
```bash
adb shell 'garden_app -n -y -t 120 -o 120'
```
观察输出中是否出现 location callback、经纬度、TTFF 等信息。如果有定位结果,并且 TTFF 在预期范围内,说明 GNSS 定位链路基本正常。
## 4. 快速确认是否能搜到卫星
如果只是想快速确认天线、射频和 GNSS 搜星能力,可以使用 `-A` 和 `-B`:
```bash
adb shell 'garden_app -n -y -t 120 -A 4 -B 28'
```
该命令的含义是:在测试过程中,如果看到至少 4 颗卫星,并且这些卫星的 SNR / CN0 不低于 28,则可以提前结束测试。
> 💡 `-A 4 -B 28` 只能说明已经看到满足门限的卫星,用于节省测试时间;它不等同于已经输出经纬度定位点。如果验收标准要求真实定位结果,应以 location callback、经纬度和 TTFF 为准。
## 5. 查看 ModemManager 定位能力(可选)
```bash
adb shell 'mmcli -L'
adb shell 'mmcli -m 0 --location-status'
```
如果输出中包含 `gps-raw`、`gps-nmea`、`agps-msa`、`agps-msb`,说明 ModemManager 能看到 modem 暴露的定位能力。但 BSP/GNSS 功能验收仍建议以 `garden_app` 为主。
# qlril-api-test 的用途
`qlril-api-test` 启动后会进入交互菜单,主要用于测试 QLRIL API。其功能范围包括:
- 通用接口:初始化、退出、版本查询、AT 命令发送等。
- SIM 和网络:IMSI、IMEI、ICCID、运营商、信号强度、注册状态等。
- 语音和短信:拨号、接听、挂断、短信发送等。
- 数据业务:数据注册状态、建立/断开数据连接、RNDIS 等。
- GNSS 辅助接口:打开 GNSS client、设置 NMEA 类型、开始/停止 fix、获取 location 等。
如果需要进入该工具查看菜单,可执行:
```bash
adb shell 'qlril-api-test'
```
GNSS 相关菜单编号一般为 90 到 95,但由于它是交互式 QLRIL API 测试工具,操作步骤较分散,不适合作为普通定位验收的首选路径。
# 建议验收流程
1. 确认 GNSS 天线已连接,天线位置无遮挡,开发板供电稳定。
2. 执行 `adb shell 'command -v garden_app'`,确认板端内置 `garden_app`。
3. 执行 `adb shell 'garden_app -n -y -t 120 -o 120'`,观察是否输出定位点、NMEA 和 TTFF。
4. 如果长时间没有定位点,执行 `adb shell 'garden_app -n -y -t 120 -A 4 -B 28'`,先判断是否能看到满足门限的卫星。
5. 若看不到卫星,优先检查天线、测试环境和 GNSS 相关日志;若能看到卫星但不能定位,再继续分析辅助数据、时间同步、SUPL/XTRA 配置和定位服务日志。
# 常见问题排查
|
现象
|
可能原因
|
建议排查
|
| --- | --- | --- |
| 找不到 `garden_app` | rootfs 未集成 garden-app 包。 | 确认 `garden-app` 包是否安装,检查镜像 packagegroup 是否包含 `garden-app`。 |
| 能运行但长时间无卫星 | 天线未接、天线位置差、室内遮挡严重或 GNSS 射频链路异常。 | 检查天线连接,移动到室外或窗边,查看 `-y` 输出的 SV 信息。 |
| 能看到卫星但无定位点 | 卫星质量不足、时间/辅助数据不足、配置问题或定位服务异常。 | 延长测试时间,观察 TTFF 和 NMEA,检查 `/etc/gps.conf`、时间同步和定位日志。 |
| `-A 4 -B 28` 通过但没有经纬度 | 该参数组合只按卫星数量和信噪比提前停止,不要求真实 fix。 | 使用 `garden_app -n -y -t 120 -o 120` 重新确认真实定位结果。 |
| 想验证蜂窝/RIL 功能 | 测试目标不是 GNSS 定位,而是 modem/RIL API。 | 使用 `qlril-api-test`,按菜单选择 SIM、信号、数据拨号或 AT 命令相关项目。 |
# 结论
当前开发板已内置 `garden_app` 和 `qlril-api-test`。如果测试目标是 GNSS 定位功能,应优先使用 `garden_app`;如果测试目标是 SIM、信号、拨号、短信或数据业务等 RIL 功能,再使用 `qlril-api-test`。