【问题标题】:timestamp error in linux kernel?Linux内核中的时间戳错误?
【发布时间】:2014-04-11 04:20:49
【问题描述】:
int netif_rx(struct sk_buff *skb) 
{
if(skb -> stamp.tv_sec ==0)
do_gettimeofday(&skb->stamp);
}

上面的api是receiver端的api,它接收来自sender的数据。我想计算它接收数据并将其存储在缓冲区中的时间。上面第 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);
    }

1:http://www.fsl.cs.sunysb.edu/kernel-api/re498.html


2:https://github.com/embest-tech/platform_prebuilt/blob/master/ndk/android-ndk-r7/platforms/android-4/arch-x86/usr/include/linux/skbuff.h

--------------在第 81 行检查这一点----- -----------------------------

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

【问题讨论】:

标签: c linux struct 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);
    }
}

编辑: 如果你只想给套接字缓冲区加上时间戳,你可以调用__net_timestamp

int netif_rx(struct sk_buff *skb) 
{
    __net_timestamp(skb);
}

或者如果你不能打电话给__net_timestamp,你可以自己动手:

int netif_rx(struct sk_buff *skb) 
{
    skb->tstamp = ktime_get_real();
}

【讨论】:

  • 我收到错误消息:ktime_t 没有名为 off_sec 的成员。
  • 你到底在哪里找到if(skb -> tstamp.off_sec ==0) 条件的?你想检查什么?如果您想检查未设置的时间,请使用tstamp.tv.sec
  • 我不想检查 if 条件,但我想计算数据到达设备驱动程序的时间。设备驱动的函数是netif_rx,要计算里面的时间并存入缓冲区。
  • 你用的是什么内核?什么发行版?是安卓吗?
  • 我使用的是 Linux RTPC 3.2.48-rt69-2。我想获取数据到达的时间戳并将其存储在缓冲区中。它是实时Linux操作系统。
【解决方案2】:

你可以这样做

your_function(struct sk_buff *skb)
{
    struct timeval tv;

    do_gettimeofday(&tv);
    skb->tstamp = timeval_to_ktime(tv);
}

Have a look at this code mwifiex_hard_start_xmit函数

在大多数情况下,您不需要提供自己的 netif_rx 实现

【讨论】:

  • 我想计算数据到达设备驱动程序的时间。设备驱动的函数是netif_rx,要计算里面的时间。
  • @avd 已经提到了所有必要的内容。
猜你喜欢
  • 2014-04-08
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 2014-05-24
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
相关资源
最近更新 更多