尝试用socat制作一个假的GPS设备

尝试用socat制作一个假的GPS设备

背景:

我正在尝试制作一个假的 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)

一个是最初的尝试,然后第二个是用 readonly 重试我正在以 root 身份运行 gpsd 顺便说一句sudo strace /usr/sbin/gpsd -D 5 -N -n /dev/pts/9

(每次设置时 /dev/pts # 都会发生变化 - 很抱歉它们并不全部一致)

相关内容