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,最后发送到内核空间的SOCKET。
但是我想通过用户空间从内核空间读取时间戳数据包。即我的程序。
我正在使用recvfrom api从内核空间(位于内核内存中)读取数据
问题:有人可以告诉我如何通过用户程序访问包含时间戳数据的内核内存吗?
最佳答案
您无法直接从用户空间访问内核内存 - 您必须使用某种 API。
你可以:
- 通过sysfs或debugfs导出时间戳并作为常规文件读取
- 添加系统调用,以便内核返回当前时间戳值
- 一堆其他疯狂的变体,例如 netlink 套接字或共享内存
关于c - rt linux中如何从用户程序访问内核内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23061469/