我有一个带 USB 接口的 GPS 接收器 BU-353,我正尝试让它在 Ubuntu 下工作。
我运行了gpsd -n -N -D 2 /dev/ttyUSB0
,并得到了这个输出:
gpsd: launching (Version 2.94)
gpsd: listening on port gpsd
gpsd: running with effective group ID 1000
gpsd: running with effective user ID 1000
gpsd: opening GPS data source type 3 at '/dev/ttyUSB0'
gpsd: speed 38400, 8N1
gpsd: Garmin: garmin_gps Linux USB module not active.
gpsd: speed 9600, 8O1
gpsd: speed 38400, 8N1
gpsd: gpsd_activate(): opened GPS (fd 6)
gpsd: speed 4800, 8N1
gpsd: NTPD ntpd_link_activate: 0
gpsd: /dev/ttyUSB0 identified as type SiRF binary (2.687608 sec @ 4800bps)
gpsd: detaching 127.0.0.1 (sub 1, fd 8) in detach_client
gpsd: detaching 127.0.0.1 (sub 1, fd 8) in detach_client
此后我启动了 tangoGPS,它说没有找到 GPS 和 GPSD。
答案1
众所周知,BU-353 可与 gpsd 配合使用。
尝试
-b
标志(例如gpsd -b /dev/ttyUSB0
)打开一个单独的终端窗口并运行
gpsmon
(包含在“gpsd-clients”包中)以检查 gpsd 输出。每次重新启动 gpsd 时都重新启动 gpsmon。探戈会不会开始得太早了?加密狗需要几秒钟来整理信号、识别卫星并计算定位;udev 需要几秒钟来启动 gpsd,而 gpsd 又需要几秒钟来探测加密狗(可能尚未准备好)并在数据流最终开始时开始广播有用信息。
gpsmon
也可以帮助诊断该问题。如果没有 gpsd 输出,则进行更详细的检查。请按照以下步骤测试加密狗、内核模块、挂载、设备节点和 gpsd:
- 拔下 USB 适配器并终止 gpsd (
sudo pkill gpsd
)。等待 10 秒钟即可/dev/ttyUSB0
释放。 - 重新插入 USB 加密狗并等待 10 秒钟。
- 检查
dmesg | tail -n 5
以验证加密狗是否确实已安装到/dev/ttyUSB0
。如果它没有安装,那么您缺少内核模块(根据您的描述,这不太可能)。有时它会被安装到/dev/ttyUSB1
如果0
不是免费的! - 查看 udev 是否识别了加密狗并启动了 gpsd (
ps -e | grep gpsd
)。如果没有,则说明 udev 规则存在问题,必须使用以下命令手动启动 gpsdgpsd /dev/ttyUSB0
一旦 gpsd 运行,请检查加密狗输出(加密狗输出 = gpsd 输入)。尝试
cat /dev/ttyUSB0
(使用 CTRL+c 停止)。如果失败,请尝试将波特率重置为 4800:pkill gpsd stty 4800 > /dev/ttyUSB0 gpsd -b /dev/ttyUSB0 cat /dev/ttyUSB0 # CTRL+c to stop
- 如果您有良好的加密狗输出(= gpsd 输入),请打开第二个终端窗口并尝试
gpsmon
或cgps
测试 gpsd 输出。 - 最后,既然您有了良好的加密狗输出和良好的 gpsd 输出,请尝试 tangoGPS。
- 拔下 USB 适配器并终止 gpsd (
答案2
我遇到了类似的问题。我做了这里的所有操作,但仍然无法在 openCPN 中运行。我偶然发现另一个论坛说尝试将 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="false"
# 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/ttyUSB0"
# Other options you want to pass to gpsd
GPSD_OPTIONS="-n -G -b"
GPSD_SOCKET="/var/run/gpsd.sock"
#end of file gpsd
令我惊讶的是,它成功了。