GNU/Linux >> Belajar Linux >  >> Linux

Tanggal Dalam Milidetik Di Openwrt Di Arduino Yun?

Saya menggunakan OpenWRT pada Arduino YUN dan saya mencoba untuk mendapatkan tanggal yang tepat dalam milidetik (DD/MM/YYYY h:min:sec:ms) dengan mendapatkan waktu oleh server waktu.

Sayangnya date +%N baru saja mengembalikan %N , tapi bukan nanodetik. Saya mendengar +%N tidak termasuk dalam tanggal OpenWRT.

Jadi, apakah ada cara untuk mendapatkan tanggal (termasuk milidetik) seperti yang saya inginkan?

Jawaban yang Diterima:

Pada OpenWRT, date adalah busybox , yang memiliki keterbatasan, tetapi ini tidak sepenuhnya salah satunya. Masalah mendasarnya adalah libc (uClibc) tidak mendukung ekstensi strftime GNU ini. (Meskipun glibc juga tidak, lebih lanjut tentang itu di bawah.)

Anda harus memiliki lua secara default, tetapi itu tidak akan membantu tanpa beberapa modul non-default lainnya.

hwclock memanggil gettimeofday() untuk membandingkan/mengatur RTC (jam perangkat keras), tetapi tidak akan menghasilkan resolusi sub-detik (mengakses RTC bisa cukup lambat sehingga mungkin tidak berguna). Selain itu OpenWRT hanya menyediakan rdate kuno , yang hanya memiliki resolusi satu detik.

Tampaknya tidak ada cara langsung untuk mendapatkan stempel waktu yang akurat langsung dari /proc , cap waktu yang paling berguna ada di /proc/timer_list (baris ke-3) yang merupakan waktu aktif dalam nanodetik (resolusi akan tergantung pada platform).

Jika busybox Anda dibuat dengan CONFIG_BUSYBOX_CONFIG_ADJTIMEX set, maka Anda harus dapat menggunakan adjtimex untuk membaca jam kernel (meskipun perhatikan bahwa versi busybox memiliki keduanya argumen yang berbeda dan output yang berbeda dengan adjtimex standar.

Versi normal, adjtimex -p , baris terakhir keluaran:

   raw time:  1416419719s 146628us = 1416419719.146628

Versi busybox, adjtimex (tanpa -p !), 3 baris terakhir:

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

Goldilocks's adalah solusi yang bagus, dengan asumsi Anda memiliki pengaturan lintas build OpenWRT Anda (sangat disarankan!).
coreutils-date Anda solusi berfungsi karena meskipun coreutils sadar akan glibc, itu tidak secara eksklusif glibc. Muncul dengan implementasi mandiri strftime (berasal dari glibc), dan menggunakannya untuk membungkus (melalui strftime_case() ) strftime yang mendasarinya untuk mendukung berbagai ekstensi (dan sebaliknya kembali ke versi uClibc).

Bahkan glibc (hingga 2.23 saat ini) tidak mendukung %N , strftime() core coreutils berasal dari versi glibc kanonik menambahkan %N dan %:z dan beberapa perubahan lainnya. Variasi dan versi patch dari strftime() berlimpah (termasuk versi di bash dan gawk).

Terkait:Bagaimana cara memeriksa sinyal apa yang didengarkan oleh suatu proses?
Linux
  1. Cara Melihat Tanggal dan Waktu Reboot Sistem Linux

  2. Apakah ada fungsi tidur alternatif dalam C hingga milidetik?

  3. Cara mendapatkan waktu tanggal yang diformat dengan python

  1. Linux – Bagaimana Menemukan Tanggal Pembuatan File?

  2. Bagaimana cara mendapatkan tanggal/waktu pembuatan file di Bash/Debian?

  3. Perintah untuk mendapatkan waktu dalam milidetik

  1. Temukan file yang dibuat di antara rentang tanggal

  2. linux-shell:mengganti nama file menjadi waktu pembuatan

  3. Tetapkan tanggal dan waktu Sistem menggunakan C++ di Linux