GNU/Linux >> Tutoriels Linux >  >> Linux

Date en millisecondes sur Openwrt sur Arduino Yun ?

J'utilise OpenWRT sur l'Arduino YUN et j'essaie d'obtenir la date exacte en millisecondes (JJ/MM/AAAA h:min:sec:ms) en obtenant l'heure par un serveur de temps.

Malheureusement date +%N renvoie simplement %N , mais pas les nanosecondes. J'ai entendu +%N n'est pas inclus dans la date OpenWRT.

Existe-t-il un moyen d'obtenir la date (y compris les millisecondes) comme je le souhaite ?

Réponse acceptée :

Sur OpenWRT, date est busybox , qui a ses limites, mais ce n'en est pas strictement une. Le problème sous-jacent est que la libc (uClibc) ne prend pas en charge cette extension GNU strftime. (Bien que glibc non plus, plus d'informations ci-dessous.)

Vous devriez avoir lua par défaut, mais cela n'aidera pas sans d'autres modules non par défaut.

hwclock appelle gettimeofday() pour comparer/régler le RTC (horloge matérielle), mais il ne produira pas une résolution inférieure à la seconde (l'accès aux RTC peut être suffisamment lent pour ne pas être utile de toute façon). En dehors de cela, OpenWRT ne fournit que l'ancien rdate , qui n'a qu'une résolution d'une seconde entière.

Il semble n'y avoir aucun moyen simple d'obtenir un horodatage précis directement à partir de /proc , l'horodatage le plus utile se trouve dans /proc/timer_list (3ème ligne) qui est le temps de disponibilité en nanosecondes (la résolution dépendra de la plate-forme).

Si votre busybox a été construite avec CONFIG_BUSYBOX_CONFIG_ADJTIMEX set, alors vous devriez pouvoir utiliser adjtimex pour lire l'horloge du noyau (notez cependant que la version busybox a les deux différents arguments et une sortie différente de l'adjtimex standard.

Version normale, adjtimex -p , dernière ligne de sortie :

   raw time:  1416419719s 146628us = 1416419719.146628

Version Busybox, adjtimex (sans -p !), 3 dernières lignes :

   [...]
   time.tv_sec:  1416420386
   time.tv_usec: 732653
   return value: 0 (clock synchronized)

Goldilocks est une bonne solution, en supposant que vous ayez votre configuration de construction croisée OpenWRT (fortement recommandé !).
Votre coreutils-date La solution fonctionne car bien que coreutils soit conscient de glibc, ce n'est pas exclusivement glibc. Il est livré avec sa propre implémentation autonome de strftime (dérivé de glibc), et l'utilise pour conclure (via strftime_case() ) le strftime sous-jacent afin de prendre en charge diverses extensions (et revient à la version uClibc dans le cas contraire).

Même la glibc (jusqu'à la version 2.23 actuelle) ne prend pas en charge %N , les coreutils strftime() dérivé de la version canonique de la glibc ajoute %N et %:z et quelques autres changements. Variations et versions corrigées de strftime() abondent (y compris les versions en bash et gawk).

En relation :Comment vérifier les signaux qu'un processus écoute ?
Linux
  1. Comment afficher la date et l'heure de redémarrage du système Linux

  2. Existe-t-il une fonction de veille alternative en C aux millisecondes ?

  3. Comment obtenir l'heure de la date formatée en python

  4. Commande pour obtenir le temps en millisecondes

  5. Rechercher des fichiers créés entre une plage de dates

Comment trouver la date et l'heure d'installation du système d'exploitation Linux

11 Exemples de commandes de date Linux utiles

Comment définir la date et l'heure sous Linux

L'indicateur de temps n'affiche pas la date/l'heure ?

Linux date Exemples de commandes

Comment changer la date, l'heure et le fuseau horaire dans Linux Mint 20