内核中的Ioremapped地址 [英] Ioremapped address in kernel
问题描述
我有一个有关ioremap的基本查询,该查询用于将寻址到IO的设备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.
这篇关于内核中的Ioremapped地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!