====== NTP avec entrée PPS sur Raspberry PI 2 ====== A l'Observatoire de Besançon, nous avons voulu vérifier la stabilité du système NTP lorsqu'il est relié à la fois à un serveur de temps et un signal PPS. Dans notre cas, le signal PPS est issu de la même horloge de référence que celle utilisée par le serveur de temps. ===== Moyens ===== * Une carte Raspberry PI 2, équipée d'une carte micro-SD contenant le système Raspbian. * Un signal PPS issu de l'horloge de référence (CS1321), avec un atténuateur pour adapter le signal en amplitude (entrées 3,3V pour les GPIO du Raspaberry PI 2). ===== Installations logicielles ===== Toutes les opérations suivantes sont effectuées en utilisateur "root" et considèrent que les étapes de configurations éventuelles d'un proxy ont été faites préalablement. *La Version de Raspbian au moment de l'écriture de ces lignes : # uname -a Linux raspberrypi 3.18.12-v7+ #782 SMP PREEMPT Tue Apr 28 19:54:13 BST 2015 armv7l GNU/Linux ==== Préliminaires ==== * Mettre à jour la distribution Raspbian et du micro-logiciel de la carte \\Mettre à jour la liste des fichiers disponibles dans les dépôts APT \\ # apt-get update * Mettre à jour tous les paquets installés vers les dernières versions en installant de nouveaux paquets si nécessaire \\ # apt-get dist-upgrade * Mettre à jour le firmware \\ # rpi-update * Installer le paquet pps-tools \\Le projet LinuxPPS est une implémentation d'une API du PPS pour le noyau Linux. Elle utilise le système de fichiers pour échanger entre l'espace utilisateur et le noyau. Cela permet d'ajouter des sources PPS au noyau simplement ([[http://linuxpps.org/wiki/index.php]]) # apt-get install pps-tools ==== Recompiler et installer NTP ==== En effet, la version implémentée dans la distribution Raspbian n'inclue pas la prise en compte d'un PPS externe. Pour cela, l'installation de bibliothèques de développement est nécessaire. * Installation de bibliothèques * libcap : librairie permettant l'utilisation de certaines propriétés du système de fichiers * libssl : c'est la partie de OpenSSL qui supporte le protocole TLS ( SSL et TLS ) # apt-get install libcap-dev libssl-dev * Enregistrement des sources de NTP * Se placer dans un répertoire. Si besoin le créer, par exemple : # cd /home # mkdir root # cd root # mkdir ntp # cd ntp * obtenir les sources : # wget http://archive.ntp.org/ntp4/ntp-4.2/ntp-4.2.8p2.tar.gz * Décompresser le fichier "tar" : # tar xvfz ntp-4.2.8p2.tar.gz * compiler : # cd ntp-4.2.8p2.tar.gz # ./configure --enable-linuxcaps # un peu moins de 6 min # make -j2 # un peu moins de 5 min contre presque 8 min avec un simple make * installer les binaires : # make install # /etc/init.d/ntp stop # cp /usr/local/bin/ntp* /usr/bin/ # cp /usr/local/sbin/ntp* /usr/sbin/ ===== Configuration ===== ==== Pour l'entrée PPS ==== === Fichiers à modifier === * Indiquer sur quelles entrée se trouve le PPS : \\ Nous avons choisi l'entrée BCM18 (broche 12) du connecteur GPIO du Raspberry PI 2. # nano /boot/config.txt Ajouter la ligne suivante, puis enregistrer le fichier : dtoverlay=pps-gpio,gpiopin=18 * Rajouter pps-gpio à la liste des modules : \\ Editer # nano /etc/modules Rajouter cette ligne puis enregistrer le fichier : pps-gpio === Connecter le PPS === Connecter le signal PPS entre la masse électrique et l'entrée choisie. Pour notre exemple, nous avons pris la masse broche 39 et l'entrée 18 broche 12. Voici l'organisation du bornier : {{ :fr:rpi_gpio_pinout.jpg?500 | Connecteur GPIO et brochage}} === Tests === * Pour vérifier que le module est bien chargé, vous devriez obtenir quelque chose comme ça : # lsmod | grep pps pps_gpio 2547 1 pps_core 6855 2 pps_gpio * Pour vérifier si le PPS est bien pris en compte, une fois le signal appliqué à l'entré GPIO concernée (ATTENTION : 3,3 V), vous deviez pouvoir utiliser la commande ppstest et obtenir une information par seconde : # ppstest /dev/pps0 trying PPS source "/dev/pps0" found PPS source "/dev/pps0" ok, found 1 source(s), now start fetching data... source 0 - assert 1430922986.000009024, sequence: 12990 - clear 0.000000000, sequence: 0 source 0 - assert 1430922987.000007107, sequence: 12991 - clear 0.000000000, sequence: 0 source 0 - assert 1430922988.000007013, sequence: 12992 - clear 0.000000000, sequence: 0 source 0 - assert 1430922989.000006034, sequence: 12993 - clear 0.000000000, sequence: 0 source 0 - assert 1430922990.000006461, sequence: 12994 - clear 0.000000000, sequence: 0 Ctrl + C pour arrêter. ==== Pour NTP ==== * Modifier le fichier de configuration, # nano /etc/ntp.conf en ajoutant les lignes : # LAN servers server kronos prefer server saturne.obs-besancon.fr # kernel-mode PPS ref-clock server 127.127.22.0 minpoll 6 maxpoll 6 fudge 127.127.22.0 refid PPS Les lignes avec 127.127.22.X définissent les entrées PPS sur /dev/ppsX avec des temps de consultation réglés par nimpoll et maxpoll en puissance de 2 secondes. * Redémarrer le service NTP : # /etc/init.d/ntp start === Test === Pour vérifier l'action de NTP : # ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== oPPS(0) .PPS. 0 l 52 64 377 0.000 -0.017 0.002 *kronos.ltfb.lan .PPS. 1 u 43 64 377 0.264 -0.089 0.034 +saturne.obs-bes .PPS. 1 u 8 64 377 0.434 0.010 0.031 Le jitter et le délais se stabilisent au bout de quelques heures. ====== Références ====== Je n'ai fait que reprendre une part des informations trouvées sur cette page qui est très bien faite :\\ [[http://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html]]\\ Tout y est très bien expliqué.\\ \\ [[https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/README.md| Documentation de la carte Raspberry PI 2]] ======