高速dma缓冲使用。kmem_cache_alloc,kmem_cache_create,struct kmem_cache。内核dma
来源:互联网 发布:淘宝女士针织衫 编辑:程序博客网 时间:2024/04/30 20:22
来自:http://linux.chinaunix.net/bbs/viewthread.php?tid=913690
为了更好的得到问题解决,也对问题的提出进点义务,在抛出我的问题前先简单介绍一下Linux下slab高速缓存的使用方法。
在内核编程中,可能经常会有一些数据结构需要反复使用和释放,按照通常的思路,可能是使用kmalloc和kfree来实现。
但是这种方式效率不高,Linux为我们提供了更加高效的方法——Slab高速缓存管理器
通过先使用kmem_cache_create函数创建一个高速缓存的头指针——在内核中是struct kmem_cache结构,具体用法可以这样:
cachep = kmem_cache_create("cache_name", sizeof(struct yourstruct), 0, SLAB_HWCACHE_ALIGN, NULL, NULL);
这样我们就获得了一个可用的cachep头指针。
当需要分配一个structyourstruct的结构体空间时,我们只需要调用kmem_cache_alloc函数,就可以获得一个足够我们使用的空间的指针(为什么我要说足够呢?因为刚才的声明中我使用了一个标志——SLAB_HWCACHE_ALIGN,这个标志会让分配的空间对于硬件来说是对齐的,而不一定恰好等于sizeof(struct yourstruct)的结果)。范例代码如下:
bodyp = (struct yourstruct *) kmem_cache_alloc(cachep, GFP_ATOMIC & ~__GFP_DMA);
这样就可以使用bodyp指针所对应的空间存贮你需要的结构体信息了。
当用完结束后,我们需要释放空间,如何操作呢?代码很简单:
- 高速dma缓冲使用。kmem_cache_alloc,kmem_cache_create,struct kmem_cache。内核dma
- kmem_cache_alloc, kmem_cache_create, struct kmem_cache
- STM32串口接收使用DMA双缓冲
- dma使用
- DMA
- DMA
- DMA
- DMA
- DMA
- DMA
- DMA
- DMA
- DMA
- DMA
- dma
- DMA
- dma
- DMA
- 使用ALTER DATABASE解决sqlserver2000的问题
- Implement TypeHandlerCallback for oracle Char handle!
- php中防注入函数addslashes() ,mysql_real_escape_string() 和mysql_escape_string() 的区别
- 试用GOOGLE PROTOCOL BUFFERS( 比XML快20~100倍, 支持序列化数据 )
- DB2的CATALOG相关操作命令示例
- 高速dma缓冲使用。kmem_cache_alloc,kmem_cache_create,struct kmem_cache。内核dma
- BT源码阅读兼移植一:种子文件编码
- YB ZB EB PB TB GB MB KB B 的换算关系
- listener.ora--sqlnet.ora--tnsnames.ora的关系以及手工配置举例
- 网站风格
- mini2440上qtopia应用程序开发步骤(x86-qtopia版本)
- 电子书是怎样炼成的?
- flex和socket通信的跨域问题解决方案
- dc区域和WS_CLIPCHILDREN和WS_CLIPSIBLINGS的不一样的体会,