内核中的映射地址 [英] Ioremapped address in kernel
问题描述
我有关于 ioremap 的基本查询,用于将寻址到内核虚拟内存的设备 IO 映射.
I have basic query about ioremap used to map device IO addressed into kernel's virtual memory.
我想知道如果从 ioremap 返回的地址传递给像 virt_to_phys() 这样的例程,它会返回设备 IO 地址吗?
I would like to know if returned address from ioremap is passed to routines like virt_to_phys(), would it return back Device IO address ?
谢谢
推荐答案
virt_to_phys()
仅对内核线性映射中的虚拟地址有效,因为它只是一些快速地址算法,而不是完整的软件表走.线性映射通常只覆盖 RAM.但是,ioremap()
返回的虚拟地址通常(可能总是,但我没有耐心检查每个实现)是 vmalloc 地址,因此如果您将其传递给 virt_to_phys()
你会得到废话.
virt_to_phys()
is only valid for virtual addresses within the kernel linear map, since it's just some fast address arithmetic, not a full software table walk. The linear map normally only covers RAM. The virtual address returned by ioremap()
, however, will usually (probably always, but I don't have the patience to check every implementation) be a vmalloc address, so if you pass that to virt_to_phys()
you'll get nonsense back.
这篇关于内核中的映射地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!