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

标签 c linux sockets linux-kernel timestamp

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/

相关文章:

c - 使用 C 编程的电子安全设计

linux - Vagrant 无法在 linux 客户机上挂载同步文件夹 -- :Protocol Error

C# Tcp 异步套接字数据读取逻辑

sockets - java : Can socket connect to IPv6 address while binding a IPv4 address?

python - pexpect 属性错误 : 'module' object has no attribute 'spawn'

java - 套接字编程 java - 套接字连接存活了多长时间?我该如何控制它?

c++ - 将 void * 指向 char 作为 int 读取有多安全?

c - Visual Studio 2008 中的奇怪编译错误

c - sprintf 字符串操作在 loadrunner 中无法正常工作

linux - 如何使用 minicom 通过短信与我的 usb 调制解调器通信?