РАБОЧИЙ PI:
- Model B Rev 2
- Jessie 4.1.19+ #858
- версия gpsd 3.11-3+deb8ul
- Это устройство было обновлено с исходного дистрибутива Wheezy до этой версии
Jessie. Используйте для рабочего беспроводного соединения TL-WN725N под
Wheezy, но оно стало неработоспособным после обновления Jessie.
- Модель B Rev 2+
- Джесси 4.1.7+ #817
версия gpsd 3.11-3 - Это оригинальный дистрибутив, но он обновлен до последней версии.
- Это устройство имеет рабочее беспроводное соединение TL-WN725N.
- Дополнение RPI GPS оба работают на чипсетах U-Blox 6 GPS.
- при команде с gpsmon /dev/ttyAMA0 оба числа pi извергают ожидаемое Строки GPS NMEA
- Можно загружать команду gpsmon с драйвером u-blox и переключаться между GPS-данными в формате NMEA и U-Blox.
Конечная цель состоит в том, чтобы данные GPS записывались обоими пи с помощью Python. Для этого, судя по всему (насколько я понимаю), должен быть запущен GPS-сокет. Это можно проверить с помощью cgps -s. Это работает в РАБОЧЕМ ПИ, но не работает в нерабочем ПИ.
Я запустил службу gpsd с помощью следующей команды в обоих ПИ
sudo gpsd /dev/ttyAMA0 -b -N -D 3 -n -F /var/run/gpsd.sock
В РАБОЧЕМ PI это команда принята и cgps -s работает правильно. Кроме того, предоставляется следующая информация:
Код: Выделить всё
$ 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
Теперь, с неработающим pi:
Код: Выделить всё
$ 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!
Код: Выделить всё
$ 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
Я сравнил следующие файлы двух пи и обнаружил, что они идентичны:
Код: Выделить всё
/lib/systemd/system/gpsd.socket
/lib/systemd/system/gpsd.service
/etc/default/gpsd
- Почему init не захватывает порт 2947 при загрузке в РАБОЧЕМ PI, тогда как нерабочий Pi захватывает захватить его, даже несмотря на то, что оба пи работают под управлением Jessie 4.1 (хотя я признаю разные версии). Очевидно, что причина, по которой неработающий pi не может смонтировать сокет gpsd, заключается в том, что нужный ему порт уже занят.
- Есть ли способ сказать неработающему pi НЕ захватывать порт 2947 или Есть ли способ заставить init освободить этот порт из командной строки?
- Возможно ли, что беспроводная связь на нерабочем пи использует эти порты, и поэтому gpsd может захватить порт на РАБОЧЕМ ПИ (у которого нет беспроводной сети) и не может на нерабочем ПИ (у которого есть работающая беспроводная связь).
Я не совсем уверен, должен ли я ДОБАВЛЯТЬ КОММЕНТАРИЙ, РЕДАКТИРОВАТЬ СООБЩЕНИЕ или ОТВЕТИТЬ НА ВОПРОС. В ответ на первый ответ LARSKS:
Я буду вести запись каждого числа «пи» отдельно.
нерабочее число «пи»
После перезагрузки пи:
Код: Выделить всё
$ systemctl is-enabled gpsd.socket
enabled
$ systemctl is-enabled gpsd.service
static
Однако, похоже, сокет и служба присутствуют. Итак, я попробовал подключиться к порту 2947 по телнету:
Код: Выделить всё
$ 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 по-прежнему работает правильно.
РАБОЧИЙ ПИ
Код: Выделить всё
$ systemctl is-enabled gpsd.socket
disabled
$ systemctl is-enabled gpsd.service
static
Код: Выделить всё
$ 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
Когда я пытаюсь запустить gpsmon /dev/ttyAMA0, я получаю:
Код: Выделить всё
$ 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)
В качестве сноски:
Код: Выделить всё
$ systemctl enable --now gpsd.socket
systemctl: unrecognized option '--now'
cgps (или код Python) не работает, потому что сокет и/или служба не работают.
Подробнее здесь: https://stackoverflow.com/questions/682 ... -by-1-init