首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GPSD端口2947由1/init接收

GPSD端口2947由1/init接收
EN

Stack Overflow用户
提问于 2021-07-02 21:35:23
回答 1查看 2.2K关注 0票数 1

我目前运行两个覆盆子π,让我们称之为工作pi和非工作PI。

工作PI

  • Model B Rev 2
  • Jessie 4.1.19+ #858
  • gpsd修订版

单元从原来的Wheezy发行版升级到这个版本的Jessie。以前在Wheezy下有一个TL-WN725N无线连接,但是在Jessie升级之后,这个无线连接变得无法操作。

非工作π

  • Model B Rev 2+
  • Jessie 4.1.7+ #817
  • gpsd修订版3.11-3
  • 这是原发行版,但已更新到最新的TL-WN725N无线连接。

f 225

两个pi的共同点是:

使用gpsmon /dev/ttyAMA0 0命令运行U-Blox6gps chipsets.

  • when的
  • RPI gps添加gpsmon /dev/ttyAMA0 0,它们都可以反动预期的gps NMEA字符串
  • ,可以用U驱动程序加载gpsmon命令,并在NMEA和U格式化的gps数据之间切换。

问题最终目标是让两个pi使用python记录全球定位系统数据。要做到这一点,似乎(据我所能收集的)必须有一个gpsd套接字运行。这可以用cgps -s进行验证。这在工作PI中是功能性的,但是在非工作pi中失败。

我已经在两个pi中使用以下命令启动了gpsd服务

sudo /dev/ttyAMA0 -b -N -D 3 -n -F /var/run/gpsd.sock

在工作PI中,该命令被接受,cgps -s正确运行。此外,还提供了以下资料:

代码语言:javascript
复制
$ sudo netstat -ltnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      498/ser2net
tcp        0      0 0.0.0.0:2000            0.0.0.0:*               LISTEN      498/ser2net
tcp        0      0 0.0.0.0:2001            0.0.0.0:*               LISTEN      498/ser2net
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      452/sshd
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      369/inetd
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      498/ser2net
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      769/exim4
tcp        0      0 0.0.0.0:3001            0.0.0.0:*               LISTEN      498/ser2net
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      814/0
tcp        0      0 127.0.0.1:6011          0.0.0.0:*               LISTEN      20461/2
tcp        0      0 127.0.0.1:6012          0.0.0.0:*               LISTEN      6177/5
tcp        0      0 127.0.0.1:6013          0.0.0.0:*               LISTEN      6236/7
tcp        0      0 127.0.0.1:2947          0.0.0.0:*               LISTEN      8609/gpsd
tcp6       0      0 :::22                   :::*                    LISTEN      452/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      769/exim4
tcp6       0      0 ::1:6010                :::*                    LISTEN      814/0
tcp6       0      0 ::1:6011                :::*                    LISTEN      20461/2
tcp6       0      0 ::1:6012                :::*                    LISTEN      6177/5
tcp6       0      0 ::1:6013                :::*                    LISTEN      6236/7
tcp6       0      0 ::1:2947                :::*                    LISTEN      8609/gpsd

这正是我所期望的: gpsd服务正在使用IPv4和IPv6 2947套接字。

现在,对于不工作的pi:

代码语言:javascript
复制
$ sudo gpsd /dev/ttyAMA0 -b -N D 3 -n -F /var/run/gpsd.sock
gpsd:ERROR: can't bind to IPv4 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!
gpsd:ERROR: can't bind to IPv6 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!

响应netstat命令:

代码语言:javascript
复制
$ sudo netstat -ltnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:2947          0.0.0.0:*               LISTEN      1/init
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      564/ser2net
tcp        0      0 0.0.0.0:2000            0.0.0.0:*               LISTEN      564/ser2net
tcp        0      0 0.0.0.0:2001            0.0.0.0:*               LISTEN      564/ser2net
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      477/sshd
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      564/ser2net
tcp        0      0 0.0.0.0:3001            0.0.0.0:*               LISTEN      564/ser2net
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      882/0
tcp6       0      0 ::1:2947                :::*                    LISTEN      1/init
tcp6       0      0 :::22                   :::*                    LISTEN      477/sshd
tcp6       0      0 ::1:6010                :::*                    LISTEN      882/0

显然,init服务正在使用IPv4和IPv6 2947套接字(我是RF硬件人员,而不是软件人员,但这听起来像是操作系统正在控制端口)。

我比较了两个pi之间的下列文件,发现它们是相同的:

代码语言:javascript
复制
/lib/systemd/system/gpsd.socket
/lib/systemd/system/gpsd.service
/etc/default/gpsd

在过去的两周里,我对这个网站和其他网站进行了梳理,并尝试了在那里提出的解决方案(但没有结果)。这似乎是一个不寻常的问题。我欢迎任何帮助,但我的三个主要问题是:

  1. 为什么init在工作PI启动时不捕获端口2947,而非工作pi确实捕获它,即使这两个pi都运行Jessie 4.1 (尽管我承认不同的rev)。显然,不工作的pi不能挂载gpsd套接字的原因是它想要的端口已经被占用了。
  2. 有一种方法可以告诉非工作PI不要捕获端口2947,还是有一种方法可以让我从命令行中放弃该端口?
  3. 是否可能,非工作pi上的无线通信正在使用这些端口,这就是为什么gpsd可以在工作pi (它没有无线的)上抓取端口,并且不能在不工作的pi上(它有一个工作的无线的)。

我没有主意了。

我不太确定我是应该添加评论,编辑帖子,还是回答问题。针对LARSKS的第一个答复:

我会分别记录每一个圆周率。

非工作π

重新启动pi时:

代码语言:javascript
复制
$ systemctl is-enabled gpsd.socket
enabled
$ systemctl is-enabled gpsd.service
static

cgps -s或cgps仍然不能工作(超时)

不过,看来套接字和服务是存在的。所以,我试着打电话到2947端口:

代码语言:javascript
复制
$ sudo telnet localhost 2947
Trying ::1...
Connected to localhost.
Escape character is '^]'.
{"class":"VERSION","release":"3.11","rev":"3.11-3","proto_major":3,"proto_minor":9}
?WATCH={"enable":true, "json"}
{"class":"DEVICES","devices":[]}
{"class":"WATCH","enable":true,"json":false,"nmea":false,"raw":0,"scaled":false,"timing":false,"split24":false,"pps":false}
^]
telnet> quit
Connection closed.

连接刚刚挂起。

gpsmon /dev/ttyAMA0 0仍然正常工作。

工作PI

代码语言:javascript
复制
$ systemctl is-enabled gpsd.socket
disabled
$ systemctl is-enabled gpsd.service
static

这正是我所期望的,所以我试图像以前一样开始这项服务:

代码语言:javascript
复制
$ sudo gpsd /dev/ttyAMA0 -b -N D 3 -n -F /var/run/gpsd.sock
gpsd:ERROR: device open failed: No such file or directory - retrying read-only
gpsd:ERROR: read-only device open failed: No such file or directory
gpsd:ERROR: initial GPS device D open failed
gpsd:ERROR: device open failed: No such file or directory - retrying read-only
gpsd:ERROR: read-only device open failed: No such file or directory
gpsd:ERROR: initial GPS device 3 open failed
gpsd:ERROR: device open failed: No such file or directory - retrying read-only
gpsd:ERROR: read-only device open failed: No such file or directory
gpsd:ERROR: D: device activation failed.
gpsd:ERROR: device open failed: No such file or directory - retrying read-only
gpsd:ERROR: read-only device open failed: No such file or directory
gpsd:ERROR: 3: device activation failed.
gpsd:ERROR: device open failed: No such file or directory - retrying read-only
gpsd:ERROR: read-only device open failed: No such file or directory
gpsd:ERROR: D: device activation failed.
gpsd:ERROR: device open failed: No such file or directory - retrying read-only
gpsd:ERROR: read-only device open failed: No such file or directory
gpsd:ERROR: 3: device activation failed.
^Z
[1]+  Stopped                 sudo gpsd /dev/ttyAMA0 -b -N D 3 -n -F /var/run/gpsd.sock

现在不一样了。事实上,当我尝试运行cgps时,我只会得到一个空白屏幕。以前我会得到一张空桌子,但现在什么也没有。

当我尝试运行gpsmon /dev/ttyAMA0 0时,我得到:

代码语言:javascript
复制
$ gpsmon /dev/ttyAMA0
gpsmon:ERROR: device open failed: Device or resource busy - retrying read-only
gpsmon:ERROR: read-only device open failed: Device or resource busy
gpsmon: activation of device /dev/ttyAMA0 failed, errno=16 (Device or resource busy)

但是,如果我重新启动,gpsmon /dev/ttyAMA0 0将返回到正常操作。

作为脚注:

代码语言:javascript
复制
$ systemctl enable --now gpsd.socket
systemctl: unrecognized option '--now'

作为一般观察,gpsmon /dev/ttyAMA0 0命令可以工作,因为我只是通过串口将NMEA消息流到屏幕上。

cgps (或python代码)无法工作,因为套接字和或服务不能工作。

EN

回答 1

Stack Overflow用户

发布于 2022-10-12 22:41:23

您试过使用gpsd的不同端口吗?使用-S标志指定端口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68231444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档