如何从rt linux中的用户程序访问内核内存?

时间:2014-04-14 13:30:49

标签: c linux sockets linux-kernel timestamp

rt linux中的客户端和服务器通信。客户端发送数据,服务器是receiver.UDP用于客户端和服务器之间的通信。 当服务器(rt linux)从客户端接收数据时,内核应该停止它正在做的事情并开始执行新到达的数据。我想计算内核中发生中断的时间(timestamp)。 在rt-linux中,所有操作系统操作都在内核中进行。所以我在计算内核源代码中的中断时间。所以我修改了/usr/src/linux-version/net/core/dev.c位置的内核源代码,如下所示: 我正在计算时间并存储在缓冲区中。

//此代码处于网络设备驱动程序级别。

int netif_rx(struct sk_buff *skb) 
{
    __net_timestamp(skb);//I modify the code in kernel to get the timestamp and store in buffer
}

//将数据存储到缓冲区后。内核会将它发送到上层,如IP,UDP,INET,最后是内核空间的SOCKET。

但是我想通过用户空间从内核空间读取时间戳包。即我的计划。

我使用recvfrom api从内核空间读取数据(在内核内存中)

问题:有人可以告诉我如何通过用户程序访问包含时间戳数据的内核内存吗?

1 个答案:

答案 0 :(得分:0)

您无法直接从用户空间访问内核内存 - 您必须使用某种API。

你可以:

  • 通过sysfs或debugfs导出时间戳并将其作为常规文件读取
  • 添加系统调用,以便内核返回当前时间戳值
  • 一堆其他疯狂的变种,如netlink socket或共享内存