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

最佳答案

尝试以下方法:
首先调用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(…)来分配和释放所需的缓冲区。

10-08 00:43