我在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
的使用及其与返回地址的关系。
答案 0 :(得分:3)
它显然不是物理地址,而是线性或虚拟地址,并且是“规范形式”,其中第47位的值是“符号扩展”到第63位。