【发布时间】:2010-12-22 20:41:39
【问题描述】:
我有一个用于 linux 内核 (2.6.18) 的驱动程序,其中我使用 kmalloc(sizeof(my_struct_t), GFP_ATOMIC) 来分配内存,该内存后来用于使用某些设备的 DMA 控制器进行数据传输。后来我不得不增加 my_struct 的大小。它变得太大,以至于 kmalloc() 代码使用静态断言并编译了 __you_cannot_kmalloc_that_much 符号来通知内存块太大而无法分配。所以我想我会将 my_struct_t 声明为静态变量,根本不必分配它。
我定义了 静态 my_struct_t my_struct;
但 DMA 事务运行不佳,我将无效数据 DMA 到缓冲区。
我的问题是:dma 是否禁止使用静态(全局)缓冲区?如果是,那么这些缓冲区在内核内存映射中的确切位置。
谢谢
【问题讨论】:
标签: linux-kernel kernel