【发布时间】:2016-08-04 07:24:02
【问题描述】:
我有一个关于 ioremap 的基本查询,用于将设备 IO 映射到内核的虚拟内存中。
我想知道 ioremap 返回的地址是否传递给 virt_to_phys() 等例程,它会返回设备 IO 地址吗?
谢谢
【问题讨论】:
标签: c linux-kernel arm linux-device-driver
我有一个关于 ioremap 的基本查询,用于将设备 IO 映射到内核的虚拟内存中。
我想知道 ioremap 返回的地址是否传递给 virt_to_phys() 等例程,它会返回设备 IO 地址吗?
谢谢
【问题讨论】:
标签: c linux-kernel arm linux-device-driver
virt_to_phys() 仅对内核线性映射中的虚拟地址有效,因为它只是一些快速地址算术,而不是完整的软件表遍历。线性映射通常只覆盖 RAM。然而,ioremap() 返回的虚拟地址通常(可能总是,但我没有耐心检查每个实现)是一个 vmalloc 地址,所以如果你将它传递给virt_to_phys() 你会得到废话.
【讨论】:
ioremap()”。我正在努力想一个正当的理由想要一些映射设备的物理地址 outside 该设备的驱动程序,并且在驱动程序中,您可以将物理地址与 CPU 地址一起存储在您的私有数据中如果您知道将来会需要它(例如,用于设置 dmaengine 请求)。