Linux内核模块与Makefile实例
2013-07-16 13:21
357 查看
//内核模块
#include <linux/module.h>
#include <linux/slab.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("zhouyou");
MODULE_DESCRIPTION("slab test module");
static struct kmem_cache *test_cachep = NULL;
int slab_ctor_cnt = 0;
struct slab_test
{
int val;
};
void func_ctor(void *obj)
{
struct slab_test *object = obj;
slab_ctor_cnt++;
printk("in ctor function %d...\r\n", slab_ctor_cnt);
object->val = 1;
}
static int __init init(void)
{
struct slab_test *object = NULL;
printk("slab test module init...\r\n");
test_cachep = kmem_cache_create("test_cachep", sizeof(struct slab_test), 0 ,
SLAB_HWCACHE_ALIGN, func_ctor);
if(NULL == test_cachep)
{
return 0;
}
object = kmem_cache_alloc(test_cachep, GFP_KERNEL);
if(object)
{
printk("alloc one val = %d\r\n", object->val);
kmem_cache_free(test_cachep, object);
object = NULL;
}
else
{
return 0;
}
object = kmem_cache_alloc(test_cachep, GFP_KERNEL);
if(object)
{
printk("alloc two val = %d\r\n", object->val); kmem_cache_free(test_cachep, object);
object = NULL;
}
else
{
return 0;
}
return 0;
}
static void fini(void)
{
printk("test module exit...\r\n");
if(test_cachep)
{
kmem_cache_destroy(test_cachep);
}
}
module_init(init);
module_exit(fini);
//Makefile
# Makefile2.6
obj-m += testslab.o # 产生hellomod 模块的目标文件
CURRENT_PATH := $(shell pwd) #模块所在的当前路径
LINUX_KERNEL := $(shell uname -r) #Linux内核源代码的当前版本
LINUX_KERNEL_PATH := /usr/src/kernels/$(LINUX_KERNEL) #Linux内核源代码的绝对路径
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
#include <linux/module.h>
#include <linux/slab.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("zhouyou");
MODULE_DESCRIPTION("slab test module");
static struct kmem_cache *test_cachep = NULL;
int slab_ctor_cnt = 0;
struct slab_test
{
int val;
};
void func_ctor(void *obj)
{
struct slab_test *object = obj;
slab_ctor_cnt++;
printk("in ctor function %d...\r\n", slab_ctor_cnt);
object->val = 1;
}
static int __init init(void)
{
struct slab_test *object = NULL;
printk("slab test module init...\r\n");
test_cachep = kmem_cache_create("test_cachep", sizeof(struct slab_test), 0 ,
SLAB_HWCACHE_ALIGN, func_ctor);
if(NULL == test_cachep)
{
return 0;
}
object = kmem_cache_alloc(test_cachep, GFP_KERNEL);
if(object)
{
printk("alloc one val = %d\r\n", object->val);
kmem_cache_free(test_cachep, object);
object = NULL;
}
else
{
return 0;
}
object = kmem_cache_alloc(test_cachep, GFP_KERNEL);
if(object)
{
printk("alloc two val = %d\r\n", object->val); kmem_cache_free(test_cachep, object);
object = NULL;
}
else
{
return 0;
}
return 0;
}
static void fini(void)
{
printk("test module exit...\r\n");
if(test_cachep)
{
kmem_cache_destroy(test_cachep);
}
}
module_init(init);
module_exit(fini);
//Makefile
# Makefile2.6
obj-m += testslab.o # 产生hellomod 模块的目标文件
CURRENT_PATH := $(shell pwd) #模块所在的当前路径
LINUX_KERNEL := $(shell uname -r) #Linux内核源代码的当前版本
LINUX_KERNEL_PATH := /usr/src/kernels/$(LINUX_KERNEL) #Linux内核源代码的绝对路径
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
相关文章推荐
- Linux内核模块与Makefile实例
- Linux Makefile 静态库动态库应用实例
- Linux内核模块Makefile一个新手容易犯的错
- makefile实例讲解
- Linux内核模块实例
- Makefile实例
- makefile经典实例
- makefile, 实例详解
- makefile文件的编写规则及实例 (转)
- 简单实例,makefile自动依赖(二)
- gcc与makefile使用的常见问题和入门实例/GCC使用详解
- 最简单的一个makefile实例
- GNU Makefile学习专题(三) | 第三个实例
- makefile的编写实例(windows vs2010)
- Linux的Makefile简单实例教程
- Makefile中使用shell实例
- linux内核模块范例代码及Makefile写法步骤
- Makefile编写----实例展示
- autotools生成makefile文件实例
- Ubuntu下比较通用的makefile实例