Порт GPSD 2947 занят 1/initPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Порт GPSD 2947 занят 1/init

Сообщение Anonymous »

В настоящее время я использую ДВА Raspberry Pi, давайте назовем их РАБОТАЮЩИМ PI и нерабочим Pi.
РАБОЧИЙ PI:
  • Model B Rev 2
  • Jessie 4.1.19+ #858
  • версия gpsd 3.11-3+deb8ul
  • Это устройство было обновлено с исходного дистрибутива Wheezy до этой версии
    Jessie. Используйте для рабочего беспроводного соединения TL-WN725N под
    Wheezy, но оно стало неработоспособным после обновления Jessie.
non рабочий пи
  • Модель 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
Это то, что я ожидаю: сокеты IPv4 и IPv6 2947 используются службой 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!
В ответ на команду netstat:

Код: Выделить всё

$ 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
Очевидно, что сокеты IPv4 и IPv6 2947 используются службой инициализации (я занимаюсь радиочастотным оборудованием, а не программным обеспечением, но похоже, что операционная система управляет порт.
Я сравнил следующие файлы двух пи и обнаружил, что они идентичны:

Код: Выделить всё

/lib/systemd/system/gpsd.socket
/lib/systemd/system/gpsd.service
/etc/default/gpsd
Последние 2 недели я прочесывал этот и другие сайты и пробовал представленные там решения (безрезультатно). Похоже, это не редкая проблема. Я приветствую любую помощь, но мои 3 основных вопроса:
  • Почему 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
cgps -s или cgps по-прежнему не работает (время ожидания истекает)
Однако, похоже, сокет и служба присутствуют. Итак, я попробовал подключиться к порту 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
Теперь все по-другому. Фактически, когда я пытаюсь запустить cgps, я просто получаю пустой экран. Раньше я получал пустую таблицу, но теперь ничего.
Когда я пытаюсь запустить 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)
Но если я перезагрузлюсь, gpsmon /dev/ttyAMA0 вернется к нормальной работе.
В качестве сноски:

Код: Выделить всё

$ systemctl enable --now gpsd.socket
systemctl: unrecognized option '--now'

В целом команда gpsmon /dev/ttyAMA0 работает, потому что я просто передаю сообщения NMEA через последовательный порт на свой экран.
cgps (или код Python) не работает, потому что сокет и/или служба не работают.


Подробнее здесь: https://stackoverflow.com/questions/682 ... -by-1-init
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Прокси-сервер mitm закрыт, но порт все еще занят
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Приложение Python, порт 8005 занят системным процессом ОС [Duplicate]
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Приложение Python, порт 8005 занят системным процессом ОС [Duplicate]
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Устанавливает ли мой рецепт yocto какой-либо клиентский инструмент gpsd, например gpsmon, для мониторинга данных GPS в т
    Anonymous » » в форуме Linux
    0 Ответы
    55 Просмотры
    Последнее сообщение Anonymous
  • Не может определить, какой экземпляр перегруженной функции "init :: init" предназначен
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»