Chinaunix首页 | 论坛 | 博客
  • 博客访问: 95631
  • 博文数量: 16
  • 博客积分: 359
  • 博客等级: 一等列兵
  • 技术积分: 279
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-24 22:08
文章分类
文章存档

2014年(3)

2012年(13)

我的朋友

分类: LINUX

2012-03-25 09:53:46

2012年3月25日  Sunday
 
1、内核版本号2.6.33.20
 
2、mempool相关函数的简单应用方法
 
3、模块源文件mempool.c

点击(此处)折叠或打开

  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. #include <linux/kernel.h>

  4. #include <linux/slab.h>
  5. #include <linux/mempool.h>

  6. #define MIN_ELEMENT 4
  7. #define TEST_ELEMENT 4

  8. typedef struct{
  9.     int number;
  10.     char string[128];
  11. }TMemElement;

  12. int elementcount=0;

  13. void *mempool_alloc_test(int gfp_mask,void *pool_data)
  14. {
  15.     TMemElement *data;
  16.     printk("--->mempool_malloc_test\n");
  17.     
  18.     data=kmalloc(sizeof(TMemElement),gfp_mask);
  19.     if(data!=NULL)data->number=elementcount++;
  20.     return data;
  21. }

  22. void mempool_free_test(void *element,void *pool_data)
  23. {
  24.     printk("--->call mempool_free_test\n");
  25.     if(element!=NULL)kfree(element);
  26. }

  27. int mempool_init(void)
  28. {
  29.     mempool_t *mp;
  30.     TMemElement *element[TEST_ELEMENT];
  31.     int lp;
  32.     
  33.     printk("Module MEMPOOL Test\n");
  34.     
  35.     memset(element,0,sizeof(element));
  36.     
  37.     printk("call mempool_create\n");
  38.     mp=mempool_create(MIN_ELEMENT,
  39.             mempool_alloc_test,
  40.             mempool_free_test,
  41.             NULL);
  42.     
  43.     printk("call mempool_allocate\n");
  44.     for(lp=0;lp<TEST_ELEMENT;lp++){
  45.         
  46.         element[lp]=mempool_alloc(mp,GFP_KERNEL);
  47.         if(element[lp]==NULL){
  48.             printk("allocate fail\n");
  49.         }else{
  50.             sprintf(element[lp]->string,
  51.                 "allo data %d\n",
  52.                 element[lp]->number);
  53.             printk(element[lp]->string);    
  54.         }
  55.     }
  56.     
  57.     printk("mempool free\n");
  58.     for(lp=0;lp<TEST_ELEMENT;lp++){
  59.         if(element[lp]!=NULL)mempool_free(element[lp],mp);
  60.     }
  61.     
  62.     printk("call mempool_destroy\n");
  63.     mempool_destroy(mp);
  64.     
  65.     return 0;
  66. }

  67. void mempool_exit(void)
  68. {
  69.     printk("Module MEMPOOL Test End\n");
  70. }

  71. module_init(mempool_init);
  72. module_exit(mempool_exit);
  73. MODULE_LICENSE("Dual BSD/GPL");

4、Makefile

点击(此处)折叠或打开

  1. obj-m += mempool.o

  2. CURRENT_PATH := $(shell pwd)

  3. LINUX_KERNEL := $(shell uname -r)

  4. LINUX_KERNEL_PATH := /usr/src/linux-$(LINUX_KERNEL)

  5. all:
  6.     make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
  7. clean:
  8.     #make -C $(LINUX_KERNEL_PAHT) M=$(CURRENT_PATH) clean
  9.     rm *.mod.*
  10.     rm *.order
  11.     rm *.o
  12.     rm *.symvers

5、运行方法

  1. ~/mempool# make
  2. ~/mempool# insmod mempool.ko
  3. ~/mempool# dmesg

6、运行结果

点击(此处)折叠或打开

  1. [10373.987583] Module MEMPOOL Test
  2. [10373.987609] call mempool_create
  3. [10373.987709] --->mempool_malloc_test
  4. [10373.989115] --->mempool_malloc_test
  5. [10373.989172] --->mempool_malloc_test
  6. [10373.989190] --->mempool_malloc_test
  7. [10373.989229] call mempool_allocate
  8. [10373.989247] --->mempool_malloc_test
  9. [10373.989372] allo data 4
  10. [10373.989385] --->mempool_malloc_test
  11. [10373.989399] allo data 5
  12. [10373.989401] --->mempool_malloc_test
  13. [10373.989405] allo data 6
  14. [10373.989406] --->mempool_malloc_test
  15. [10373.989410] allo data 7
  16. [10373.989423] mempool free
  17. [10373.989447] --->call mempool_free_test
  18. [10373.989477] --->call mempool_free_test
  19. [10373.989480] --->call mempool_free_test
  20. [10373.989481] --->call mempool_free_test
  21. [10373.989493] call mempool_destroy
  22. [10373.989529] --->call mempool_free_test
  23. [10373.989540] --->call mempool_free_test
  24. [10373.989542] --->call mempool_free_test
  25. [10373.989544] --->call mempool_free_test

7、移除模块

  1. ~/mempool# rmmod mempool.ko

阅读(1548) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~