android - linux 中/dev/kmem char 设备的真正用途是什么?

标签 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 字符设备的有用信息吗?

最佳答案

can someone list or share some useful information regarding the dev/kmem char device?

/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 地址 0 读取前 100 个字节。换句话说,如果你要执行:

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

您将从虚拟地址 - 0 读取100 字节,它由系统的内存管理单元映射到某个物理RAM 地址(例如 0x01000000 用于 x86_64,您可以通过以下方式找到它:

cat/proc/iomem | grep "内核代码"

在您的设备上。

我认为/dev/kmem 设备对security 很有用。研究从内核的角度来看进程,我认为目前没有 /dev/kmem 就无法解决其他重要问题。

关于android - linux 中/dev/kmem char 设备的真正用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30680152/

相关文章:

android - 如何解决 W/art : Could not create image space with image file '/system/framework/boot.art' while trying to port Android Lollipop on Arndale Board?

java - 如何将原始文件夹中的音频文件共享到社交应用程序?

android - 我应该放弃 onStop() 或 onDestroy() 中的 View 引用等吗?

java - 仅当不为空时才将文件从 Assets 复制到害怕

正则表达式不替换文件名

c - 修改PID管理器以实现多线程

android - 快速学习android的最佳方法是什么

linux - 如何向网页发送信号

linux-kernel - spin_lock期间的抢占

linux-kernel - 当用作设备树节点名称时,phandle 的含义是什么?