【问题标题】:how to get the timetamp for the linux kernel?如何获取linux内核的时间戳?
【发布时间】:2014-05-24 12:20:37
【问题描述】:
int netif_rx(struct sk_buff *skb) 
{
if(skb -> stamp.tv_sec ==0)
do_gettimeofday(&skb->stamp);
}

上面的api是receiver端的api,它接收来自sender的数据。我想计算 t 它接收数据并将其存储在缓冲区中的时间。 上面第 2993 行的 api 在内核源代码中可用:/linux/net/core/dev.c
但我收到错误消息:因为 struct sk_buff 没有名为 stamp 的成员。

http://lxr.free-electrons.com/source/include/linux/skbuff.h 有人可以帮助我:如何获取 linux 内核的时间戳。

后来我把代码改成了:

 int netif_rx(struct sk_buff *skb) 
    {
    if(skb -> tstamp.off_sec ==0)
    do_gettimeofday(&skb->tstamp);
    }

现在我收到错误消息:ktime_t 没有名为“tv_sec”的成员。 struct timeval 但参数是 unio ktime_t 类型。

【问题讨论】:

    标签: c linux pointers linux-kernel timestamp


    【解决方案1】:

    sk_buff->tstampktime_t 类型的变量。 do_gettimeofday 将时间设置为 struct timeval 的变量。您在这里有不同的类型,因此您需要进行转换。一个简单的方法是:

    int netif_rx(struct sk_buff *skb) 
    {
        if(skb -> tstamp.off_sec ==0)
        {
            struct timespec now;
            getnstimeofday(&now);
            skb->tstamp = timespec_to_ktime(now);
        }
    }
    

    【讨论】:

      【解决方案2】:

      尝试使用tstamp 而不是stamp

      【讨论】:

      • 结构路径更像:skb->tstamp.tv.sec
      猜你喜欢
      • 1970-01-01
      • 2014-04-08
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 2013-04-10
      相关资源
      最近更新 更多