背景:
我正在尝试制作一个假的 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 # 都会发生变化 - 很抱歉它们并不全部一致)