2017-02-13 14 views
8

У меня есть материнская плата с выводами ввода/вывода, и я написал библиотеку C с функциями для установки и запроса состояния этих контактов ввода/вывода. Допустим, что имя одной из этих функций - get_pin(int pin_no), и оно возвращает логическое напряжение этого вывода. Я хотел бы отправить сигнал 1 импульс в секунду (PPS) на один из моих контактов и сообщить NTPD Linux для откалибровки на основе этого сигнала.Как заставить NTP работать с пользовательским вводом-выводом?

Можно ли указать NTPD использовать один из этих контактов ввода/вывода в качестве PPS? Если да, то каков подход к этому? То есть. Это через конфигурационный файл или требуется изменить исходный код NTPD? Мои ранние исследования, похоже, предполагают, что последнее может быть необходимо.

Изменить: Я работаю с NTPD на Centos

+0

Какой ОС вы используете? –

+0

@Ortomala Lokni CentOS – DeepDeadpool

+0

Вы написали свой собственный драйвер или используете уже существующий? –

ответ

1

Поддерживает ли ваше ядро ​​поддержку 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 

ldattach установлен?

$ which ldattach 
/usr/sbin/ldattach 

Возможно, вам не понадобится ldattach. Это было указано в инструкциях LinuxPPS installation. Однако кажется, что он используется только для PPS, отправленного по последовательной линии (например, RS-232).

Установлены ли pps-tools?

$ which ppstest 
/usr/bin/ppstest 

Установлен ли модуль pps-gpio.ko?

$ modinfo pps-giop 
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 <[email protected]> 
author:   Ricardo Martins <[email protected]> 
srcversion:  D2C22B0A465DA63746EFB59 
alias:   of:N*T*Cpps-gpio* 
depends:  pps_core 
intree:   Y 
vermagic:  4.4.0-38-generic SMP mod_unload modversions 

Вы можете сообщить ядру, что штырь GPIO будет использоваться в качестве сигнала PPS, добавляя что-то подобное для вашего ядра линии в вашей GRUB конфигурации:

dtoverlay=pps-gpio,gpiopin=18 

Вам нужно будет изменить " 18 "к выходу GPIO, который вы используете.

Вам нужно будет добавить пару строк, как это к вашим ntp.conf:

server 127.127.22.1   # ATOM(PPS) 
fudge 127.127.22.1 flag3 1  # enable PPS API 

Ссылки:

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

+0

Из вашего ответа я предполагаю, что мой код не нужен, и что это полностью обрабатывается через файлы ОС и conf. Для чего используется ldattach? – DeepDeadpool

+0

Я обновил свой ответ, отметив, что 'ldattach' может и не понадобиться. –

0

Один импульса в секунду калибровочного сигнала также потребует чтений входного контакта точно на 1 секунду для калибровки. Опрос не будет выполняться, поскольку выполнение таймера может отличаться от ОС при работе с высоким приоритетом.

Таким же образом, используя прерывание по изменению * для этого штифта зацепил с функцией откалибровать также не грантополучатель 1 PPS выполнения метода калибровки из-за задержки обработки прерывания, как говорят, когда происходит прерывание выше приоритет.

+0

На самом деле это не тот ответ, который я ищу. Мне нужен ответ, который говорит мне, как сообщить NTP использовать конкретный PIN-код в качестве его pps при использовании моих функций. Мой вопрос сводился к тому, что «у меня есть функция, чтобы читать логическое напряжение этого вывода, какой подход говорит ntpd использовать этот вывод в качестве его pps?». – DeepDeadpool

0

Если я правильно понял вопрос, вы используете что-то вроде малины и хотите синхронизировать свою систему с помощью другого контроллера, получив некоторую последовательность логических 1, что будет означать, например, часовую чашку для вашей доски?
Единственное, что я не понимаю, это то, зачем вам нужен демон ntp. Разве не лучше создать статическую переменную time_t, которая будет увеличиваться при каждом получении чашки?
Если вы хотите синхронизировать некоторые внешние устройства позже, а плата действует как сервер времени - просто настройте системную дату каждый раз, когда разница между вашей статической переменной и значением time(0) будет больше определенного значения.

 Смежные вопросы

  • Нет связанных вопросов^_^