gpsd:错误:无法绑定到本地套接字

gpsd:错误:无法绑定到本地套接字

我正在尝试通过 GPSD 让 BU-353 GPS 设备在 Ubuntu 16.04 LTS 上运行。运行时cgps出现超时错误。

我以为 GPS 出了问题,因为我已经有一段时间没用过了,所以我跑了gpsmon。GPS 已在多个盐度点上获得定位,并获取了我的纬度和经度。

这让我相信 GPSD 方面一定出了问题,所以我运行了命令gpsd -N -D3 -F /dev/ttyUSB0。我得到了:

gpsd:ERROR: can't bind to local socket /dev/ttyUSB0
gpsd:ERROR: control socket create failed, netlib error -1

即使我使用 GPSD 指向套接字gpsd -N -D3 -F /var/run/gpsd.sock /dev/ttyUSB0,(代码直接从GPSD 故障排除页面)我仍然收到同样的错误。

我不知道出了什么问题。我对 GPSD 还很陌生,对 Ubuntu 也不是很熟悉,所以也许我犯了一个简单的错误。任何帮助都非常感谢。

答案1

BU-353 应该可以与 gpsd 配合使用。但你有一些事情要做,

  • 第一项是systemd负责启动 gpsd 实例。除非将其关闭(sudo service gpsd stop),否则您将无所事事。
  • -F为设备添加和删除命令创建控制套接字。它必须是本地文件系统上的有效路径名。您的控制套接字可能不是您尝试读取的 USB GPS。通常控制套接字是,/var/run/gpsd.sock但可能是/tmp/anything
  • 您需要具有写入权限才能打开控制套接字。可以sudo gpsd -N -D3 -F /var/run/gpsd.sock工作,而gpsd -N -D3 -F /var/run/gpsd.sock会失败,因为非特权用户无法写入控制套接字。 同样,gpsd -N -D3 -F /tmp/when_pigs_fly应该可以工作。 (但是,如果 gpsd 已在运行,则所有操作均无法工作。)

此外,您还必须考虑其他说明,/etc/default/gpsd例如,

# Default settings for the gpsd init script and the hotplug wrapper.

# Start the gpsd daemon automatically at boot time
START_DAEMON="true"

# Use USB hotplugging to add new USB devices automatically to the daemon
USBAUTO="true"

# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/ttyACM0"

# Other options you want to pass to gpsd
GPSD_OPTIONS=""

这些是/lib/systemd/system/gpsd.service作为EnvironmentFile

第一行是无用的。 systemd负责并且不分叉进程。 它使用标志运行-N

我设置 USBAUTO="true" 是因为 gpsd 的使用udev和热插拔相当透明。插入 gps 的东西就可以工作。如果不是 gps,它就不管事了。

但我确实在当前正在使用的 gps 的位置中编写了代码。因为,在没有重新启动的情况下停止/重新启动 gpsd,/dev/ttyACM0如果没有热插拔事件,gpsd 将无法“知道”gps 的位置(或位置)。我编写了位置代码,这样每次重新启动 gpsd 时就不必拔下/插入 gps,而无需重新启动。

其他GPSD_OPTIONS=可以包括-n -G-b由您自行决定。

此外,还有其他测试客户端(xgps)可以更强大地检查 GPS 输出,但这应该可以为您指明正确的方向。

答案2

它的权限 - 在仅使用 sudo/root 权限添加/运行命令的树莓派上出现同样的错误。

sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock

相关内容