Posted on 2016-04-16 06:19:41 os
摘要:在前一篇博客中,我们介绍了Linux内核中内存映射的实现,以及用户态调用mmap系统调用的原理。接下来,我们会通过Linux内核模块的方式,映射两种物理内存:物理地址空间和内核模块申请的内存,演示内核模块中如何与用户态进程之间共享内存。
在开始之前,介绍一下/dev/mem
这个字符设备,打开/dev/mem
之后,通过mmap系统调用,就可以映射物理地址空间。需要注意的是,这里的物理地址空间,是站在CPU角度看到的地址空间,而不仅仅是RAM空间,还有外设的IO空间,例如BIOS ROM、Video ROM、PCI BUS等。
下面的内核模块代码工作的行为类似于/dev/mem
,打开对应的设备文件后,同样可以映射CPU地址空间。完整的代码在文章最后。