![socat을 사용하여 가짜 GPS 장치를 만들어 보세요.](https://linux55.com/image/216559/socat%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B0%80%EC%A7%9C%20GPS%20%EC%9E%A5%EC%B9%98%EB%A5%BC%20%EB%A7%8C%EB%93%A4%EC%96%B4%20%EB%B3%B4%EC%84%B8%EC%9A%94..png)
배경:
나는 출력에 잘못된 시간을 넣을 수 있도록 가짜 GPS 장치를 만들려고 노력 중입니다. 그런 다음 내가 설정할 때 내가 설정한 직렬 소스에서 시간을 가져오는지 확인 chrony
합니다 gpsd
. 실제 GPS 출력을 사용하는 경우 NTP에서 여전히 시간을 받고 있는지 실제로 알 수 없습니다.
내가 시도한 것:
나는 이것을 따랐다:https://stackoverflow.com/questions/52187/virtual-serial-port-for-linux
socat -d -d pty,raw,echo=0 pty,raw,echo=0
그런 다음 다음과 같이 새로 수정된 피드를 파이핑해 보았습니다.
cat /dev/ttyUSB0 | sed 's/11/15/g' > /dev/pts/5
(현재 11:??UTC이므로 시간을 변경해야 합니다)
이렇게 출력물을 보면 cat /dev/pts/6
그럴 것 같습니다. ( cat /dev/ttyUSB0
교체 후에도 마찬가지)
이제 연결해 보세요.
gpsd -D 5 -N -n /dev/pts/10
나쁜 소식이 있어요:
$ sudo gpsd -D 5 -N -n /dev/pts/6
gpsd:INFO: launching (Version 3.22)
gpsd:IO: opening IPv4 socket
gpsd:IO: opening IPv6 socket
gpsd:INFO: listening on port gpsd
gpsd:PROG: NTP: shmat(15,0,0) succeeded, segment 0
gpsd:PROG: NTP: shmat(16,0,0) succeeded, segment 1
gpsd:PROG: NTP: shmat(17,0,0) succeeded, segment 2
gpsd:PROG: NTP: shmat(18,0,0) succeeded, segment 3
gpsd:PROG: NTP: shmat(19,0,0) succeeded, segment 4
gpsd:PROG: NTP: shmat(20,0,0) succeeded, segment 5
gpsd:PROG: NTP: shmat(21,0,0) succeeded, segment 6
gpsd:PROG: NTP: shmat(22,0,0) succeeded, segment 7
gpsd:PROG: successfully connected to the DBUS system bus
gpsd:PROG: shmget(0x47505344, 24512, 0666) for SHM export succeeded
gpsd:PROG: shmat() for SHM export succeeded, segment 23
gpsd:INFO: stashing device /dev/pts/6 at slot 0
gpsd:PROG: no /etc/gpsd/device-hook present, skipped running ACTIVATE hook
gpsd:INFO: SER: opening GPS data source type 6 at '/dev/pts/6'
gpsd:ERROR: SER: device open of /dev/pts/6 failed: Permission denied - retrying read-only
gpsd:ERROR: SER: read-only device open of /dev/pts/6 failed: Permission denied
gpsd:ERROR: initial GPS device /dev/pts/6 open failed
gpsd:ERROR: can't run with neither control socket nor devices open
만일을 대비해서 777
편집 했습니다 ./dev/pts/5
/dev/pts/6
이것이 실제로 권한 문제입니까? 아니면 내 가짜 GPS가 충분하지 않은 걸까요?
참고: 제가 얻을 수 있는 조언은 무엇이든 받아들이겠습니다.
- GPS에서 시간을 얻는 더 좋은 방법
- 가짜 GPS 장치를 만드는 더 좋은 방법
- 위의 가짜 GPS에 내가 무슨 잘못을 한 걸까요?
의견에 대한 응답으로 다음이 관련성이 있다고 생각합니다 strace
.
openat(AT_FDCWD, "/dev/pts/9", O_RDWR|O_NOCTTY|O_NONBLOCK) = -1 EACCES (Permission denied)
...
openat(AT_FDCWD, "/dev/pts/9", O_RDONLY|O_NOCTTY|O_NONBLOCK) = -1 EACCES (Permission denied)
하나는 초기 시도이고 두 번째는 읽기 전용으로 다시 시도하는 것입니다. 루트 btw로 gpsd를 실행 중입니다.sudo strace /usr/sbin/gpsd -D 5 -N -n /dev/pts/9
(/dev/pts #은 설정될 때마다 변경됩니다. 모두 일관되지는 않아서 죄송합니다.)