2 #include<linux/init.h>
3 //#include<linux/slab.h> /*void kmalloc(size_t size, int flags)*/
4 //#include<linux/mempool.h> /*unsigned long get_zored_page(int flags)*/
5 //#include<linux/mm.h> /*常用的内存分配接口 eg GFP_KERNEL*/6
7 MODULE_LICENSE("GPL");
8 MODULE_AUTHOR("WENHUI");
9 MODULE_DESCRIPTION("Memory alloc Module");
10 MODULE_ALIAS("malloc module");
11
12 char *buf1 = NULL;
13 char *buf2 = NULL;
14
15 int alloc_init(void)
16 {
17 buf1 = kmalloc(100,GFP_KERNEL);
18 /*分配标志 表示在内核空间进程中申请内存,允许当前进程休眠以满足分配要求*/
19 memset(buf1, 0, 100);
20 strcpy(buf1,"<<< --- Kmalloc Mem OK! --- >>>");
21 printk("<0> BUF 1 : %s\n",buf1);
22
23 buf2 = get_zeroed_page(GFP_KERNEL);
24 strcpy(buf2, "<<< --- Get Free Page OK! --- >>>");
25 printk("<0> BUF 2: %s\n",buf2);
26 return 0;
27 }
28
29 void alloc_exit(void)
30 {
31 kfree(buf1);
32 free_page(buf2);
33 printk("<0> << --- Module Exit! --- >>>\n");
34 }
wenhui@ubuntu:/home/linux-2.6.32.2/kernel_test/alloc_mem$ make
make -C /home/linux-2.6.32.2 M=/home/linux-2.6.32.2/kernel_test/alloc_mem modules
make[1]: 正在进入目录 `/home/linux-2.6.32.2'
CC [M] /home/linux-2.6.32.2/kernel_test/alloc_mem/alloc_mem.o
/home/linux-2.6.32.2/kernel_test/alloc_mem/alloc_mem.c: In function 'alloc_init':
/home/linux-2.6.32.2/kernel_test/alloc_mem/alloc_mem.c:23: warning: assignment makes pointer from integer without a cast
/home/linux-2.6.32.2/kernel_test/alloc_mem/alloc_mem.c: In function 'alloc_exit':
/home/linux-2.6.32.2/kernel_test/alloc_mem/alloc_mem.c:32: warning: passing argument 1 of 'free_pages' makes integer from pointer without a cast
Building modules, stage 2.
MODPOST 1 modules
LD [M] /home/linux-2.6.32.2/kernel_test/alloc_mem/alloc_mem.ko
make[1]:正在离开目录 `/home/linux-2.6.32.2'
加载后模块的基本功能可以实现 但是 就是存在几个 warning 有点不爽 ,添加了几个有关的头文件也没用。。。
还有奇怪的是就是没有加 上面的几个(已经被注销的3个头文件也不报错) 可能在前两个头文件中已经包含了相关
的头文件包含有,所以不用再显式包含这些头文件