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

2014年(3)

2012年(13)

我的朋友

分类: LINUX

2012-03-25 09:34:20

2012年3月25日  Sunday
 
1、内核版本号2.6.33.20
 
2、kmalloc() kfree() vmalloc() vfree() __get_free_pages()的应用方法举例
 
3、模块源文件basicmem.c

点击(此处)折叠或打开

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

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

  6. void kmalloc_test(void)
  7. {
  8.     char *buff;

  9.     printk("kmalloc test\n");

  10.     buff = kmalloc (1024,GFP_KERNEL);

  11.     if(buff != NULL){
  12.         sprintf(buff,"test memory\n");
  13.         printk(buff);

  14.         kfree(buff);
  15.     }
  16.     buff =kmalloc(32*PAGE_SIZE,GFP_KERNEL);
  17.     if(buff !=NULL){
  18.         printk("big memory ok\n");
  19.         kfree(buff);
  20.     }

  21. }

  22. void vmalloc_test(void)
  23. {
  24.     char *buff;
  25.     printk("vmalloc test\n");

  26.     buff=vmalloc(33*PAGE_SIZE);
  27.     if(buff!=NULL){
  28.         sprintf(buff,"vmalloc test ok\n");
  29.         printk(buff);

  30.         vfree(buff);
  31.     }
  32. }

  33. void get_free_pages_test(void)
  34. {
  35.     char* buff;
  36.     int order;

  37.     printk("get_free_pages test\n");

  38.     order=get_order(8192*10);
  39.     buff=__get_free_pages(GFP_KERNEL,order);
  40.     if(buff!=NULL){
  41.         sprintf(buff,"__get_free_pages test ok[%d]\n",order);
  42.         printk(buff);
  43.         free_pages(buff,order);
  44.     }
  45. }

  46. int memtest_init(void)
  47. {
  48.     
  49.     printk ("module memory test\n");
  50.     
  51.     kmalloc_test();
  52.     vmalloc_test();
  53.     get_free_pages_test();
  54.     return 0;
  55.     
  56. }

  57. void memtest_exit(void)
  58. {
  59.     printk("module memory test end\n");
  60. }

  61. module_init(memtest_init);
  62. module_exit(memtest_exit);

  63. MODULE_LICENSE("Dual BSD_GPL");
 
4、Makefile

点击(此处)折叠或打开

  1. obj-m = basicmem.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. ~/malloc# make
  2. ~/malloc# insmod memtest.ko
  3. ~/malloc# dmesg

6、运行结果

  1. [ 8913.072139] module memory test
  2. [ 8913.072162] kmalloc test
  3. [ 8913.072240] test memory
  4. [ 8913.072288] big memory ok
  5. [ 8913.072320] vmalloc test
  6. [ 8913.072416] vmalloc test ok
  7. [ 8913.072480] get_free_pages test
  8. [ 8913.072515] __get_free_pages test ok[5]

7、移除模块
 
  1. ~/mempool# rmmod memtest.ko


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