You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将脚本输出的NMEA数据接入GPSD实现虚拟GPS源

解决方案:将实时NMEA输出直接传入gpsd

你想要实现的是把samples_generate的实时NMEA输出作为gpsd的数据源,替代gpsfake的功能,不用依赖日志文件。之前的两种方案报错主要是参数使用不当,下面给你几个可行的修复方案和更简便的管道方式:

方案1:修复FIFO文件方式

之前的FIFO方案问题在于gpsd默认会等待设备有数据流入才完成初始化,而FIFO是阻塞式的,导致gpsd一直处于等待状态。只需给gpsd加上-n参数,让它立即打开设备并开始监听:

# 1. 创建FIFO文件
mkfifo /tmp/gpsd_nmea_fifo

# 2. 启动gpsd,指定FIFO并强制立即初始化
gpsd -n /tmp/gpsd_nmea_fifo &

# 3. 运行你的NMEA生成程序,输出到FIFO
./samples_generate > /tmp/gpsd_nmea_fifo

注意:必须先启动gpsd(打开FIFO的读端),再运行samples_generate(写端),否则samples_generate会因为FIFO没有读端而阻塞。

方案2:修复TCP套接字方式

之前的nc参数错误,-p是用来指定本地源端口的,而我们需要连接到gpsd监听的端口。正确的步骤如下:

# 1. 启动gpsd监听本地8888端口(-N让它前台运行,方便调试)
gpsd -N tcp://localhost:8888

# 2. 在另一个终端,用nc把生成的NMEA数据发送到gpsd的监听端口
./samples_generate | nc localhost 8888

如果需要让gpsd后台运行,把-N去掉,换成&即可:

gpsd tcp://localhost:8888 &
./samples_generate | nc localhost 8888

方案3:直接使用管道(最简单)

不需要额外的FIFO或TCP,直接用管道将samples_generate的标准输出传给gpsd,指定/dev/stdin作为gpsd的输入设备,同时加-n参数强制立即处理:

./samples_generate | gpsd -n /dev/stdin

这个方式最简洁,完全符合你“用脚本标准输出作为数据源”的需求,和gpsfake的实时模拟效果一致。

验证是否成功

无论用哪种方案,都可以用cgps或gpsmon工具来验证gpsd是否接收到了NMEA数据:

cgps localhost

如果能看到你生成的纬度、经度和时间信息,就说明配置成功了。

内容的提问来源于stack exchange,提问作者Juha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:08:30