init_module和cleanup_module的多个定义

时间:2016-05-18 06:19:35

标签: linux-kernel kernel-module

我正在尝试将多个源文件编译到单个模块中。我遇到了函数的多重定义问题。

以下是file1.c文件的代码片段

#include <linux/init.h>
#include <linux/module.h>
#include "headerfile.h"

#include <linux/slab.h>


static void swarm_init(void) 
{

printk(KERN_ALERT "swarm_init function called\n"); 

}


void* func1(void) {
.....some code here

}

static void swarm_exit(void) 
{

printk(KERN_ALERT "swarm_exit: exit function called"); 

}

module_init(swarm_init);
module_exit(swarm_exit);

第二个文件如下

#include <linux/init.h>
#include <linux/module.h>
#include "headerfile.h"

#include <linux/slab.h>


static void test_init(void)
{

printk(KERN_ALERT "Test init\n");
 void *x;
 x = func1();

}

static void test_exit(void) 
{

printk(KERN_ALERT "test: exit function called"); 

}

module_init(test_init);
module_exit(test_exit);

headerfile.h如下

#ifndef _HEADERFILE_H
#define _HEADERFILE_H


 typedef struct _hashmap_element{
int key;
int in_use;
void* data;
} hashmap_element;

typedef struct _hashmap_map{
int table_size;
int size;
hashmap_element *data;
} hashmap_map;

void *func1(void);

#endif

我的makefile是

obj-m :=myfile.o
myfile-objs := file1.o file2.o 

all: 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean: 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

我不断获得init_module和cleanup_module的多个定义。

任何想法都出错了?

1 个答案:

答案 0 :(得分:1)

单个模块最多可以有一个初始化(用module_init()宏声明)和一个清理(module_exit())函数。如果您需要模块的多个部分的初始化功能,则需要将它们手动组合到单个初始化函数中。清理工作也是如此。