gpsd + ntpd로 Stratum 1 (GPSD NG 버전)

5856 단어 ntpGPS

계기



PPS 대응 GPS를 준비해, ldattach PPS /dev/ttyS0/dev/pps0 를 생성해, ntpd 의 Type20 이나 Type22 로 Stratum 1 을 운용되고 있는 분은 많을 것이다.
단, 이 운용의 경우, ttyS0 는 ntpd가 점유하고, GPS는 NTP 이외의 목적으로 사용할 수 없다.

gpsd


ttyS0 에서 잡힌 GPS의 NMEA를 널리 활용할 수 있도록 하는 것이 gpsd 그리고 ntpd와도 연계할 수 있는 뛰어난 것이다.
다만, 자신의 환경에서는, 드물게 jitter의 스파이크가 발생한 것과, 깨달으면 ntpd와 제휴할 수 없게 되어 있었으므로, /dev/pps0 운용에 되돌려 버렸다.

gpsd 다시



그런데 역시 ntpd를 사용하면서 gpsd를 사용하고 싶다. Ntrip 을 사용하여 위치의 정확도가 얼마나 바뀌는지 살펴보고 싶습니다. 그리고 gpsd는 Ntrip에 해당합니다.

ntpd에서 gpsd 사용



구그하면 많이 나오는데, 모두 Type28의 공유 메모리(SHM) 드라이버를 사용하고 있다. 그런데 이것을 사용하면, ntpq -p 로 보았을 때, delay, offset, jitter 모두 0.000이 되어 버려, GPS에 동기하지 않는다. (과제 1)

gpsd에서 PPS



원래, gpsmon 에서 gpsd 의 출력 데이터를 바라보면, PPS: 의 뒤가 공백으로, PPS 정보가 취해지지 않았다. (과제 2)
우선 gpsd에서 PPS를 사용할 수 있도록 과제 2를 해결한다.

도전 2



정보원이 부족하기 때문에 여기 의 긴 문장을 오로지 한마디 읽는다. 그러면

If you’re going to use gpsd for time service, you must run in -n mode so the clock will be updated even when no clients are active.

뭐라고 써있다. 이거?
ArchLinux의 경우 /etc/gpsd를 편집하여 gpsd -n로 시작할 수 있습니다.

/etc/gpsd
# Default settings for gpsd.
START_DAEMON="true"
GPSD_OPTIONS="-n"
DEVICES="/dev/gps0"
USBAUTO="true"
gpsmon 로 보면, PPS: 에 수치가 들어간다. 와우.

gpsd -n 하지만 PPS가 되지 않는 경우



일단 gpsd를 멈추고, ldattach PPS /dev/ttyS0 한 후, ppstest /dev/pps0 로 PPS가 되는 것을 확인하고 나서, killall ldattach 하고, gpsd 달리게 하면, 어째서인가 PPS가 되는 생각이 든다….

도전 1



그런 다음 문제 1로 돌아갑니다.
GPS는 ArchLinux상에서 운용하고 있으므로, ArchWiki 를 확인하면, 무려 Type46라고 하는 것이 있다. 여기 을 확인하면 GPSD NG라고 말하는 것 같고

It is important to understand that this driver works best using a GPS device with PPS support.

라는 것. SHM 대신 JSON에서 PPS별로 가져오는 것 같다. 이거?

방금 전의 ArchWiki와 같이 설정한다.

/etc/ntp.conf
server 127.127.46.0 
fudge 127.127.46.0 time1 0.0 time2 0.0 refid GPS

그런데, ntpq -p 로 봐도, 일방에 PPS다운 값이 되지 않는다…

다시 한번 여기 을 재검토하면 The Mode Word의 1에,

This mode is a possible choice for receivers that provide a PPS signal most of the time

의 기재가 있다. mode 1로 하면 좋을까?

/etc/ntp.conf
server 127.127.46.0 
fudge 127.127.46.0 mode 1 time1 0.0 time2 0.0 refid GPS

확인



잠시 방치해…
$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*GPSD_JSON(0)    .GPS.            0 l   15   16  377    0.000   -0.002   0.001

이거야! 하지만 PPS 동기화를 보여 o 아니야 * 그렇지...

ntpd 소스 확인



refclock_gpsdjson.c
    /* dispatch to the mode-dependent processing functions */
    switch (up->mode) {
        default:
        case MODE_OP_STI:
                eval_serial(peer, pp, up);
            break;

    case MODE_OP_STRICT:
                eval_strict(peer, pp, up);
                break;

default는 mode 0입니까?

수수께끼



gpsd를 경유하면, SHM이 아니어도, 역시 9시간마다 스파이크가 발생한다…


츠코미



Ntrip하지 않았어!

좋은 웹페이지 즐겨찾기