> does anyone know of a successful deployment of LinuxPPS with newer
> kernel (4.4), ntp (4.2.8p?) and PPS over serial interface on x86-based
> PCs? Or of any known issues that linuxpps has with such a configuration?

I am running ntp 4.2.8p9 successfully on a Raspberry Pi with kernel 4.4.39
and kernel-bound PPS, albeit via a GPIO input rather than a serial
interface.

I think your issue may be that you are building NTP with a local copy of
linuxpps rather than the version now integrated into newer kernels.  When
I execute ./configure prior to compiling ntp, I get:

   configure:28418: checking for sys/timepps.h
   configure:28418: gcc -c -g -O2  conftest.c >&5
   configure:28418: $? = 0
   configure:28418: result: yes
      :
   configure:29839: checking timepps.h usability
   configure:29839: gcc -c -g -O2  conftest.c >&5
   conftest.c:233:21: fatal error: timepps.h: No such file or directory
    #include <timepps.h>
                        ^
   compilation terminated.

and in the generated config.h file I get:

   /* Define to 1 if you have the <sys/timepps.h> header file. */
   #define HAVE_SYS_TIMEPPS_H 1
      :
   /* Define to 1 if you have the <timepps.h> header file. */
   /* #undef HAVE_TIMEPPS_H */

These 2 defines are used in file ntpd/ppsapi_timepps.h to select which
timepps.h
to include in the compile.  <timepps.h> is used in preference to
<sys/timepps.h>
if the former exists.  The <sys/timepps.h> include file (located in my
system at
/usr/include/sys/timepps.h) contains 2 versions of time_pps_kcbind():

   ifdef PPS_KC_BIND
   static __inline int time_pps_kcbind(pps_handle_t handle,
                                           const int kernel_consumer,
                                           const int edge, const int
tsformat)
   {
           struct pps_bind_args __bind_args;
           __bind_args.tsformat = tsformat;
           __bind_args.edge = edge;
           __bind_args.consumer = kernel_consumer;
           return ioctl(handle, PPS_KC_BIND, &__bind_args);
   }
   #else /* !PPS_KC_BIND */
   static __inline int time_pps_kcbind(pps_handle_t handle,
                                           const int kernel_consumer,
                                           const int edge, const int
tsformat)
   {
           /* LinuxPPS doesn't implement kernel consumer feature */
           errno = EOPNOTSUPP;
           return -1;
   }
   #endif /* PPS_KC_BIND */

In my system, PPS_KC_BIND is defined in a file /usr/include/linux/pps.h and
so
the first version of the function, which does not return EOPNOTSUPP, is
used.

I would suggest you check that HAVE_TIMEPPS_H is not being defined in your
build (i.e. the 'checking timepps.h usability' test fails) and, if it is,
find your local copy of timepps.h and delete it.

There is a discussion of this part of the ntp config process on this mailing
list here:
http://lists.ntp.org/pipermail/questions/2014-December/039424.html

Good luck,

Richard

_______________________________________________
questions mailing list
questions@lists.ntp.org
http://lists.ntp.org/listinfo/questions

Reply via email to