您的位置:首页 > 运维架构 > Linux

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: