我在内核空间中有一个要求,我必须用64K对齐的地址编程设备寄存器。目前我正在使用kmalloc()来分配内存,但不知道如何对齐这个64K。 linux是否提供了这样做的API? 我是否需要编写自己的代码来做同样的事情?
答案 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(...)来分配和释放所需的缓冲区。