内核中的Ioremapped地址

Ami*_*mar 4 c arm linux-device-driver linux-kernel

我有关于ioremap的基本查询,用于将设备IO映射到内核的虚拟内存中.

我想知道如果从ioremap返回的地址传递给virt_to_phys()这样的例程,它会返回设备IO地址吗?

谢谢

Not*_*hat 7

virt_to_phys()仅对内核线性映射中的虚拟地址有效,因为它只是一些快速地址算法,而不是完整的软件表行走.线性映射通常仅涵盖RAM.ioremap()但是,返回的虚拟地址通常(可能总是,但我没有耐心检查每个实现)是一个vmalloc地址,所以如果你把它传递给virt_to_phys()你,你会得到废话.

  • 通常的方法可能是“记住你一开始所说的‘ioremap()’”。我正在努力想出一个合理的理由想要某个映射设备的物理地址_outside_该设备的驱动程序,并且在驱动程序中,如果您知道自己要走,您可以将私有数据中的物理地址与 CPU 地址一起存储将来需要它(例如用于设置 dmaengine 请求)。 (2认同)