Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在rt linux中如何从用户程序访问内核内存?_C_Linux_Sockets_Linux Kernel_Timestamp - Fatal编程技术网

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

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

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

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

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,最后是内核空间的套接字

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

我正在使用RecvFromAPI从内核spacce(在内核内存中)读取数据


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

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

你可以:

  • 通过sysfs或debugfs导出时间戳,并将其作为常规文件读取
  • 添加syscall,以便内核返回当前时间戳值
  • 其他一些疯狂的变体,比如netlink套接字或共享内存

用户程序应仅通过syscallsI am使用recvfrom api访问内核内存,然后是否可以从内核内存接收数据?非常感谢。服务器(内核)从客户端接收数据。我正在计算时间戳并将其添加到缓冲区中。稍后,它将从网络设备驱动程序传输到内核空间中的ip、udp、INET,最后是套接字(这些任务将由内核负责)。我是从内核接收时间戳数据包的用户,因此我将使用RecvFromAPI来接收时间戳数据包。不是吗??我不想使用ftrace进行内核调试并将时间戳存储在文件中。稍后在脱机状态下阅读或分析。我想让它在线。我不理解你,特别是这部分:“我是从内核接收时间戳数据包的用户,所以我将使用RecvFromAPI来接收时间戳数据包”。对不起。在内核空间和更高的用户空间中计算时间戳,以便从内核空间接收(recvfrom api)时间戳数据包,并将该数据包发送回客户端。我应该在哪里为内核添加syscall以返回当前时间戳值??你能提供更多的信息吗?对不起,我从来没有这样做过,但我认为网上有很多手册。