1

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

4

1 回答 1

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(...) 来分配和释放您需要的缓冲区。

于 2013-05-17T09:03:48.287 回答