0

假设有一个设备使用内存映射 I/O,即有一个特定范围的物理内存分配给这个设备

如果不使用虚拟内存系统,那么通过使用相应物理地址完成的读/写操作来操作设备非常简单

如果有虚拟内存系统呢?

设备驱动程序需要知道分配给该设备的特定物理内存范围,但是如果它应该使用虚拟地址而不是物理地址,它如何访问该地址范围?

4

2 回答 2

1

在内存映射 IO 设备的情况下,该设备共享的任何物理地址都可以使用 ioremap() API [1] 映射到内核虚拟内存。

因此,在您的情况下,我们可以使用 ioremap() 映射物理地址 0x1234 以获取其内核虚拟地址并开始将数据写入该地址。

[1] http://lxr.gwbnsh.net.cn/linux/arch/cris/mm/ioremap.c

于 2012-08-16T04:52:09.983 回答
0

很久没做过了,但我的回忆是,当你映射一块物理内存时,你的用户空间中的地址对应的是那块物理内存。写入用户空间地址就是写入物理内存。

于 2012-08-15T23:29:16.507 回答