当我在Linux中使用kmalloc和GFP_DMA时,为什么我得到一个高地址?

时间:2012-09-09 09:19:15

标签: linux opensuse dma kmalloc

我正在为Linux中的DMA设备编写设备驱动程序。在Linux Device Drivers, Chapter 15中,它说:

  

对于具有此类限制的设备,应分配内存   通过将GFP_DMA标志添加到kmalloc或来自DMA区域   get_free_pages电话。当此标志存在时,只有内存可以   用24位寻址。或者,您可以使用   通用DMA层(我们将在稍后讨论)分配缓冲区   解决设备的局限性

我这样叫kmalloc

physical_pointer0 = kmalloc(number_of_bytes, GFP_DMA);

并打印结果如下:

  printk(KERN_INFO "pinmem:pinmen_write kmalloc succeeded.  pointer is %p, buffer size is %d\n", physical_pointer0, (unsigned)number_of_bytes);

这就是我所看到的:

Sep  9 00:29:45 nfellman_lnx kernel: [  112.161744] pinmem:pinmen_write kmalloc succeeded.  pointer is ffff880000180000, buffer size is 320800

如果使用GFP_DMA,如何获得指向0xffff880000180000的指针,该指针不适合24位?

难道这不是我的内存块的物理地址吗?如果不是(这意味着我完全误解kmalloc),我怎样才能得到它的实际地址?


我在OpenSuse 12工作。

0 个答案:

没有答案