我kmalloc
在 Linux 的设备驱动程序中分配一块内存。我得到的地址是0xffff880000180000
。我正在使用具有 46 位物理地址空间的 IvyBridge 处理器。这意味着 CPU 没有超过 46 个寻址引脚,因此它无法访问上面的任何地址0x00003fffffffffff
。我得到的地址显然比这更大,因为它设置了第 47 位。
假设kmalloc
返回一个物理指针(即虚拟地址、线性地址和物理地址相同的指针),如果 CPU 无法访问它,我如何获得这样的地址?
这个问题与“为什么我在 Linux 中将 kmalloc 与 GFP_DMA 一起使用时会得到一个高地址? ”。但是,它并不相同。这个问题一般是关于物理地址kmalloc
返回的,而链接的问题是关于返回地址的使用GFP_DMA
及其与返回地址的关系。