如何在linux中对齐kmalloc()地址

时间:2013-05-17 08:18:32

标签: c memory-management linux-kernel

我在内核空间中有一个要求,我必须用64K对齐的地址编程设备寄存器。目前我正在使用kmalloc()来分配内存,但不知道如何对齐这个64K。 linux是否提供了这样做的API? 我是否需要编写自己的代码来做同样的事情?

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

首先调用kmem_cache_create(...)函数为你的结构创建一个缓存池,它应该是64K对齐的,如下所示:

    buff_64k_cachep = kmem_cache_create("buff_64k_cache",
                                     sizeof(struct test_struct),
                                     1<<16, /* 64k alignment */
                                     flags,
                                     );

然后调用kmem_cache_alloc(...)和kmem_cache_free(...)来分配和释放所需的缓冲区。