如何让NTP使用自定义I/O引脚?

Dee*_*ool 8 ntp

我有一个带I/O引脚的主板,我编写了一个C库,其中包含设置和查询这些I/O引脚状态的功能.假设其中一个函数的名称是get_pin(int pin_no),它返回该引脚的逻辑电压.我想向我的一个引脚发送1脉冲/秒(PPS)信号,并告诉Linux的NTPD根据该信号进行校准.

是否有可能告诉NTPD使用其中一个I/O引脚作为其PPS?如果是这样,这样做的方法是什么?IE浏览器.是通过配置文件还是需要修改NTPD的源代码?我早期的研究似乎表明后者可能是必要的.

编辑:我正在使用Centos上的ntpd

小智 3

你的内核有 PPS 支持吗?

$ grep PPS /boot/config-$(uname -r)
# PPS support
CONFIG_PPS=m
# CONFIG_PPS_DEBUG is not set
# PPS clients support
# CONFIG_PPS_CLIENT_KTIMER is not set
CONFIG_PPS_CLIENT_LDISC=m
CONFIG_PPS_CLIENT_PARPORT=m
CONFIG_PPS_CLIENT_GPIO=m
# PPS generators support
Run Code Online (Sandbox Code Playgroud)

是否已ldattach安装?

$ which ldattach
/usr/sbin/ldattach
Run Code Online (Sandbox Code Playgroud)

你可能不需要ldattachLinuxPPS安装说明中提到了这一点。然而,它似乎仅用于通过串行线路(例如RS-232)发送的PPS。

pps-tools安装了吗?

$ which ppstest
/usr/bin/ppstest
Run Code Online (Sandbox Code Playgroud)

模块安装了吗pps-gpio.ko

$ modinfo pps-gpio
filename:       /lib/modules/4.4.0-38-generic/kernel/drivers/pps/clients/pps-gpio.ko
version:        1.0.0
license:        GPL
description:    Use GPIO pin as PPS source
author:         James Nuss <jamesnuss@nanometrics.ca>
author:         Ricardo Martins <rasm@fe.up.pt>
srcversion:     D2C22B0A465DA63746EFB59
alias:          of:N*T*Cpps-gpio*
depends:        pps_core
intree:         Y
vermagic:       4.4.0-38-generic SMP mod_unload modversions 
Run Code Online (Sandbox Code Playgroud)

您可以通过在 GRUB 配置中的内核行中添加类似内容来告诉内核 GPIO 引脚将用作 PPS 信号:

dtoverlay=pps-gpio,gpiopin=18
Run Code Online (Sandbox Code Playgroud)

您需要将“18”更改为您正在使用的 GPIO 引脚。

您需要将几行添加到您的ntp.conf

server 127.127.22.1            # ATOM(PPS)
fudge 127.127.22.1 flag3 1     # enable PPS API
Run Code Online (Sandbox Code Playgroud)

参考:

http://www.ntp.org/ntpfaq/NTP-s-config-adv.htm

http://linuxpps.org/wiki/index.php/Main_Page

http://rdlazaro.info/compu-Raspberry_Pi-RPi-stratum0.html

http://doc.ntp.org/4.1.1/refclock.htm

http://doc.ntp.org/4.1.1/driver22.htm