0
使用arm核心adsp-sc572(内核4.0),我想通过__pa
工作不正常。 使用kmalloc为DMA分配一个大缓冲区(例如500kB)给了我一个虚拟地址。当使用__pa()
- >它有时会返回物理地址范围外的地址。例如0x88AB0000
__pa返回物理地址超出范围
0x87FFFFFF
[..] -> 128MB RAM
0x80000000
__pa
电话__virt_to_phys
- >__pv_stub
我不unterstand。
static inline phys_addr_t __virt_to_phys(unsigned long x)
{
phys_addr_t t;
if (sizeof(phys_addr_t) == 4) {
__pv_stub(x, t, "add", __PV_BITS_31_24);
} else {
__pv_stub_mov_hi(t);
__pv_add_carry_stub(x, t);
}
return t;
}
虚拟地址空间的起始位置在哪里定义? __pv_stub
如何工作?为什么__pa返回无效地址?
您需要使用DMA映射API而不是您的自定义内容。例如,只要调用'dma_map_single()'(如果大小为一页),并使用该* bus *地址(注意* physical *地址和* bus *地址之间的差异)。 – 0andriy