linux中/ dev / kmem char设备的实际用途是什么?

时间:2015-06-06 07:26:50

标签: android linux linux-kernel linux-device-driver

从最近几天开始,我试图了解/dev/mem/dev/kmem设备之间的确切区别。从不同的来源,我唯一知道的是,当我们尝试从这些设备中读取时,read_mem()read_kmem() API分别被调用。

read_mem(): reads the *physical* memory 
read_mem(): reads the *virtual* memory as seen by the kernel.

我很想知道/dev/kmem的唯一目的是什么,在哪些用例中我们可以使用它。 regdump/dev/mem有用的示例。但找不到/dev/kmem的有用性。

有人可以列出或分享有关dev/kmem字符设备的一些有用信息吗?

1 个答案:

答案 0 :(得分:1)

  

有人可以列出或分享有关dev / kmem char设备的一些有用信息吗?

/dev/kmem/dev/mem设备包含有关RAM的相同信息。但正如您可以在man kmem中看到的那样:

The file kmem is the same as mem, except that the kernel virtual memory
rather than physical memory is accessed. 

这意味着/dev/kmem提供的信息与/dev/mem相同,但正如Linux内核所见。例如,如果您将执行如下所示的执行:

open("/dev/mem");
seek(0);
read(100);

您将从RAM地址100中读取第一个0个字节。换句话说,如果你将执行:

open("/dev/kmem");
seek(0);
read(100);

您将从100 - virtual address读取0字节,该字节由系统的内存管理单元映射到某个物理RAM地址(例如{{1}对于0x01000000,您可以使用:

找到它

x86_64

在您的设备上。

我认为大多数cat /proc/iomem | grep "Kernel code"设备对于security研究从内核视图查看流程非常有用,我认为还有其他一些重要问题你无法做到。这个天没有/dev/kmem解决。