我正在Linux的设备驱动程序中使用kmalloc分配一块内存。我得到的地址是0xffff880000180000。我正在使用一个具有46位物理地址空间的IvyBridge处理器。这意味着CPU没有超过46个寻址管脚,因此它不能访问任何高于0x00003fffffffffff的地址。我得到的地址显然大于这个,因为它设置了位47。
假设kmalloc返回一个物理指针(即虚拟地址、线性地址和物理地址相同的指针),如果CPU无法访问该地址,我如何获取该地址?
这个问题与“Why am I getting a high address when I use kmalloc with GFP_DMA in Linux?”有关。然而,这并不完全相同。这个问题通常是关于物理地址kmalloc返回的,而链接的问题是关于GFP_DMA的使用及其与返回地址的关系。

最佳答案

它显然不是一个物理地址,而是一个线性或虚拟地址,并且是“规范形式”,其中位47的值是“符号扩展”到位63。

关于linux - kmalloc如何返回大于物理地址大小的物理地址?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12345884/

10-09 20:44