Как я могу напечатать текущее время в ядре? - PullRequest
1 голос
/ 08 апреля 2019

Я новичок в Linux. (извините за мой плохой английский) Я должен напечатать текущее время и сделать что-то через системный вызов в Linux. Я делал другие вещи, но не смог распечатать текущее время .. Я написал как

#include<linux/kernel.h>
#include<linux/time.h>
...
asmlinkage long sys_printtime(void) {
     ...
     struct timeval time;
     struct tm tm1;
     ...

     do_gettimeofday(&time);
     local_time=(u32)(time.tv_sec -(sys_tz.tz_minuteswest * 60));
     time_to_tm(local_time,(3600*9),&tm1);
     printk(KERN_DEBUG "time @(%04d-%02d-%02d %02d:%02d:%02d)\n", tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour,tm1.tm_min,tm1.tm_sec);
    ...
    return 0;
}

но это не работает.

В ошибке говорилось, что я не могу использовать do_gettimeofday, и я наконец-то понял, что больше не могу использовать do_gettimeofday, потому что kernel5 не поддерживает. Я искал в Google и StackOverflow, но я не знаю, как напечатать текущее время в kernel5 .. кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 11 апреля 2019

Да, do_gettimeofday был удален из-за проблемы y2038 .Вместо этого ядро ​​предоставляет временные интерфейсы, которые вы можете использовать в соответствии с вашими потребностями.Проверьте документацию https://www.kernel.org/doc/html/latest/core-api/timekeeping.html.

Например, у вас есть ktime_get_ts64(struct timespec64 *ts), который предоставит вам время в секундах и наносекундах.

struct timespec64 {
    time64_t    tv_sec;         /* seconds */
    long        tv_nsec;        /* nanoseconds */
};

Если вы хотите использовать только наносекунды, вы можете использовать u64 ktime_get_ns(void).Пожалуйста, проверьте документацию выше для того, что соответствует вашим целям.Также вы можете проверить timekeeping.h и ktime.h для получения дополнительной информации.

Если вы хотите найти пример, просто найдите имя функции в источнике ядра либоиспользуя grep -rni <func name> или используйте cscope.Вы также можете найти его онлайн здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...